Como herda Gitlab-CI as variables de ambiente?

As variables en Gitlab pódense establecer en varios lugares:

  1. Na configuración do grupo
  2. Na configuración do proxecto
  3. Dentro de .gitlab-ci.yml

Neste caso, as variables da configuración do grupo e do proxecto pódense definir como "ficheiro" ou "variable regular" e marcar as caixas de verificación "protexido" e "máscara".

Como herda Gitlab-CI as variables de ambiente?

Comecemos pola herdanza simple e gradualmente irase facendo máis complexa.

A lista definitiva dos niveis de prioridade pódese consultar ao final do documento.

Herdanza con grupos [fontes]

As variables dos grupos herdanse, coa regra de que canto máis preto estea o grupo do proxecto, máis importante é o seu valor.

Grupos con variables

Como herda Gitlab-CI as variables de ambiente?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Resultado da canalización

$ echo $MSG
B

Se a variable non se especificara no grupo B, veriamos o valor A.

Herdando variables dentro de .gitlab-ci.yml [fontes]

Aquí todo é moi sinxelo: podes establecer unha variable globalmente ou podes sobreescribila dentro do traballo.

Grupos con variables

Como herda Gitlab-CI as variables de ambiente?

.gitlab-ci.yml

Imos agora crear 2 postos de traballo, nun deles indicaremos explícitamente $MSG.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Custom in global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

Resultado da canalización

  • eco:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • eco con vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Herdanza con grupos e dentro de .gitlab-ci.yml [fontes]

Tentemos combinar os 2 exemplos anteriores. As variables de grupo teñen prioridade sobre as variables dentro de .gitlab-ci.yml.

Grupos con variables

Como herda Gitlab-CI as variables de ambiente?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Custom in global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

Resultado da canalización

  • eco:
    $ echo $MSG
    Y
    Job succeeded
  • eco con vars:
    $ echo $MSG
    Y
    Job succeeded

Herdanza coa especificación de variables na configuración do proxecto [fontes]

As variables na configuración do proxecto SEMPRE teñen a máxima prioridade! E as variables especificadas dentro de .gitlab-ci.yml non xogan ningún papel.

Grupos con variables

As variables de grupo teñen menor prioridade.
Como herda Gitlab-CI as variables de ambiente?

.gitlab-ci.yml

Imos usar o ficheiro do exemplo anterior. Aquí de novo hai variables especificadas dentro de .gitlab-ci.yml, pero as variables dentro dos grupos aínda teñen prioridade sobre elas.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Custom in global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

Resultado da canalización

  • eco:
    $ echo $MSG
    project-3
    Job succeeded
  • eco con vars:
    $ echo $MSG
    project-3
    Job succeeded

Herdanza con valor baleiro [fontes]

Un valor baleiro tamén é un valor
Un valor baleiro non é nulo

Grupos con variables

Como herda Gitlab-CI as variables de ambiente?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Custom in global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

Resultado da canalización

  • eco:
    $ echo $MSG
    Job succeeded
  • eco con vars:
    $ echo $MSG
    Job succeeded

Herdanza con inclusión e grupos [fontes]

Aquí tentaremos incluír o proxecto-2 no proxecto-3
Neste caso, os grupos teñen prioridade.

Grupos con variables

Como herda Gitlab-CI as variables de ambiente?

.gitlab-ci.yml

E establece a variable globalmente en .gitlab-ci.yml

variables:
 MSG: "With  include  .gitlab-ci.yml"
include:
 - project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
   file: '.gitlab-ci.yml'

Resultado da canalización

  • eco:
    $ echo $MSG
    B
    Job succeeded
  • eco con vars:
    $ echo $MSG
    B
    Job succeeded

Herdanza con inclusión [fontes]

Aquí tentaremos incluír o proxecto-2 no proxecto-3.
Coa condición de que: nin os grupos nin o propio proxecto teñan ningunha variable.

Grupos con variables

Como herda Gitlab-CI as variables de ambiente?

.gitlab-ci.yml

Igual que no exemplo anterior

variables:
 MSG: "With  include  .gitlab-ci.yml"
include:
 - project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
   file: '.gitlab-ci.yml'

Resultado da canalización

  • eco:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • eco con vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Os resultados son os seguintes prioridades:

  1. Variables na configuración do proxecto
  2. Variables en grupos
  3. Variables especificadas estrictamente dentro dos traballos (incluíndo ficheiros incluídos)
  4. Variables globais dentro de .gitlab-ci.yml
  5. Variables globais dentro dos ficheiros incluídos

Conclusión

O punto máis non obvio é que a regra "canto máis preto estea unha variable ao código, máis importante é" funciona primeiro para os grupos, e despois a mesma regra para as variables dentro de .gitlab-ci.yml, pero só baixo a condición que non se especifican as variables dos grupos .
A continuación, un punto importante é entender que o espazo global para o .gitlab-ci.yml principal e incluído é común. E o ficheiro no que se produce a inclusión ten prioridade.

Fonte: www.habr.com

Engadir un comentario