Come Gitlab-CI eredita le variabili ambientali?

Le variabili in Gitlab possono essere impostate in diversi luoghi:

  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 si possono attivare le opzioni "protetto" e "mascherare".

Come Gitlab-CI eredita le variabili ambientali?

Iniziamo con l'ereditarietà semplice e poi ci complicheremo gradualmente.

L'elenco finale dei livelli di priorità è disponibile alla fine del documento.

Ereditarietà con i gruppi [sorgenti]

Le variabili dai gruppi sono ereditate, seguendo la regola che più un gruppo è vicino al progetto, più è importante il suo valore.

Gruppi con variabili

Come Gitlab-CI eredita le variabili ambientali?

.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.

Ereditarietà delle variabili all'interno di .gitlab-ci.yml [sorgenti]

Qui è tutto piuttosto semplice: puoi definire una variabile globalmente, oppure sovrascriverla all'interno di un job.

Gruppi con variabili

Come Gitlab-CI eredita le variabili ambientali?

.gitlab-ci.yml

Creiamo ora 2 job, in uno dei quali specificheremo chiaramente $MSG.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Personalizzato in .gitlab-ci.yml globale"

echo:
  stage: test
  script:
    - echo $MSG

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

Risultato della pipeline

  • echo:
    $ echo $MSG
    Personalizzato in .gitlab-ci.yml globale
    Job completato con successo
  • echo con variabili:
    $ echo $MSG
    Personalizzato in job .gitlab-ci.yml
    Job completato con successo

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

Proviamo a combinare i precedenti 2 esempi. Le variabili dei gruppi hanno priorità rispetto alle variabili all'interno di .gitlab-ci.yml.

Gruppi con variabili

Come Gitlab-CI eredita le variabili ambientali?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Personalizzato in .gitlab-ci.yml globale"

echo:
  stage: test
  script:
    - echo $MSG

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

Risultato della pipeline

  • echo:
    $ echo $MSG
    Y
    Job completato con successo
  • echo con variabili:
    $ echo $MSG
    Y
    Job completato con successo

Ereditarietà specificando variabili nelle impostazioni del progetto [sorgenti]

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

Gruppi con variabili

Le variabili dei gruppi hanno una priorità inferiore.
Come Gitlab-CI eredita le variabili ambientali?

.gitlab-ci.yml

Utilizziamo il file dall'esempio precedente. Qui ci sono ancora variabili definite all'interno di .gitlab-ci.yml, ma le variabili all'interno dei gruppi hanno comunque priorità su di esse.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Personalizzato in .gitlab-ci.yml globale"

echo:
  stage: test
  script:
    - echo $MSG

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

Risultato della pipeline

  • echo:
    $ echo $MSG
    project-3
    Job completato con successo
  • echo con variabili:
    $ echo $MSG
    project-3
    Job completato con successo

Ereditarietà con valore vuoto [sorgenti]

Un valore vuoto è comunque un valore
Un valore vuoto non è Null

Gruppi con variabili

Come Gitlab-CI eredita le variabili ambientali?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Personalizzato in .gitlab-ci.yml globale"

echo:
  stage: test
  script:
    - echo $MSG

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

Risultato della pipeline

  • echo:
    $ echo $MSG
    Job completato con successo
  • echo con variabili:
    $ echo $MSG
    Job completato con successo

Ereditarietà con inclusione e gruppi [sorgenti]

Qui proveremo a includere project-3 in project-2
I gruppi in questo caso hanno priorità.

Gruppi con variabili

Come Gitlab-CI eredita le variabili ambientali?

.gitlab-ci.yml

E impostiamo una variabile globalmente in .gitlab-ci.yml

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

Risultato della pipeline

  • echo:
    $ echo $MSG
    B
    Job completato con successo
  • echo con variabili:
    $ echo $MSG
    B
    Job completato con successo

Ereditarietà con inclusione [sorgenti]

Qui proveremo ad includere project-3 in project-2.
A condizione che: né i gruppi né il progetto stesso abbiano variabili.

Gruppi con variabili

Come Gitlab-CI eredita le variabili ambientali?

.gitlab-ci.yml

Identico all'esempio precedente

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

Risultato della pipeline

  • echo:
    $ echo $MSG
    Con include .gitlab-ci.yml
    Job riuscito
  • echo con variabili:
    $ echo $MSG
    Personalizzato in job .gitlab-ci.yml
    Job completato con successo

Risultano i seguenti priorità:

  1. Variabili nelle impostazioni del progetto
  2. Variabili nei gruppi
  3. Variabili specificamente indicate all'interno del job (compresi 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" si applica prima ai gruppi e poi la stessa regola vale anche per le variabili all'interno di .gitlab-ci.yml, ma solo a condizione che le variabili nei gruppi non siano definite.
Un altro punto importante è capire che lo spazio globale per il principale e per il .gitlab-ci.yml incluso è comune. E il file in cui avviene l'inclusione ha la priorità.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster