In che modo Gitlab-CI eredita le variabili di ambiente?

Le variabili in Gitlab possono essere impostate in diversi posti:

  1. Nelle impostazioni del gruppo
  2. Nelle impostazioni del progetto
  3. All'interno di .gitlab-ci.yml

In questo caso, le variabili nelle impostazioni del gruppo e del progetto possono essere impostate come "file" o "variabile normale" e selezionare le caselle di controllo "protetto" e "maschera".

In che modo Gitlab-CI eredita le variabili di ambiente?

Iniziamo con l'ereditarietà semplice e diventerà gradualmente più complessa.

L'elenco definitivo dei livelli di priorità si trova alla fine del documento.

Eredità con i gruppi [fonti]

Le variabili dei gruppi vengono ereditate, con la regola che più il gruppo è vicino al progetto, più importante è il suo valore.

Gruppi con variabili

In che modo Gitlab-CI eredita le variabili di ambiente?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Risultato della pipeline

$ echo $MSG
B

Se la variabile non fosse stata specificata nel gruppo B, avremmo visto il valore A.

Ereditare variabili all'interno di .gitlab-ci.yml [fonti]

Qui tutto è abbastanza semplice: puoi impostare una variabile a livello globale o sovrascriverla all'interno del lavoro.

Gruppi con variabili

In che modo Gitlab-CI eredita le variabili di ambiente?

.gitlab-ci.yml

Creiamo ora 2 job, in uno di essi indicheremo esplicitamente $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

Risultato della pipeline

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

Ereditarietà con gruppi e all'interno di .gitlab-ci.yml [fonti]

Proviamo a combinare i 2 esempi precedenti. Le variabili di gruppo hanno la precedenza sulle variabili all'interno di .gitlab-ci.yml.

Gruppi con variabili

In che modo Gitlab-CI eredita le variabili di 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

Risultato della pipeline

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

Ereditarietà con la specifica delle variabili nelle impostazioni del progetto [fonti]

Le variabili nelle impostazioni del progetto hanno SEMPRE la massima priorità! E le variabili specificate all'interno di .gitlab-ci.yml non svolgono alcun ruolo.

Gruppi con variabili

Le variabili di gruppo hanno una priorità inferiore.
In che modo Gitlab-CI eredita le variabili di ambiente?

.gitlab-ci.yml

Usiamo il file dell'esempio precedente. Anche in questo caso ci sono variabili specificate all'interno di .gitlab-ci.yml, ma le variabili all'interno dei gruppi hanno comunque la precedenza su di esse.

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

Risultato della pipeline

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

Eredità con valore vuoto [fonti]

Anche un valore vuoto è un valore
Un valore vuoto non è Null

Gruppi con variabili

In che modo Gitlab-CI eredita le variabili di 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

Risultato della pipeline

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

Ereditarietà con include e gruppi [fonti]

Qui proveremo a includere il progetto-2 nel progetto-3
I gruppi in questo caso hanno la priorità.

Gruppi con variabili

In che modo Gitlab-CI eredita le variabili di ambiente?

.gitlab-ci.yml

E imposta la variabile globalmente in .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'

Risultato della pipeline

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

Eredità con include [fonti]

Qui proveremo a includere il progetto-2 nel progetto-3.
Con la condizione che: né i gruppi né il progetto stesso hanno variabili.

Gruppi con variabili

In che modo Gitlab-CI eredita le variabili di ambiente?

.gitlab-ci.yml

Come nell'esempio precedente

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

Risultato della pipeline

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

I risultati sono i seguenti priorità:

  1. Variabili nelle impostazioni del progetto
  2. Variabili nei gruppi
  3. Variabili rigorosamente specificate all'interno dei lavori (inclusi i file inclusi)
  4. Variabili globali all'interno di .gitlab-ci.yml
  5. Variabili globali all'interno dei file inclusi

conclusione

Il punto meno ovvio è che la regola “più una variabile è vicina al codice, più è importante” funziona prima per i gruppi, e poi la stessa regola per le variabili all’interno di .gitlab-ci.yml, ma solo a condizione che le variabili nei gruppi non sono specificate.
Successivamente, un punto importante è capire che lo spazio globale per il file .gitlab-ci.yml principale e incluso è comune. E il file in cui avviene l'inclusione ha la priorità.

Fonte: habr.com

Aggiungi un commento