Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

Maaaring itakda ang mga variable sa Gitlab sa ilang lugar:

  1. Sa mga setting ng grupo
  2. Sa mga setting ng proyekto
  3. Sa loob ng .gitlab-ci.yml

Sa kasong ito, maaaring itakda ang mga variable sa pangkat at mga setting ng proyekto bilang "file" o "regular na variable" at lagyan ng check ang mga checkbox na "protektado" at "mask".

Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

Magsimula tayo sa simpleng pamana at unti-unti itong magiging kumplikado.

Ang huling listahan ng mga antas ng priyoridad ay makikita sa dulo ng dokumento.

Pamana sa mga pangkat [mga mapagkukunan]

Ang mga variable mula sa mga pangkat ay minana, na may panuntunan na mas malapit ang grupo sa proyekto, mas mahalaga ang halaga nito.

Mga pangkat na may mga variable

Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Resulta ng pipeline

$ echo $MSG
B

Kung ang variable ay hindi tinukoy sa pangkat B, makikita natin ang halaga A.

Pagpapamana ng mga variable sa loob ng .gitlab-ci.yml [mga mapagkukunan]

Ang lahat ay medyo simple dito: maaari kang magtakda ng isang variable sa buong mundo, o maaari mo itong i-overwrite sa loob ng trabaho.

Mga pangkat na may mga variable

Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

.gitlab-ci.yml

Gumawa tayo ngayon ng 2 trabaho, sa isa sa mga ito ay tahasan nating ipahiwatig ang $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

Resulta ng pipeline

  • sigaw:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • echo kasama ang mga vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Pamana kasama ang mga grupo at sa loob ng .gitlab-ci.yml [mga mapagkukunan]

Subukan nating pagsamahin ang nakaraang 2 halimbawa. Ang mga variable ng pangkat ay nangunguna sa mga variable sa loob ng .gitlab-ci.yml.

Mga pangkat na may mga variable

Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

.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

Resulta ng pipeline

  • sigaw:
    $ echo $MSG
    Y
    Job succeeded
  • echo kasama ang mga vars:
    $ echo $MSG
    Y
    Job succeeded

Pamana na may pagtukoy sa mga variable sa mga setting ng proyekto [mga mapagkukunan]

Palaging may pinakamataas na priyoridad ang mga variable sa mga setting ng proyekto! At ang mga variable na tinukoy sa loob ng .gitlab-ci.yml ay hindi gumaganap ng anumang papel.

Mga pangkat na may mga variable

Ang mga variable ng pangkat ay may mas mababang priyoridad.
Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

.gitlab-ci.yml

Gamitin natin ang file mula sa nakaraang halimbawa. Dito muli may mga variable na tinukoy sa loob ng .gitlab-ci.yml, ngunit ang mga variable sa loob ng mga grupo ay nangunguna pa rin sa kanila.

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

Resulta ng pipeline

  • sigaw:
    $ echo $MSG
    project-3
    Job succeeded
  • echo kasama ang mga vars:
    $ echo $MSG
    project-3
    Job succeeded

Pamana na may walang laman na halaga [mga mapagkukunan]

Ang isang walang laman na halaga ay isa ring halaga
Ang isang walang laman na halaga ay hindi Null

Mga pangkat na may mga variable

Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

.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

Resulta ng pipeline

  • sigaw:
    $ echo $MSG
    Job succeeded
  • echo kasama ang mga vars:
    $ echo $MSG
    Job succeeded

Pamana na may kasama at mga pangkat [mga mapagkukunan]

Dito ay susubukan naming isama ang project-2 sa project-3
Ang mga grupo sa kasong ito ay may priyoridad.

Mga pangkat na may mga variable

Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

.gitlab-ci.yml

At itakda ang variable sa buong mundo sa .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'

Resulta ng pipeline

  • sigaw:
    $ echo $MSG
    B
    Job succeeded
  • echo kasama ang mga vars:
    $ echo $MSG
    B
    Job succeeded

Pamana na may kasama [mga mapagkukunan]

Dito ay susubukan naming isama ang project-2 sa project-3.
Sa kondisyon na: ni ang mga grupo o ang proyekto mismo ay walang anumang mga variable.

Mga pangkat na may mga variable

Paano nagmamana ang Gitlab-CI ng mga variable ng kapaligiran?

.gitlab-ci.yml

Katulad ng sa nakaraang halimbawa

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

Resulta ng pipeline

  • sigaw:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • echo kasama ang mga vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Ang mga resulta ay ang mga sumusunod mga priyoridad:

  1. Mga variable sa mga setting ng proyekto
  2. Mga variable sa mga pangkat
  3. Mga variable na mahigpit na tinukoy sa loob ng mga trabaho (kabilang ang mga kasamang file)
  4. Mga pandaigdigang variable sa loob ng .gitlab-ci.yml
  5. Mga pandaigdigang variable sa loob ng mga file

Konklusyon

Ang pinaka-hindi halatang punto ay ang panuntunang "mas malapit ang isang variable sa code, mas mahalaga ito" ay gumagana muna para sa mga grupo, at pagkatapos ay ang parehong panuntunan para sa mga variable sa loob ng .gitlab-ci.yml, ngunit sa ilalim lamang ng kundisyon na ang mga variable sa mga grupo ay hindi tinukoy.
Susunod, isang mahalagang punto ay upang maunawaan na ang pandaigdigang espasyo para sa pangunahing at kasamang .gitlab-ci.yml ay karaniwan. At ang file kung saan nangyayari ang pagsasama ay may priyoridad.

Pinagmulan: www.habr.com

Magdagdag ng komento