Како Гитлаб-ЦИ наслеђује променљиве окружења?

Променљиве у Гитлабу се могу поставити на неколико места:

  1. У подешавањима групе
  2. У подешавањима пројекта
  3. Унутар .гитлаб-ци.имл

У овом случају, променљиве у поставкама групе и пројекта могу да се подесе као „датотека“ или „обична променљива“ и означите поља за потврду „заштићена“ и „маска“.

Како Гитлаб-ЦИ наслеђује променљиве окружења?

Почнимо са једноставним наслеђивањем и постепено ће постати сложеније.

Коначна листа нивоа приоритета налази се на крају документа.

Наслеђивање са групама [извори]

Наслеђују се варијабле из група, с тим да што је група ближе пројекту, то је њена вредност важнија.

Групе са променљивим

Како Гитлаб-ЦИ наслеђује променљиве окружења?

.гитлаб-ци.имл

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Резултат цевовода

$ echo $MSG
B

Да променљива није наведена у групи Б, тада бисмо видели вредност А.

Наслеђивање променљивих унутар .гитлаб-ци.имл [извори]

Овде је све прилично једноставно: можете поставити променљиву глобално или је можете преписати унутар посла.

Групе са променљивим

Како Гитлаб-ЦИ наслеђује променљиве окружења?

.гитлаб-ци.имл

Хајде сада да направимо 2 посла, у једном од њих ћемо експлицитно навести $МСГ.

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
  • ехо са варсима:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Наслеђивање са групама и унутар .гитлаб-ци.имл [извори]

Покушајмо да комбинујемо претходна 2 примера. Групне променљиве имају предност над променљивим унутар .гитлаб-ци.имл.

Групе са променљивим

Како Гитлаб-ЦИ наслеђује променљиве окружења?

.гитлаб-ци.имл

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
  • ехо са варсима:
    $ echo $MSG
    Y
    Job succeeded

Наслеђивање са специфицирањем променљивих у подешавањима пројекта [извори]

Променљиве у подешавањима пројекта УВЕК имају највећи приоритет! А променљиве наведене у .гитлаб-ци.имл не играју никакву улогу.

Групе са променљивим

Групне варијабле имају нижи приоритет.
Како Гитлаб-ЦИ наслеђује променљиве окружења?

.гитлаб-ци.имл

Хајде да користимо датотеку из претходног примера. Овде опет постоје променљиве наведене унутар .гитлаб-ци.имл, али променљиве унутар група и даље имају предност над њима.

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
  • ехо са варсима:
    $ echo $MSG
    project-3
    Job succeeded

Наслеђе са празном вредношћу [извори]

Празна вредност је такође вредност
Празна вредност није Нулл

Групе са променљивим

Како Гитлаб-ЦИ наслеђује променљиве окружења?

.гитлаб-ци.имл

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
  • ехо са варсима:
    $ echo $MSG
    Job succeeded

Наслеђивање са укључивањем и групама [извори]

Овде ћемо покушати да укључимо пројекат-2 у пројекат-3
Групе у овом случају имају приоритет.

Групе са променљивим

Како Гитлаб-ЦИ наслеђује променљиве окружења?

.гитлаб-ци.имл

И поставите променљиву глобално у .гитлаб-ци.имл

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
  • ехо са варсима:
    $ echo $MSG
    B
    Job succeeded

Наслеђивање са укључивањем [извори]

Овде ћемо покушати да укључимо пројекат-2 у пројекат-3.
Уз услов да: ни групе ни сам пројекат немају променљиве.

Групе са променљивим

Како Гитлаб-ЦИ наслеђује променљиве окружења?

.гитлаб-ци.имл

Исто као у претходном примеру

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
  • ехо са варсима:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Резултати су следећи приоритети:

  1. Променљиве у подешавањима пројекта
  2. Променљиве у групама
  3. Променљиве строго наведене унутар послова (укључујући укључене датотеке)
  4. Глобалне променљиве унутар .гитлаб-ци.имл
  5. Глобалне варијабле унутар укључених датотека

Закључак

Најнеочигледнија ствар је да правило „што је променљива ближа коду, то је важнија“ прво ради за групе, а затим исто правило за променљиве унутар .гитлаб-ци.имл, али само под условом да променљиве у групама нису наведене .
Следеће, важно је схватити да је глобални простор за главни и укључени .гитлаб-ци.имл уобичајен. А приоритет има датотека у којој се јавља укључивање.

Извор: ввв.хабр.цом

Додај коментар