Hoe erft Gitlab-CI omgevingsvariabelen?

Variabelen in Gitlab kunnen op meerdere plaatsen worden ingesteld:

  1. In groepsinstellingen
  2. In projectinstellingen
  3. Binnen .gitlab-ci.yml

In groeps- en projectinstellingen kunnen variabelen worden ingesteld als 'bestand' of 'gewone variabele' en de vinkjes 'beschermd' en 'maskeren' kunnen worden aangevinkt.

Hoe erft Gitlab-CI omgevingsvariabelen?

Laten we beginnen met eenvoudige overerving en het zal geleidelijk moeilijker worden.

Je kunt de definitieve lijst met prioriteitsniveaus aan het einde van het document bekijken.

Overerving met groepen [bronnen]

Groepsvariabelen worden overgeƫrfd, met de regel dat hoe dichter de groep bij het project ligt, des te belangrijker de waarde is.

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Pipeline-uitvoer

$ echo $MSG
B

Als de variabele niet in groep B was opgegeven, dan zouden we waarde A hebben gezien.

Overerving van variabelen binnen .gitlab-ci.yml [bronnen]

Hier is alles vrij eenvoudig: je kunt een globale variabele instellen, of je kunt deze binnen de job overschrijven.

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

Laten we nu 2 jobs maken, waarbij we in een van hen expliciet $MSG opgeven.

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

echo:
  stage: test
  script:
    - echo $MSG

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

Pipeline-uitvoer

  • echo:
    $ echo $MSG
    Aangepast in globale .gitlab-ci.yml
    Job geslaagd
  • echo met variabelen:
    $ echo $MSG
    Aangepast in job .gitlab-ci.yml
    Job geslaagd

Overerving met groepen en binnen .gitlab-ci.yml [bronnen]

Laten we proberen de voorgaande 2 voorbeelden samen te voegen. Groepsvariabelen hebben voorrang boven de variabelen binnen .gitlab-ci.yml.

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

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

echo:
  stage: test
  script:
    - echo $MSG

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

Pipeline-uitvoer

  • echo:
    $ echo $MSG
    Y
    Job geslaagd
  • echo met variabelen:
    $ echo $MSG
    Y
    Job geslaagd

Overerving met vermelding van variabelen in projectinstellingen [bronnen]

Variabelen in projectinstellingen hebben ALTIJD de hoogste prioriteit! En de variabelen die binnen .gitlab-ci.yml zijn opgegeven, spelen geen enkele rol.

Groepen met variabelen

Groepsvariabelen hebben een lagere prioriteit.
Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

Laten we het bestand uit het vorige voorbeeld gebruiken. Hier zijn weer variabelen opgegeven binnen .gitlab-ci.yml, maar groepsvariabelen hebben nog steeds voorrang.

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

echo:
  stage: test
  script:
    - echo $MSG

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

Pipeline-uitvoer

  • echo:
    $ echo $MSG
    project-3
    Job geslaagd
  • echo met variabelen:
    $ echo $MSG
    project-3
    Job geslaagd

Overerving met een lege waarde [bronnen]

Een lege waarde is ook een waarde
Een lege waarde is niet Null

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

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

echo:
  stage: test
  script:
    - echo $MSG

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

Pipeline-uitvoer

  • echo:
    $ echo $MSG
    Job geslaagd
  • echo met variabelen:
    $ echo $MSG
    Job geslaagd

Overerving met inclusies en groepen [bronnen]

Hier proberen we project-3 in project-2 op te nemen
Groepen hebben in dit geval voorrang.

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

En we stellen een variabele globaal in binnen .gitlab-ci.yml

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

Pipeline-uitvoer

  • echo:
    $ echo $MSG
    B
    Job geslaagd
  • echo met variabelen:
    $ echo $MSG
    B
    Job geslaagd

Overerving met inclusies [bronnen]

Hier proberen we project-3 in project-2 op te nemen.
Op voorwaarde dat: noch de groep, noch het project zelf enige variabelen heeft.

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

Net als in het voorgaande voorbeeld

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

Pipeline-uitvoer

  • echo:
    $ echo $MSG
    Met include .gitlab-ci.yml
    Taak geslaagd
  • echo met variabelen:
    $ echo $MSG
    Aangepast in job .gitlab-ci.yml
    Job geslaagd

Er komen de volgende uitkomsten prioriteiten:

  1. Variabelen in de projectinstellingen
  2. Variabelen in groepen
  3. Variabelen die strikt binnen de job zijn opgegeven (inclusief ingesloten bestanden)
  4. Globale variabelen binnen .gitlab-ci.yml
  5. Globale variabelen binnen ingesloten bestanden

Conclusie

Het meest onopvallende punt is dat de regel 'hoe dichter de variabele bij de code staat, des te belangrijker is deze' eerst geldt voor groepen, en vervolgens geldt dezelfde regel voor variabelen binnen .gitlab-ci.yml, maar alleen op voorwaarde dat de variabelen in groepen niet zijn gedefinieerd.
Verder is het belangrijke punt te begrijpen dat de globale ruimte voor de hoofd- en ingesloten .gitlab-ci.yml gemeenschappelijk is. En het bestand waarin de inclusie plaatsvindt heeft prioriteit.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster