Οι μεταβλητές στο Gitlab μπορούν να ρυθμιστούν σε διάφορα σημεία:
- Στις ρυθμίσεις ομάδας
- Στις ρυθμίσεις του έργου
- Μέσα .gitlab-ci.yml
Σε αυτήν την περίπτωση, οι μεταβλητές στις ρυθμίσεις ομάδας και έργου μπορούν να οριστούν ως "αρχείο" ή "κανονική μεταβλητή" και να ελέγξετε τα πλαίσια ελέγχου "προστατευμένο" και "μάσκα".
Ας ξεκινήσουμε με την απλή κληρονομικότητα και σταδιακά θα γίνει πιο περίπλοκη.
Η τελική λίστα των επιπέδων προτεραιότητας βρίσκεται στο τέλος του εγγράφου.
Κληρονομιά με ομάδες [πηγές]
Οι μεταβλητές από τις ομάδες κληρονομούνται, με τον κανόνα ότι όσο πιο κοντά βρίσκεται η ομάδα στο έργο, τόσο πιο σημαντική είναι η αξία της.
Ομάδες με μεταβλητές
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Αποτέλεσμα αγωγού
$ echo $MSG
B
Εάν η μεταβλητή δεν είχε καθοριστεί στην ομάδα Β, τότε θα είχαμε δει την τιμή Α.
Κληρονομώντας μεταβλητές μέσα στο .gitlab-ci.yml [πηγές]
Όλα είναι πολύ απλά εδώ: μπορείτε να ορίσετε μια μεταβλητή καθολικά ή μπορείτε να την αντικαταστήσετε μέσα στην εργασία.
Ομάδες με μεταβλητές
.gitlab-ci.yml
Ας δημιουργήσουμε τώρα 2 θέσεις εργασίας, σε μία από αυτές θα αναφέρουμε ρητά το $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
Αποτέλεσμα αγωγού
- ηχώ:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- ηχώ με vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Κληρονομικότητα με ομάδες και μέσα .gitlab-ci.yml [πηγές]
Ας προσπαθήσουμε να συνδυάσουμε τα προηγούμενα 2 παραδείγματα. Οι μεταβλητές ομάδας έχουν προτεραιότητα έναντι των μεταβλητών μέσα στο .gitlab-ci.yml.
Ομάδες με μεταβλητές
.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
Αποτέλεσμα αγωγού
- ηχώ:
$ echo $MSG Y Job succeeded
- ηχώ με vars:
$ echo $MSG Y Job succeeded
Κληρονομικότητα με τον καθορισμό μεταβλητών στις ρυθμίσεις του έργου [πηγές]
Οι μεταβλητές στις ρυθμίσεις του έργου έχουν ΠΑΝΤΑ την υψηλότερη προτεραιότητα! Και οι μεταβλητές που καθορίζονται στο .gitlab-ci.yml δεν παίζουν κανένα ρόλο.
Ομάδες με μεταβλητές
Οι μεταβλητές ομάδας έχουν χαμηλότερη προτεραιότητα.
.gitlab-ci.yml
Ας χρησιμοποιήσουμε το αρχείο από το προηγούμενο παράδειγμα. Και εδώ υπάρχουν μεταβλητές που καθορίζονται μέσα στο .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
Αποτέλεσμα αγωγού
- ηχώ:
$ echo $MSG project-3 Job succeeded
- ηχώ με vars:
$ echo $MSG project-3 Job succeeded
Κληρονομιά με κενή αξία [πηγές]
Μια κενή τιμή είναι επίσης μια τιμή
Μια κενή τιμή δεν είναι Null
Ομάδες με μεταβλητές
.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
Αποτέλεσμα αγωγού
- ηχώ:
$ echo $MSG Job succeeded
- ηχώ με vars:
$ echo $MSG Job succeeded
Κληρονομιά με περιλαμβάνει και ομάδες [πηγές]
Εδώ θα προσπαθήσουμε να συμπεριλάβουμε το έργο-2 στο έργο-3
Οι ομάδες σε αυτή την περίπτωση έχουν προτεραιότητα.
Ομάδες με μεταβλητές
.gitlab-ci.yml
Και ορίστε τη μεταβλητή καθολικά στο .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'
Αποτέλεσμα αγωγού
- ηχώ:
$ echo $MSG B Job succeeded
- ηχώ με vars:
$ echo $MSG B Job succeeded
Κληρονομιά με περιλαμβάνει [πηγές]
Εδώ θα προσπαθήσουμε να συμπεριλάβουμε το έργο-2 στο έργο-3.
Με την προϋπόθεση ότι: ούτε οι ομάδες ούτε το ίδιο το έργο έχουν μεταβλητές.
Ομάδες με μεταβλητές
.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'
Αποτέλεσμα αγωγού
- ηχώ:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- ηχώ με vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Τα αποτελέσματα είναι τα εξής προτεραιότητες:
- Μεταβλητές στις ρυθμίσεις του έργου
- Μεταβλητές σε ομάδες
- Μεταβλητές που προσδιορίζονται αυστηρά μέσα στις εργασίες (συμπεριλαμβανομένων των περιλαμβανόμενων αρχείων)
- Καθολικές μεταβλητές μέσα στο .gitlab-ci.yml
- Καθολικές μεταβλητές μέσα στα αρχεία που περιλαμβάνονται
Συμπέρασμα
Το πιο μη προφανές σημείο είναι ότι ο κανόνας "όσο πιο κοντά είναι μια μεταβλητή στον κώδικα, τόσο πιο σημαντικός είναι" λειτουργεί πρώτα για ομάδες και μετά ο ίδιος κανόνας για μεταβλητές μέσα στο .gitlab-ci.yml, αλλά μόνο υπό την προϋπόθεση ότι οι μεταβλητές στις ομάδες δεν καθορίζονται .
Στη συνέχεια, ένα σημαντικό σημείο είναι να κατανοήσουμε ότι ο παγκόσμιος χώρος για το κύριο και συμπεριλαμβανόμενο .gitlab-ci.yml είναι κοινός. Και το αρχείο στο οποίο γίνεται η συμπερίληψη έχει προτεραιότητα.
Πηγή: www.habr.com