Hoe erft Gitlab-CI omgevingsvariabelen?

Variabelen in Gitlab kunnen op verschillende plaatsen worden ingesteld:

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

In dit geval kunnen variabelen in de groeps- en projectinstellingen worden ingesteld als “bestand” of “gewone variabele” en kunnen de selectievakjes “beschermd” en “masker” worden aangevinkt.

Hoe erft Gitlab-CI omgevingsvariabelen?

Laten we beginnen met eenvoudige overerving; het zal geleidelijk complexer worden.

De definitieve lijst met prioriteitsniveaus vindt u aan het einde van het document.

Erfenis met groepen [bronnen]

Variabelen van groepen worden geërfd, waarbij de regel geldt dat hoe dichter de groep zich bij het project bevindt, hoe belangrijker de waarde ervan 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

Resultaat pijplijn

$ echo $MSG
B

Als de variabele niet in groep B was gespecificeerd, dan hadden we de waarde A gezien.

Variabelen overnemen binnen .gitlab-ci.yml [bronnen]

Alles is hier heel eenvoudig: u kunt een variabele globaal instellen, of u kunt deze binnen de taak overschrijven.

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

Laten we nu 2 banen creëren, in één ervan zullen we expliciet $MSG aangeven.

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

Resultaat pijplijn

  • gooide uit:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • echo met vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

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

Laten we proberen de vorige twee voorbeelden te combineren. Groepsvariabelen hebben voorrang op variabelen binnen .gitlab-ci.yml.

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.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

Resultaat pijplijn

  • gooide uit:
    $ echo $MSG
    Y
    Job succeeded
  • echo met vars:
    $ echo $MSG
    Y
    Job succeeded

Overerving met het opgeven van variabelen in projectinstellingen [bronnen]

Variabelen in projectinstellingen hebben ALTIJD de hoogste prioriteit! En de variabelen die gespecificeerd zijn in .gitlab-ci.yml 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. Ook hier zijn er variabelen gespecificeerd binnen .gitlab-ci.yml, maar variabelen binnen groepen hebben nog steeds voorrang.

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

Resultaat pijplijn

  • gooide uit:
    $ echo $MSG
    project-3
    Job succeeded
  • echo met vars:
    $ echo $MSG
    project-3
    Job succeeded

Overerving met 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: "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

Resultaat pijplijn

  • gooide uit:
    $ echo $MSG
    Job succeeded
  • echo met vars:
    $ echo $MSG
    Job succeeded

Overerving met include en groepen [bronnen]

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

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

En stel de variabele globaal 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'

Resultaat pijplijn

  • gooide uit:
    $ echo $MSG
    B
    Job succeeded
  • echo met vars:
    $ echo $MSG
    B
    Job succeeded

Erfenis met include [bronnen]

Hier zullen we proberen project-2 in project-3 op te nemen.
Met de voorwaarde dat: noch de groepen, noch het project zelf variabelen hebben.

Groepen met variabelen

Hoe erft Gitlab-CI omgevingsvariabelen?

.gitlab-ci.yml

Hetzelfde als in het vorige voorbeeld

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

Resultaat pijplijn

  • gooide uit:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • echo met vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

De resultaten zijn als volgt prioriteiten:

  1. Variabelen in projectinstellingen
  2. Variabelen in groepen
  3. Variabelen die strikt gespecificeerd zijn in taken (inclusief meegeleverde bestanden)
  4. Globale variabelen binnen .gitlab-ci.yml
  5. Globale variabelen in de opgenomen bestanden

Conclusie

Het meest niet voor de hand liggende punt is dat de regel “hoe dichter een variabele bij de code is, hoe belangrijker deze is” eerst werkt voor groepen, en daarna dezelfde regel voor variabelen binnen .gitlab-ci.yml, maar alleen onder de voorwaarde dat de variabelen in de groepen niet zijn gespecificeerd.
Vervolgens is het een belangrijk punt om te begrijpen dat de globale ruimte voor de hoofd- en inbegrepen .gitlab-ci.yml gebruikelijk is. En het bestand waarin de opname plaatsvindt, heeft voorrang.

Bron: www.habr.com

Voeg een reactie