Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

Gitlab-da o'zgaruvchilar bir necha joylarda o'rnatilishi mumkin:

  1. Guruh sozlamalarida
  2. Loyiha sozlamalarida
  3. .gitlab-ci.yml ichida

Bunday holda, guruh va loyiha sozlamalaridagi o'zgaruvchilar "fayl" yoki "muntazam o'zgaruvchi" sifatida o'rnatilishi mumkin va "himoyalangan" va "niqob" katakchalarini belgilang.

Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

Keling, oddiy merosdan boshlaylik va u asta-sekin murakkablashadi.

Ustuvorlik darajalarining yakuniy ro'yxatini hujjat oxirida topish mumkin.

Guruhlar bilan meros [manbalar]

Guruhlardagi o'zgaruvchilar meros qilib olinadi, qoidaga ko'ra, guruh loyihaga qanchalik yaqin joylashgan bo'lsa, uning qiymati shunchalik muhim bo'ladi.

O'zgaruvchilar bilan guruhlar

Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Quvur liniyasi natijasi

$ echo $MSG
B

Agar o'zgaruvchi B guruhida ko'rsatilmagan bo'lsa, biz A qiymatini ko'rgan bo'lardik.

.gitlab-ci.yml ichidagi o'zgaruvchilarni meros qilib olish [manbalar]

Bu erda hamma narsa juda oddiy: siz o'zgaruvchini global miqyosda o'rnatishingiz mumkin yoki uni ish ichida qayta yozishingiz mumkin.

O'zgaruvchilar bilan guruhlar

Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

.gitlab-ci.yml

Keling, 2 ta ish o'rni yarataylik, ulardan birida biz $MSG ni aniq ko'rsatamiz.

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

Quvur liniyasi natijasi

  • aks-sado:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • Vars bilan echo:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Guruhlar bilan va .gitlab-ci.yml ichida meros [manbalar]

Keling, oldingi 2 ta misolni birlashtirishga harakat qilaylik. Guruh o'zgaruvchilari .gitlab-ci.yml ichidagi o'zgaruvchilardan ustunlik qiladi.

O'zgaruvchilar bilan guruhlar

Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

.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

Quvur liniyasi natijasi

  • aks-sado:
    $ echo $MSG
    Y
    Job succeeded
  • Vars bilan echo:
    $ echo $MSG
    Y
    Job succeeded

Loyiha sozlamalarida o'zgaruvchilarni ko'rsatish bilan meros [manbalar]

Loyiha sozlamalaridagi o'zgaruvchilar DOIMA eng yuqori ustuvorlikka ega! Va .gitlab-ci.yml ichida ko'rsatilgan o'zgaruvchilar hech qanday rol o'ynamaydi.

O'zgaruvchilar bilan guruhlar

Guruh o'zgaruvchilari pastroq ustuvorlikka ega.
Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

.gitlab-ci.yml

Oldingi misoldagi fayldan foydalanamiz. Bu erda yana .gitlab-ci.yml ichida ko'rsatilgan o'zgaruvchilar bor, lekin guruhlar ichidagi o'zgaruvchilar hali ham ulardan ustun turadi.

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

Quvur liniyasi natijasi

  • aks-sado:
    $ echo $MSG
    project-3
    Job succeeded
  • Vars bilan echo:
    $ echo $MSG
    project-3
    Job succeeded

Bo'sh qiymatga ega bo'lgan meros [manbalar]

Bo'sh qiymat ham qiymatdir
Bo'sh qiymat Null emas

O'zgaruvchilar bilan guruhlar

Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

.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

Quvur liniyasi natijasi

  • aks-sado:
    $ echo $MSG
    Job succeeded
  • Vars bilan echo:
    $ echo $MSG
    Job succeeded

O'z ichiga va guruhlar bilan meros [manbalar]

Bu erda biz loyiha-2-ni loyiha-3ga kiritishga harakat qilamiz
Bu holatda guruhlar ustuvorlikka ega.

O'zgaruvchilar bilan guruhlar

Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

.gitlab-ci.yml

Va o'zgaruvchini global miqyosda .gitlab-ci.yml da o'rnating

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

Quvur liniyasi natijasi

  • aks-sado:
    $ echo $MSG
    B
    Job succeeded
  • Vars bilan echo:
    $ echo $MSG
    B
    Job succeeded

O'z ichiga olgan meros [manbalar]

Bu erda biz loyiha-2-ni loyiha-3ga kiritishga harakat qilamiz.
Shart bilan: na guruhlarda, na loyihaning o'zida hech qanday o'zgaruvchi bo'lmasligi.

O'zgaruvchilar bilan guruhlar

Gitlab-CI muhit o'zgaruvchilarini qanday meros qilib oladi?

.gitlab-ci.yml

Xuddi oldingi misoldagi kabi

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

Quvur liniyasi natijasi

  • aks-sado:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • Vars bilan echo:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Natijalar quyidagicha ustuvorliklar:

  1. Loyiha sozlamalaridagi o'zgaruvchilar
  2. Guruhlardagi o'zgaruvchilar
  3. Ishlar ichida qat'iy belgilangan o'zgaruvchilar (jumladan, kiritilgan fayllar)
  4. .gitlab-ci.yml ichidagi global o'zgaruvchilar
  5. Kiritilgan fayllar ichidagi global o'zgaruvchilar

xulosa

Eng aniq bo'lmagan nuqta shundaki, "o'zgaruvchi kodga qanchalik yaqin bo'lsa, u shunchalik muhim" qoidasi birinchi navbatda guruhlar uchun ishlaydi, keyin esa .gitlab-ci.yml ichidagi o'zgaruvchilar uchun xuddi shu qoida, lekin faqat shart ostida ishlaydi. guruhlardagi o'zgaruvchilar ko'rsatilmaganligi.
Keyinchalik, muhim nuqta - asosiy va kiritilgan .gitlab-ci.yml uchun global makon umumiy ekanligini tushunishdir. Va qo'shilish sodir bo'lgan fayl ustuvorlikka ega.

Manba: www.habr.com

a Izoh qo'shish