Variabelen in Gitlab kunnen op verschillende plaatsen worden ingesteld:
- In groepsinstellingen
- In de projectinstellingen
- 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.
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
.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
.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
.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.
.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
.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
.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
.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:
- Variabelen in projectinstellingen
- Variabelen in groepen
- Variabelen die strikt gespecificeerd zijn in taken (inclusief meegeleverde bestanden)
- Globale variabelen binnen .gitlab-ci.yml
- 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