وحدة 2 / 11

تصميم خطوط أنابيب CI/CD باستخدام الذكاء الاصطناعي: إجراءات GitHub وGitLab CI

المكاسب:

  • القدرة على فهم مفهوم CI/CD، وتشريح خطوط الأنابيب (الزناد، والوظيفة، والخطوة، والعداء، والقطعة الأثرية) والاختلافات بين إجراءات GitHub وGitLab CI وجعل الذكاء الاصطناعي ينتج خطوط أنابيب في السياق الصحيح
  • القدرة على فحص وتأمين المراجع السرية والأذونات ووجود المكونات المطلوبة في المسار الذي ينتجه الذكاء الاصطناعي
  • القدرة على تطبيق مبادئ عدم كتابة الأسرار بنص عادي، ومنح الحد الأدنى من التفويض، والحفاظ على التحكم في النشر من خلال فصله عن CI

قلب البرمجيات الحديثة هو خط الأنابيب الآلي الذي من خلاله يترك الكود حاسوب المطور حتى يصل بأمان إلى العميل. يسمى هذا الأنبوب CI/CD. CI (التكامل المستمر) هو التجميع والاختبار التلقائي لكل تغيير في التعليمات البرمجية؛ والغرض منه هو اكتشاف الخلل قبل أن يترك المطور لوحة المفاتيح. القرص المضغوط (التسليم/النشر المستمر) هو الإعداد التلقائي أو حتى إصدار التعليمات البرمجية التي تم اختبارها. خط أنابيب CI/CD هو ملف تكوين يحدد هذه الخطوات بالترتيب - عادةً ما يتم كتابته بتنسيق YAML (تنسيق نص تكوين يمكن قراءته بواسطة الإنسان).

إن كتابة ملفات YAML هذه يدويًا أمر ممل ومطول وعرضة للخطأ؛ إذا انزلقت المسافة البادئة بمقدار مسافة واحدة، ينقطع خط الأنابيب بأكمله. وهنا يأتي دور الذكاء الاصطناعي: مع السياق الصحيح، فإنه ينتج مسودة عمل في ثوانٍ. لكن مهمتك هي فهم ما تفعله كل خطوة تم إنشاؤها والتحقق منها - لأن هذا هو الأنبوب الذي يحمل التعليمات البرمجية الخاصة بك إلى المنتج.

تشريح خط أنابيب CI/CD

يتكون كل خط أنابيب من عدة مفاهيم أساسية. لا يمكنك التحكم في مخرجات الذكاء الاصطناعي دون معرفة ما يلي:

  • الزناد: ما الذي يبدأ خط الأنابيب؟ عادةً ما يتم الدفع إلى فرع أو طلب سحب (طلب دمج) أو جدول زمني.
  • الوظيفة: وحدة منطقية تقوم بتنفيذ سلسلة من الخطوات؛ على سبيل المثال، "اختبار"، "إنشاء"، "نشر".
  • الخطوة: أمر أو إجراء واحد داخل الوظيفة.
  • Runner: الجهاز الظاهري أو الحاوية التي يتم تشغيل المهام عليها.
  • قطعة أثرية: المخرجات التي تنتجها مهمة واحدة وتستخدمها المهام اللاحقة (على سبيل المثال، ملف مترجم).
  • السر: المعلومات السرية التي يستخدمها Pipeline ولكن لا ينبغي أن تظل في نص عادي في المستودع.

