كيف يرث 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

لنقم الآن بإنشاء وظيفتين، في إحداهما سنشير بوضوح إلى $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 [مصادر]

دعونا نحاول الجمع بين المثالين السابقين. متغيرات المجموعة لها الأسبقية على المتغيرات الموجودة داخل .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

الميراث بقيمة فارغة [مصادر]

القيمة الفارغة هي أيضًا قيمة
القيمة الفارغة ليست فارغة

المجموعات ذات المتغيرات

كيف يرث 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

إضافة تعليق