As variables en Gitlab pódense establecer en varios lugares:
- Na configuración do grupo
- Na configuración do proxecto
- 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".
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
.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
.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
.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.
.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
.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
.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
.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:
- Variables na configuración do proxecto
- Variables en grupos
- Variables especificadas estrictamente dentro dos traballos (incluíndo ficheiros incluídos)
- Variables globais dentro de .gitlab-ci.yml
- 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