تحتفظ GitHub Actions بهذا التعريف في ملفات ‎.github/workflows/*.yml؛ الوحدة هي سير العمل → الوظيفة → التسلسل الهرمي للخطوات. من ناحية أخرى، يستخدم GitLab CI هيكل الوظيفة Stage → في الملف .gitlab-ci.yml. يعرف الذكاء الاصطناعي كلا الصيغتين، ولكن يجب عليك أن تقول صراحة أي منهما تريد.

نصيحة: عند مطالبة الذكاء الاصطناعي بخطوط الأنابيب، حدد دائمًا: النظام الأساسي (GitHub Actions أو GitLab CI)، واللغة/الإطار (Node، .NET، Python...)، المشغل، وما إذا كان سيتم نشره. هذه الأجزاء الأربعة من المعلومات تضاعف فائدة المخرجات.

خطوة بخطوة: تصميم خط أنابيب باستخدام الذكاء الاصطناعي

  1. توضيح الهدف. مثل "تشغيل الاختبارات عند الدفع إلى الصفحة الرئيسية، وإنشاء الصورة، ولكن النشر فقط عند طرح العلامة".
  2. هل أنتج الهيكل العظمي. اسأل الذكاء الاصطناعي عن سير العمل الأساسي.
  3. اقرأ وافهم الخطوات. تحقق مما يفعله كل سطر تشغيل واستخدامات.
  4. التحقق من المراجع السرية. هل يتم استدعاء الأسرار باستخدام ${{ Secrets.NAME }} أم أنها مضمنة في الكود؟
  5. جربه محليًا/CI. قم بتشغيله على مستودع اختبار صغير، وراجع سلوك اللون الأحمر والأخضر (فشل النجاح).
  6. التوسع تدريجيا. أولاً، ما عليك سوى إضافة CI (اختبار)، ثم البناء، وأخيرًا إضافة النشر.

الأمان: السر والإذن في خط الأنابيب

يعد CI/CD أحد الأماكن التي تتسرب فيها الأسرار أكثر من غيرها. ثلاث قواعد ذهبية:

  1. لا تكتب الأسرار أبدًا بنص عادي في YAML. استخدم المستودع السري الخاص بالمنصة (GitHub Secrets، GitLab CI/CD Variables) وقم بتسميته بـ ${{ Secrets.X }}.
  2. أقل الامتيازات. لن يتمتع الرمز المميز الذي تعطيه لـ Pipeline إلا بالقدر اللازم من السلطة. قم بتضييق نطاق هذا باستخدام الأذونات: الحظر في إجراءات GitHub.
  3. لا تضغط على السر في السجل. تكشف خطوط مثل echo $TOKEN السر الموجود في السجل. تخفي المنصات، لكن كن حذرًا أيضًا.
تحذير: من أجل الراحة، يضع الذكاء الاصطناعي أحيانًا قيمًا مضمنة مثل كلمة المرور: 123456 أو أذونات واسعة جدًا: كتابة الكل في مسارات العينة. قم دائمًا بإصلاح هذا: تغيير السر إلى مرجع، طي الإذن.

مخطط المقارنة

مفهوم

إجراءات جيثب

جيتلاب سي

ملف التكوين

.github/workflows/*.yml

.gitlab-ci.yml

وحدة البناء

سير العمل → الوظيفة → الخطوة

المرحلة → الوظيفة

الزناد

عشرة:

القواعد: / فقط:

استدعاء سر

${{ أسرار.NAME }}

$NAME (متغيرات CI/CD)

مكون جاهز

الاستخدامات: action@v4

تشمل: / القالب

عداء

يعمل على:

العلامات:

ثلاث حالات صغيرة

الحالة 1 - تم تقليصها إلى 6 ساعات و40 دقيقة. أراد أحد الفريق أتمتة عملية الاختبار والبناء والنشر اليدوية، ولكن لم يكن أحد على دراية بـ YAML. وصفوا YZ بأنه "مشروع Node.js، وإجراءات GitHub، واختبار npm، وبناء npm في الدفع إلى الرئيسي، ونشر فقط في علامة v*". أنتج الذكاء الاصطناعي هيكلاً عاملاً مكونًا من 40 سطرًا؛ تحقق الفريق من كل خطوة وبدأ البث المباشر خلال 40 دقيقة. ولو أنهم كتبوه بخط اليد لكان عملاً ليوم واحد.

الحالة 2 - اكتشفت المصادقة ثغرة أمنية. طلب أحد المهندسين من الذكاء الاصطناعي نشر سير العمل. يتضمن الإخراج أذونات: كتابة الكل - مما يعني أن الرمز المميز يمكنه الكتابة إلى المستودع والحزم وكل شيء. لاحظ المهندس ذلك وقام بتضييق نطاقه بالأذونات: {المحتويات: القراءة، الحزم: الكتابة}. أدى هذا إلى القضاء على خطر التبعية المختطفة التي تحل محل المستودع بأكمله.

الحالة 3 - عمل الهلوسة. قام أحد الفرق بتشغيل الاستخدامات المقترحة للذكاء الاصطناعي: خط action/deploy-to-aws@v3؛ لم يكن هناك مثل هذا الإجراء الرسمي، فقد اختلقت منظمة العفو الدولية الاسم. انفجر خط الأنابيب مع "لم يتم العثور على الإجراء". الدرس المستفاد: التحقق في Marketplace من أن كل مكون يتم استدعاؤه بـ "uses:" موجود بالفعل.

أربعة قوالب قابلة للنسخ

1) سير عمل CI الأساسي:

اكتب سير عمل CI لإجراءات GitHub. المشروع: [اللغة/الإطار].المشغل: طلب الدفع والسحب إلى الفرع الرئيسي. الخطوات: تثبيت التبعيات، تشغيل الاختبارات، تشغيل لينت. لا يوجد Deploy.Runner ubuntu-latest. لا يوجد سر مطلوب. علق على YAML.

2) سير عمل القرص المضغوط المنشور (آمن):

اكتب سير عمل النشر لـ [PLATFORM]. يجب أن يعمل فقط على العلامة "v*". الهدف: [الوسائط/السحابة]. القواعد: - لا تكتب الأسرار أبدًا بنص عادي، بل اتصل بها بـ ${{ Secrets.

3) وصف خط الأنابيب الحالي:

قم بوصف خط الأنابيب [PLATFORM] التالي سطرًا تلو الآخر: ماذا تفعل كل وظيفة، وبأي ترتيب يتم تشغيلها، وما السر الذي تستخدمه، وما هي النقطتان الأكثر خطورة؟ أخيرًا، اقترح 3 تحسينات. خط الأنابيب: [محتوى YAML]

4) تسريع خط الأنابيب:

يعمل خط أنابيب CI التالي ببطء (المدة: [X دقيقة]). فحص استخدام ذاكرة التخزين المؤقت والمهام المتوازية والخطوات غير الضرورية. قدم 5 اقتراحات ملموسة وقابلة للتنفيذ للتسريع واكتب التأثير المقدر لكل منها. خط الأنابيب: [YAML]

موجه ضعيف / موجه قوي

ضعيف: "اكتب سير عمل إجراءات GitHub."

النتيجة: ليس من الواضح ما هي اللغة التي تؤدي إلى النشر وما إذا كان هناك نشر؛ يوفر الذكاء الاصطناعي مثيلًا عامًا للعقدة، وربما لن يناسب مشروعك، ويمكنه تشفير السر.

Strong: "اكتب سير عمل GitHub Actions. مشروع Python 3.12، قم بتشغيل pytest + ruff في طلب السحب والدفع الرئيسي؛ لا يوجد نشر؛ قم بتسريع التبعيات باستخدام ذاكرة التخزين المؤقت للنقطة؛ لا توجد أسرار مطلوبة. قم بتصدير YAML مع التعليقات."

الفرق: يعطي الموجه الثاني اللغة والمشغل والنطاق (بدون نشر) وتوقعات الأداء وقيد الأمان. الإخراج يعمل مباشرة.

الأخطاء الشائعة

  • تضمين السر في YAML. كلمة المرور/الرمز المميز للنص العادي هي ثغرة CI الأكثر شيوعًا.
  • تصريح واسع للغاية. قم بإعطاء الحد الأدنى من الإذن المطلوب بدلاً من كتابة الكل.
  • الاعتماد على إجراء/قالب غير موجود. تحقق من استخدامات الذكاء الاصطناعي: الخطوط الموجودة في Marketplace.
  • نشر مربك مع CI. يمكن تشغيل الاختبار في كل دفعة، ولكن يجب التحكم في النشر والموافقة عليه.
  • عدم استخدام ذاكرة التخزين المؤقت. يؤدي تثبيت التبعيات من البداية في كل عملية تشغيل إلى إبطاء التدفق بدقائق.
  • تجربة سير العمل الأول مباشرة في المستودع الرئيسي. قم بتشغيله على مستودع اختبار أولاً.

باختصار

خطوط أنابيب CI/CD هي أنابيب آلية تنقل التعليمات البرمجية بأمان إلى المنتج ويتم تعريفها باستخدام YAML. يقوم الذكاء الاصطناعي بسرعة بإنتاج مخططات عمل لـ GitHub Actions وGitLab CI - ولكن عليك أن تكون واضحًا بشأن النظام الأساسي واللغة والمشغل ونطاق النشر. هناك ثلاث قواعد في الأمان: استدعاء الأسرار حسب المرجع، ومنح الحد الأدنى من الامتيازات، وعدم طباعة الأسرار في السجل. تقع على عاتقك مسؤولية التحقق من أن كل استخدام:/include: مكون موجود بالفعل وما تفعله كل خطوة.

مهمة التطبيق

اختر نموذجًا بسيطًا للمشروع (حتى عبارة "hello World" بلغتك ستفي بالغرض). اطلب من الذكاء الاصطناعي إنتاج سير عمل باستخدام قالب "سير عمل CI الأساسي" أعلاه. ثم: (1) اكتب بكلماتك الخاصة ما تفعله كل خطوة؛ (2) التحقق من عدم تضمين أي أسرار وأن الأذونات ضيقة؛ (3) إذا أمكن، قم بتشغيله في خزان اختبار ولاحظ السلوك الأحمر والأخضر.

قائمة مرجعية

  • [ ] لقد أضفت النظام الأساسي واللغة/إطار العمل والتشغيل والنطاق إلى الموجه الخاص بي.
  • [ ] أفهم ما تفعله كل مهمة وخطوة في YAML الذي تم إنشاؤه.
  • [ ] لا يوجد سر نص عادي؛ جميع متغيرات ${{ Secrets.X }} / CI.
  • [ ] قمت بتضييق نطاق الأذونات إلى الحد الأدنى من السلطة.
  • [ ] لقد تحققت من أن جميع الإجراءات/القوالب المطلوبة موجودة بالفعل.
  • [ ] لقد قمت بالتحكم في خطوة النشر من خلال الموافقة/الحماية.