كيف يمكنني استخدام إجراءات GitHub لإنشاء مهام سير عمل ل CI؟
تذكر أن هدفك هو أتمتة عملية إنشاء التعليمات البرمجية ونشرها بحيث يتم تحديث الميزات في كل مرة يضيف فيها المطور تغييرا إلى قاعدة التعليمات البرمجية.
لتنفيذ هذه العملية، ستتعلم كيفية:
- إنشاء سير عمل من قالب.
- تجنب التكرار باستخدام مهام سير العمل القابلة لإعادة الاستخدام.
- اختبار مقابل أهداف متعددة.
- فصل مهام الإنشاء والاختبار.
إنشاء سير عمل من قالب
لإنشاء سير عمل، من الشائع البدء باستخدام قالب. يحتوي القالب على وظائف وخطوات شائعة تم تكوينها مسبقا لنوع معين من التنفيذ التلقائي الذي تقوم بتنفيذه. إذا لم تكن على دراية بمهام سير العمل والوظائف والخطوات، فتحقق من أتمتة مهام التطوير باستخدام وحدة GitHub Actions.
في الصفحة الرئيسية لمستودع GitHub، حدد Actions، ثم حدد New workflow.
في صفحة اختيار سير عمل ، يمكنك الاختيار من بين العديد من أنواع القوالب. أحد الأمثلة على ذلك هو قالب Node.js. يقوم قالبNode.js بتثبيت Node.js وجميع التبعيات، وإنشاء التعليمات البرمجية المصدر، وتشغيل الاختبارات لإصدارات مختلفة من Node.js. مثال آخر هو قالب حزمة Python ، الذي يقوم بتثبيت Python وتبعياته، ثم يقوم بتشغيل الاختبارات، بما في ذلك التحليل، في إصدارات متعددة من Python.
للبدء بقالب سير العمل Node.js، في مربع البحث، أدخل Node.js.
في نتائج البحث، في جزء Node.js ، حدد تكوين.
node.js.yml يتم إنشاء ملف لمشروعك من القالب:
name: Node.js CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
كما هو الحال في السمة on ، يتم تشغيل سير العمل هذا استجابة إما لدفع إلى المستودع أو عند إنشاء طلب سحب مقابل الفرع الرئيسي.
يقوم سير العمل هذا بتشغيل مهمة واحدة، المشار إليها بواسطة السمة job .
تحدد السمة runs-on أنه بالنسبة لنظام التشغيل، يتم تشغيل سير العمل على ubuntu-latest.
node-version تحدد السمة أن هناك ثلاثة بنيات، واحدة لكل من Node.js الإصدار 14.x و16.x و18.x.
matrix يتم وصف السمة بعمق لاحقا في الوحدة النمطية.
في السمة jobs ، تستخدم الخطوات إجراءات إجراءات GitHub / checkout@v3 للحصول على التعليمات البرمجية من المستودع الخاص بك إلى جهاز ظاهري (VM) وإجراءات / setup-node@v3 لإعداد الإصدار الصحيح من Node.js. يمكنك تحديد أنك تريد اختبار ثلاثة إصدارات من Node.js باستخدام السمة ${{ matrix.node-version }} . تشير هذه السمة إلى المصفوفة التي قمت بتعريفها مسبقا. تحدد السمة cache مدير حزمة للتخزين المؤقت في الدليل الافتراضي.
ينفذ الجزء الأخير من هذه الخطوة الأوامر التي Node.js تستخدمها المشاريع. يقوم npm ci الأمر بتثبيت التبعيات من package-lock.json الملف.
npm run build --if-present تشغيل برنامج نصي للبناء إذا كان موجودا.
npm test تشغيل إطار عمل الاختبار. يتضمن هذا القالب خطوات الإنشاء والاختبار في نفس الوظيفة.
لمعرفة المزيد حول npm، راجع وثائق npm:
يمكن لفريق من المطورين الاستفادة من استخدام مهام سير العمل القابلة لإعادة الاستخدام لتبسيط خطوات الأتمتة المتكررة وتوحيدها. باستخدام مهام سير العمل القابلة لإعادة الاستخدام، يمكنك تقليل التكرار، وتحسين قابلية الصيانة، وضمان الاتساق عبر مسارات التكامل/النشر المستمر (CI/CD).
تجنب التكرار باستخدام مهام سير العمل القابلة لإعادة الاستخدام
مع نمو نطاق الفرق والمشاريع، من الشائع أن ترى نفس الخطوات المتكررة عبر ملفات سير عمل متعددة. قد تتضمن هذه الخطوات سحب التعليمات البرمجية وتثبيت التبعية والاختبار والنشر. هذا النوع من التكرار لا يشوش قاعدة التعليمات البرمجية الخاصة بك فحسب، بل يزيد أيضا من وقت الصيانة عند الحاجة إلى تغييرات التعليمات البرمجية. تحل مهام سير العمل القابلة لإعادة الاستخدام هذه المشكلة من خلال السماح لك بتحديد منطق التشغيل التلقائي مرة واحدة، ثم استدعاء المنطق من مهام سير العمل الأخرى.
مهام سير العمل القابلة لإعادة الاستخدام هي مهام سير عمل GitHub Actions خاصة يمكن أن تستدعيها مهام سير العمل الأخرى، على غرار الوظائف في البرمجة. يمكنك إنشاؤها لمشاركة المنطق المتكرر مثل خطوات الإنشاء أو إجراءات الاختبار أو استراتيجيات النشر. بعد إنشاء سير عمل قابل لإعادة الاستخدام، يمكنك الرجوع إليه من أي سير عمل آخر في نفس المستودع أو حتى في مستودعات مختلفة.
لماذا تستخدم مهام سير العمل القابلة لإعادة الاستخدام؟
هذه هي فوائد استخدام مهام سير العمل القابلة لإعادة الاستخدام:
- الاتساق. يمكن للفرق اتباع نفس معايير الأتمتة عبر جميع المشاريع.
- كفاءة. بدلا من نسخ خطوات ولصقها، ما عليك سوى الإشارة إلى سير عمل قابل لإعادة الاستخدام.
- تحديثات أسهل. عند تغيير عملية، مثل إضافة خطوة اختبار، يمكنك تحديثها في موقع واحد. ثم تستفيد جميع مهام سير العمل التي تستخدم سير العمل تلقائيا.
- قابلية التوسع. تعد مهام سير العمل القابلة لإعادة الاستخدام مثالية لفرق النظام الأساسي أو DevOps التي تدير خدمات متعددة.
بعد ذلك، استكشف كيفية استخدام مهام سير العمل القابلة لإعادة الاستخدام لتحسين مشاريعك.
تنفيذ مهام سير العمل القابلة لإعادة الاستخدام
لاستخدام مهام سير العمل القابلة لإعادة الاستخدام:
- في مجلد المستودع الخاص بك، قم بإنشاء سير عمل قابل لإعادة الاستخدام. يتضمن الملف خطوات التنفيذ التلقائي التي تريد مشاركتها، مثل الخطوات الشائعة المتضمنة في الاختبار والبناء والنشر.
- تمكين سير العمل بشكل صريح ليكون قابلا لإعادة الاستخدام عن طريق تكوينه مع
workflow_callالحدث. - في مهام سير العمل الرئيسية (مهام سير عمل المتصل)، قم بالرجوع إلى هذا الملف القابل لإعادة الاستخدام وتوفير أي مدخلات أو أسرار مطلوبة.
لتوضيح مزايا مهام سير العمل القابلة لإعادة الاستخدام، ضع في اعتبارك السيناريو التالي في العالم الحقيقي.
مثال
تخيل أن مؤسستك لديها 10 خدمات مصغرة. تحتاج جميع الخدمات المصغرة العشرة إلى نفس الخطوات من أجل:
- تشغيل الاختبارات
- التعليمات البرمجية ل Lint
- التوزيع إلى بيئة معينة
بدون مهام سير عمل قابلة لإعادة الاستخدام، ينتهي كل مستودع بتكراد نفس المنطق عبر ملفات سير عمل متعددة، ما يؤدي إلى خطوات متكررة وصيانة أكثر صعوبة.
إذا كنت تستخدم مهام سير عمل قابلة لإعادة الاستخدام:
- يمكنك تعريف العملية مرة واحدة في ملف مركزي (على سبيل المثال، في
ci-standard.yml). - يمكنك استدعاء هذا الملف من سير عمل كل خدمة مصغرة، تمرير في متغيرات مثل البيئة أو اسم التطبيق.
إذا تمت إضافة خطوة أو أداة أمان جديدة، مثل الفحص بحثا عن الثغرات الأمنية، يمكنك إضافتها مرة واحدة فقط في سير العمل القابل لإعادة الاستخدام. تبدأ جميع الخدمات المصغرة العشرة على الفور في استخدام العملية المحدثة. لا يتعين عليك تعديل 10 خدمات مصغرة.
من خلال فهم كيفية عمل مهام سير العمل القابلة لإعادة الاستخدام وفوائدها، يمكنك اعتماد أفضل الممارسات لزيادة فعاليتها وضمان التكامل السلس مع مسارات CI/CD.
أفضل الممارسات
- مركزية مهام سير العمل القابلة لإعادة الاستخدام في مستودع واحد إذا كنت تخطط لمشاركتها عبر الفرق.
- استخدم الفروع أو العلامات لإصدار مهام سير العمل الخاصة بك (على سبيل المثال، استخدم
@v1)، حتى تتمكن بسهولة من التراجع عن التغييرات إذا لزم الأمر. - مدخلات المستند والأسرار بوضوح. غالبا ما تعتمد مهام سير العمل القابلة لإعادة الاستخدام على المدخلات والأسرار. تحتاج الفرق إلى معرفة المعلومات التي يجب استخدامها.
- إذا كنت بحاجة إلى إعادة استخدام بضع خطوات فقط، فجمع بين مهام سير العمل القابلة لإعادة الاستخدام والإجراءات المركبة بدلا من إنشاء سير عمل كامل.
تعد مهام سير العمل القابلة لإعادة الاستخدام طريقة قوية لفرض التناسق وتقليل الازدواجية وتوسيع نطاق ممارسات DevOps في أي فريق هندسي. سواء كنت تدير مستودعا واحدا أو خدمات مصغرة أو مكتبات مفتوحة المصدر، يمكن أن تعمل مهام سير العمل القابلة لإعادة الاستخدام على تبسيط الأتمتة، بحيث يكون CI/CD أسرع وأنظف وأسهل بالنسبة لك للإدارة.
تخصيص قوالب سير العمل
في بداية هذه الوحدة النمطية، فكرت في سيناريو تحتاج فيه إلى إعداد CI لفريق المطورين. يعد قالب Node.js بداية رائعة، ولكنك تريد تخصيصه ليناسب متطلبات فريقك بشكل أفضل. تريد استهداف إصدارات مختلفة من Node.js وأنظمة تشغيل مختلفة. تريد أيضا أن تكون خطوات الإنشاء والاختبار وظائف منفصلة.
فيما يلي مثال على سير عمل مخصص:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16.x, 18.x]
في هذا المثال، يمكنك تكوين مصفوفة بناء للاختبار عبر أنظمة تشغيل متعددة وإصدارات اللغة. تنتج هذه المصفوفة أربعة بنيات، واحدة لكل نظام تشغيل مقترن بكل إصدار من Node.js.
تنتج أربعة بنيات واختباراتها كمية كبيرة من بيانات السجل. قد يكون من الصعب فرز كل شيء. في العينة التالية، يمكنك نقل خطوة الاختبار إلى مهمة اختبار مخصصة. تختبر هذه الوظيفة مقابل أهداف متعددة. يؤدي فصل خطوات الإنشاء والاختبار إلى تسهيل العمل مع بيانات السجل.
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: npm install, and test
run: |
npm install
npm test
env:
CI: true