Πώς το Gitlab-CI κληρονομεί τις μεταβλητές περιβάλλοντος;

Οι μεταβλητές στο Gitlab μπορούν να ρυθμιστούν σε διάφορα σημεία:

  1. Στις ρυθμίσεις ομάδας
  2. Στις ρυθμίσεις του έργου
  3. Μέσα .gitlab-ci.yml

Σε αυτήν την περίπτωση, οι μεταβλητές στις ρυθμίσεις ομάδας και έργου μπορούν να οριστούν ως "αρχείο" ή "κανονική μεταβλητή" και να ελέγξετε τα πλαίσια ελέγχου "προστατευμένο" και "μάσκα".

Πώς το Gitlab-CI κληρονομεί τις μεταβλητές περιβάλλοντος;

Ας ξεκινήσουμε με την απλή κληρονομικότητα και σταδιακά θα γίνει πιο περίπλοκη.

Η τελική λίστα των επιπέδων προτεραιότητας βρίσκεται στο τέλος του εγγράφου.

Κληρονομιά με ομάδες [πηγές]

Οι μεταβλητές από τις ομάδες κληρονομούνται, με τον κανόνα ότι όσο πιο κοντά βρίσκεται η ομάδα στο έργο, τόσο πιο σημαντική είναι η αξία της.

Ομάδες με μεταβλητές

Πώς το Gitlab-CI κληρονομεί τις μεταβλητές περιβάλλοντος;

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Αποτέλεσμα αγωγού

$ echo $MSG
B

Εάν η μεταβλητή δεν είχε καθοριστεί στην ομάδα Β, τότε θα είχαμε δει την τιμή Α.

Κληρονομώντας μεταβλητές μέσα στο .gitlab-ci.yml [πηγές]

Όλα είναι πολύ απλά εδώ: μπορείτε να ορίσετε μια μεταβλητή καθολικά ή μπορείτε να την αντικαταστήσετε μέσα στην εργασία.

Ομάδες με μεταβλητές

Πώς το Gitlab-CI κληρονομεί τις μεταβλητές περιβάλλοντος;

.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 κληρονομεί τις μεταβλητές περιβάλλοντος;

.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 κληρονομεί τις μεταβλητές περιβάλλοντος;

.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 κληρονομεί τις μεταβλητές περιβάλλοντος;

.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 κληρονομεί τις μεταβλητές περιβάλλοντος;

.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 κληρονομεί τις μεταβλητές περιβάλλοντος;

.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

Τα αποτελέσματα είναι τα εξής προτεραιότητες:

  1. Μεταβλητές στις ρυθμίσεις του έργου
  2. Μεταβλητές σε ομάδες
  3. Μεταβλητές που προσδιορίζονται αυστηρά μέσα στις εργασίες (συμπεριλαμβανομένων των περιλαμβανόμενων αρχείων)
  4. Καθολικές μεταβλητές μέσα στο .gitlab-ci.yml
  5. Καθολικές μεταβλητές μέσα στα αρχεία που περιλαμβάνονται

Συμπέρασμα

Το πιο μη προφανές σημείο είναι ότι ο κανόνας "όσο πιο κοντά είναι μια μεταβλητή στον κώδικα, τόσο πιο σημαντικός είναι" λειτουργεί πρώτα για ομάδες και μετά ο ίδιος κανόνας για μεταβλητές μέσα στο .gitlab-ci.yml, αλλά μόνο υπό την προϋπόθεση ότι οι μεταβλητές στις ομάδες δεν καθορίζονται .
Στη συνέχεια, ένα σημαντικό σημείο είναι να κατανοήσουμε ότι ο παγκόσμιος χώρος για το κύριο και συμπεριλαμβανόμενο .gitlab-ci.yml είναι κοινός. Και το αρχείο στο οποίο γίνεται η συμπερίληψη έχει προτεραιότητα.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο