Как 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

Если Π±Ρ‹ пСрСмСнная Π½Π΅ Π±Ρ‹Π»Π° ΡƒΠΊΠ°Π·Π°Π½Π° Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ B, Ρ‚ΠΎ ΠΌΡ‹ Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ А.

НаслСдованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ .gitlab-ci.yml [исходники]

Π—Π΄Π΅ΡΡŒ всС довольно просто: ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ глобально ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΆΠΎΠ±Ρ‹.

Π“Ρ€ΡƒΠΏΠΏΡ‹ c ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ

Как 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:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • echo with vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

НаслСдованиС с Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ .gitlab-ci.yml [исходники]

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ 2 ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏ Π² ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ .gitlab-ci.yml.

Π“Ρ€ΡƒΠΏΠΏΡ‹ c ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ

Как 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:
    $ echo $MSG
    Y
    Job succeeded
  • echo with vars:
    $ echo $MSG
    Y
    Job succeeded

НаслСдованиС с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² настройках ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° [исходники]

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² настройках ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠΌΠ΅ΡŽΡ‚ ВБЕГДА Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚! И ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ .gitlab-ci.yml Π½Π΅ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ.

Π“Ρ€ΡƒΠΏΠΏΡ‹ c ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏ ΠΈΠΌΠ΅ΡŽΡ‚ мСньший ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚.
Как 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:
    $ echo $MSG
    project-3
    Job succeeded
  • echo with vars:
    $ echo $MSG
    project-3
    Job succeeded

НаслСдованиС с пустым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ [исходники]

ΠŸΡƒΡΡ‚ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – это Ρ‚ΠΎΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠŸΡƒΡΡ‚ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – это Π½Π΅ Null

Π“Ρ€ΡƒΠΏΠΏΡ‹ c ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ

Как 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:
    $ echo $MSG
    Job succeeded
  • echo with vars:
    $ echo $MSG
    Job succeeded

НаслСдованиС с инклюдом ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ [исходники]

Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π² project-2 Π·Π°ΠΈΠ½ΠΊΠ»ΡŽΠ΄ΠΈΡ‚ΡŒ project-3
Π“Ρ€ΡƒΠΏΠΏΡ‹ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚.

Π“Ρ€ΡƒΠΏΠΏΡ‹ c ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ

Как 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:
    $ echo $MSG
    B
    Job succeeded
  • echo with vars:
    $ echo $MSG
    B
    Job succeeded

НаслСдованиС с инклюдом [исходники]

Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π² project-2 Π·Π°ΠΈΠ½ΠΊΠ»ΡŽΠ΄ΠΈΡ‚ΡŒ project-3.
C условиСм Ρ‡Ρ‚ΠΎ: Π½ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹, Π½ΠΈ сам ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π“Ρ€ΡƒΠΏΠΏΡ‹ c ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ

Как 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:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • echo with 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 – ΠΎΠ±Ρ‰Π΅Π΅. И Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ происходит инклюд ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