يمكن تعيين المتغيرات في Gitlab في عدة أماكن:
- في إعدادات المجموعة
- في إعدادات المشروع
- داخل .gitlab-ci.yml
في هذه الحالة، يمكن تعيين المتغيرات في إعدادات المجموعة والمشروع على أنها "ملف" أو "متغير عادي" وحدد مربعي الاختيار "محمي" و"قناع".
لنبدأ بالميراث البسيط وسيصبح الأمر أكثر تعقيدًا تدريجيًا.
يمكن العثور على القائمة النهائية لمستويات الأولوية في نهاية الوثيقة.
الميراث مع الجماعات [مصادر]
يتم توريث المتغيرات من المجموعات، مع وجود قاعدة مفادها أنه كلما كانت المجموعة أقرب إلى المشروع، زادت أهميتها.
المجموعات ذات المتغيرات
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
نتيجة خط الأنابيب
$ echo $MSG
B
إذا لم يتم تحديد المتغير في المجموعة ب، فسنرى القيمة أ.
وراثة المتغيرات داخل .gitlab-ci.yml [مصادر]
كل شيء بسيط للغاية هنا: يمكنك تعيين متغير عالمي، أو يمكنك الكتابة فوقه داخل الوظيفة.
المجموعات ذات المتغيرات
.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.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.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.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.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.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
النتائج كما يلي الأولويات:
- المتغيرات في إعدادات المشروع
- المتغيرات في المجموعات
- المتغيرات المحددة بدقة داخل الوظائف (بما في ذلك الملفات المضمنة)
- المتغيرات العامة داخل .gitlab-ci.yml
- المتغيرات العالمية داخل الملفات المضمنة
اختتام
النقطة الأكثر وضوحًا هي أن قاعدة "كلما كان المتغير أقرب إلى الكود، كلما كان أكثر أهمية" تعمل أولاً للمجموعات، ثم نفس القاعدة للمتغيرات داخل .gitlab-ci.yml، ولكن فقط تحت الشرط أن المتغيرات في المجموعات لم يتم تحديدها.
بعد ذلك، هناك نقطة مهمة وهي أن نفهم أن المساحة العالمية لـ .gitlab-ci.yml الرئيسية والمضمنة شائعة. والملف الذي يحدث فيه التضمين له الأولوية.
المصدر: www.habr.com