إذا كنت تستخدم GitHub Actions كأداة لبناء ونشر البرمجيات ويستخدم فريقك أيضًا تطبيق Slack، هل تعلم أنه يمكنك القيام بذلك دون الحاجة لمغادرة Slack؟ أنشئ بوت في Slack لاستدعاء سير العمل من GitHub Actions مباشرةً من Slack بشكل تلقائي!
في هذا البرنامج التعليمي، ستتعلم كيفية إعداد بوت دردشة جديد في Slack باستخدام أداة بناء البوت المسماة Hubot وتشغيل سير العمل في GitHub Actions تلقائيًا لنشر الشفرة على خادم.
لنبدأ!
المتطلبات المسبقة
هذا البرنامج التعليمي سيكون عرضًا توضيحيًا عمليًا. إذا كنت ترغب في متابعة الدرس، تأكد من أنك تمتلك ما يلي:
- A Slack Workspace
- A GitHub account and a GitHub personal token
- A Linux server to deploy code to – This tutorial will use Ubuntu 19.
- A local Linux machine – This tutorial will use Ubuntu so that all local commands will be Linux. If you’re running another operating system, the commands may be slightly different.
- بيانات تسجيل الدخول SSH للاتصال بالخادم الذي ستنشر عليه الشفرة.
- A code editor of your choice that understands YAML like Visual Studio Code.
إنشاء مشروع وسير عمل في GitHub Actions
قبل أن تتمكن من استدعاء سير عمل GitHub Actions بسرعة من Slack، يجب عليك أولاً إنشاء السير العمل.
لإنشاء السير العمل، دعنا ننشئ مجلد مشروع لاحتواء جميع الملفات التي ستعمل عليها.
1. افتح تطبيق الطرفية المفضل لديك.
2. الآن قم بتشغيل سلسلة الأوامر أدناه لإنشاء مجلد المشروع المسمى Hubot والانتقال إليه.
3. بعد ذلك، قم بتشغيل npm init
لإنشاء ملف package.json لـ Node.JS. تشغيل npm init
ينشئ مشروع Node.JS قياسي يتضمن ملف package.json الذي يحتوي على معلومات مختلفة حول المشروع وأي حزم NPM تعتمد عليها.
4. الآن، قم بإنشاء دليل workflows وملف عملية العمل deploy.yml. ملف عملية العمل هو سلسلة من الخطوات المحددة في تسلسل سير عمل GitHub Actions ستتبعه.
5. بعد ذلك، قم بتعريف كل واحد من أسرار GitHub سيقرأها سير عملك. سيشير السير الذي تقوم بإنشائه إلى هذه الأسرار. نظرًا لأنك ستحتاج إلى عنوان الخادم الخاص بك واسم المستخدم وكلمة المرور ومنفذ الخادم الخاص بك للاتصال عبر SSH ، دعنا ننشئ أسرار GitHub.
قم بزيارة عنوان الويب هذا https://github.com/yourusername/yourrepository/settings/secrets/actions حيث ستضيف أسرار GitHub الخاصة بك. قم بتبديل yourusername باسم مستخدم GitHub الخاص بك و yourrepository بمستودع GitHub الخاص بك.
انقر على زر إضافة سر جديد للمستودع ، كما هو موضح أدناه ، لملء معلومات حول السر الذي تضيفه.

6. الآن قم بملء حقول اسم وقيمة السر ، ثم انقر على إضافة سر لحفظه. سيتم توجيه الصفحة إلى صفحة أسرار GitHub حيث سترى جميع أسرارك. لإضافة المزيد من الأسرار ، انقر على زر السر الجديد في المستودع كما فعلت سابقًا.
تأكد من حفظ الأسرار للمتغيرات المعطاة بنفس الاسم الذي ستشير فيه إلى نفس المتغيرات ، وهي HOST و USERNAME و PASSWORD و PORT.


7. في النهاية ، افتح ملف سير العمل ~/Hubot/.github/workflows/deploy.yml في محرر الأكواد الخاص بك ، وانسخ/الصق الكود التالي. الكود أدناه هو سير العمل الذي سيتم تشغيله كلما قمت بتشغيل السير العمل عبر سلاك لاحقًا.
عندما تقوم بإستدعاء السير العمل ، ستحدث عدة إجراءات:
- ستقوم GitHub Actions بتحليل ملف سير العمل أدناه للاتصال بـ SSH إلى الهدف
host
المحدد في السر الخاص بـHOST
باستخدام الاسم وكلمة المرور المحددة كأسرار مستوردة للمشروع. - ثم سيقوم سير العمل بتنزيل محتويات مستودع GitHub لفرع محدد (
$branchName
) من خلال تشغيلgit pull origin$branchName
. تأكد من أن اسم الفرع يحتوي على الشيفرة التي ترغب في نشرها. - سوف تقوم باستخدام حزمة السير العمل من سوق جيتهاب تسمى ssh-remote-commands. تحتوي هذه الحزمة على طرف جيد للتغلب على الحاجة إلى توفير مضيف واسم مستخدم وكلمة مرور ومنفذ وأمر لتشغيله على الإنتاج.
تأكد من أن خادمك قد قام بتثبيت Git بشكل صحيح مع بيانات الاعتماد اللازمة لاسترجاع الشيفرة من مستودع GitHub
تنفيذ سير العمل يدويًا
لقد قمت الآن بإنشاء سير عمل GitHub Actions لاستدعاءه عبر Slack. ولكن في هذه النقطة ، يكون الكود على جهازك المحلي فقط. لتشغيل سير العمل ، ستحتاج إلى دفع الكود إلى GitHub.
تشغيل سلسلة الأوامر أدناه يخبر git أين يجب دفع الكود وسحبه منه ، في هذا المثال ، من مستودع GitHub البعيد الخاص بك. في الأمر git remote add origin
أدناه ، استبدل yourusername
و yourrepository
باسم مستخدم GitHub ومستودعك
دعنا نختبر أولاً ما إذا كان الكود الخاص بك يعمل. استدعي الكود يدويًا باستخدام أداة curl الشهيرة.
قم بتشغيل الأمر أدناه لإجراء طلب POST إلى عنوان URL المستودع الخاص بك على GitHub https://github.com/username/repository/dispatches لإعلام GitHub بتشغيل ملف سير العمل deploy.yml الذي قمت بإنشائه سابقًا. استبدل username باسم مستخدمك الفعلي على GitHub و repository بمستودع GitHub الخاص بك.
استبدل $github_personal_token
في الكود أدناه بالرمز الشخصي الخاص بك.
إنشاء Slack Bot مع Hubot
نظرًا لأنه كنت قادرًا على تشغيل سير العمل في GitHub يدويًا، فهذا بداية جيدة. الآن دعونا نحاول أتمتة نفس الخطوات اليدوية عبر Slack Bot. ستقوم بإنشاء Slack Bot، الذي يستمع إلى أوامرك ويشغل سير العمل في GitHub مع الوسيطات.
لديك خياران لإنشاء Slack Bot، إما من البداية أو من حزمة hubot المبنية مسبقًا لمساحات العمل في slack. في هذا البرنامج التعليمي، ستستخدم حزمة Bot المبنية مسبقًا تسمى Hubot. Hubot هي أداة تلقائية مفتوحة المصدر تتكامل مع خدمات الدردشة مثل Slack، Discord، Gitter، TeamSpeak، إلخ.
إنشاء روبوت مخصص دون استخدام تطبيق مثل Hubot يستغرق وقتًا طويلاً. لماذا؟ لأنك ستتعامل مع جميع عمليات الإعداد، الاستماع إلى الويب هوك، واستضافة الروبوت. لذا في هذا البرنامج التعليمي، ستستخدم تطبيق Hubot Slack لتبسيط جميع تلك العمليات.
تثبيت Hubot باستخدام Npm
نظرًا لأنك تستخدم Hubot لإنشاء روبوت Slack، دعنا نقوم أولاً بتنزيل وتثبيت Hubot على جهازك المحلي. Hubot سيكون الرابط الذي يربط بين Slack وأفعال GitHub.
1. في الطرفية الخاصة بك، انتقل (cd
) إلى دليل مشروعك (~/Hubot
).
2. قم بتثبيت حزمة yo
و generator-hubot
بشكل عام (-g
) على جهازك المحلي باستخدام أمر npm install
أدناه. تساعدك حزمة yo في تثبيت مشاريع جديدة من خلال إنشاء مشاريع بأي لغة (ويب، جافا، بيثون، سي شارب، إلخ). حزمة generator-hubot تستخدم حزمة yo لتثبيت جميع التبعيات مع إعدادات البداية.
بمجرد التثبيت، يمكنك تشغيل أمر yo
من أي مكان حيث تم تثبيته بشكل عام.
3. الآن، قم بإنشاء قالب أساسي لـ Hubot boilerplate باستخدام الأمر التالي. القالب هو جزء من الشفرة المضمن في العديد من الأماكن. بدون قالب، ستحتاج دائمًا إلى كتابة الشفرة من البداية.
الأمر أدناه ينشئ قالبًا أساسيًا لـ Hubot في دليل مشروعك. يربط القالب Hubot بـ Slack (--adapter=slack
) بحيث يمكن للروبوت الاستماع والرد على الرسائل داخل قناة الـ Slack. yo hubot --adapter=slack
إضافة Hubot إلى مساحة عمل Slack الخاصة بك
الآن بعد تثبيت Hubot على جهازك المحلي، تحتاج إلى تكوين Hubot للتواصل مع Slack.
لنقم بتثبيت Hubot في مساحة عمل Slack الخاصة بك.
1. قم بفتح متصفح الويب الخاص بك وانتقل إلى إعدادات مسؤول Slack الخاصة بك باستخدام عنوان URL، مثل https://workspacename.slack.com/admin/settings. استبدل workspacename بالاسم الفعلي لمساحة العمل الخاصة بـ Slack الخاصة بك.
انقر على تكوين التطبيقات oفي اللوحة اليسرى، كما هو موضح أدناه، بحيث يمكنك البحث عن Hubot في السوق. يحتوي Slack على سوق حيث يمكنك العثور على تطبيقات مبنية مسبقًا.

2. انقر على شريط البحث، ثم اكتب hubot للبحث عن Hubot في السوق وحدد Hubot.
الآن، انقر على زر إضافة إلى Slack كما تراه أدناه، لإضافة Hubot إلى مساحة عمل Slack الخاصة بك.

3. أخيرًا ، قم بملء بعض المعلومات العامة حول الروبوت الخاص بك ، مثل الاسم (deployerhubot) والرمز. احرص على الحفاظ على رمز الواجهة حيث ستستخدمه لاحقًا في مشروع Hubot Deployer لتفعيل الروبوت من مشروع Hubot الذي قمت بإنشائه سابقًا.

اختبار تكامل سير عمل GitHub Actions مع Slack
لقد قمت الآن بتثبيت Hubot على مساحة عمل Slack الخاصة بك ، لذا دعنا نقوم بفحص الروبوت عن طريق الاستماع وإرسال الرسائل إلى القناة. ولكن أولاً ، يجب عليك تنشيط الروبوت.
1. قم بتشغيل الأمر أدناه داخل دليل المشروع الرئيسي لتنشيط الروبوت لـ Slack (--adapter slack
) من مستودع Hubot الخاص بك (./bin/hubot
). تأكد من استبدال $token
برمز الواجهة البرمجية الذي قمت بالتوجيه إليه سابقًا
2. قم بتشغيل الأمر أدناه لدعوة (/invite
) الروبوت (botusername
) إلى قناتك على Slack. استبدل botusername
باسم الروبوت الذي قمت بتسجيله في الخطوة الثالثة من قسم “إضافة Hubot إلى مساحة عمل Slack الخاصة بك”.
الآن ، قم بذكر روبوت برسالة نصية في Slack ، مثل @deployerhubot ping, لاختبار ما إذا كان التكامل يعمل. إذا رد الروبوت PONG ، كما هو موضح أدناه ، فإنك جاهز.

إذا لم يرد الروبوت ، انتقل إلى مستودع GitHub الخاص بك في متصفح الويب الخاص بك ، وانقر فوق علامة الإجراءات. يمكنك معرفة أي سير عمل فشل لأنه يحتوي على شارة تحقق حمراء دائرية عليه. انقر على سير العمل الفاشل لمعرفة سبب الفشل وإصلاحه.

أدناه، يمكنك رؤية أن الفشل يكمن في تنفيذ أوامر SSH عن بُعد باستخدام كلمة مرور. بعد إصلاح سير العمل، عد إلى الخطوة 3 وانظر إذا كان الروبوت يستجيب بـ PONG.

بدء سير عمل إجراءات GitHub من Slack
الآن بعد تنشيط روبوت Slack الخاص بك، حان الوقت لبدء سير عمل إجراءات GitHub من Slack!
تحتاج إلى مرونة لنشر الفرع المعطى إلى خادم معين، مثل سحب الشفرات من الفرع المعطى. ستقوم بتعليم الروبوت للرد تلقائيًا عندما يكتب شخص ما ***@*bot deploy API feature-x to production على قناة Slack. يمكنك التحقق من اسم البيئة حيث يمكن للأشخاص لاحقًا نشر بيئات وفروع معينة فقط.
لتلقيم ردود الروبوت تلقائيًا:
1. أنشئ دليلاً بالاسم ~/Hubot/scripts. المجلد ~/Hubot/scripts هو المكان الذي ستحفظ فيه السكربت الذي يُشغّل سير عمل GitHub الخاص بك.
2. في محرر الشفرة الخاص بك، أنشئ ملفًا بالاسم bot.js داخل المجلد ~/Hubot/scripts. الآن انسخ الشفرة أدناه والصقها داخل ملف bot.js.
الشفرة أدناه تسمح للروبوت بالاستماع إلى رسائل المحادثة على قناة Slack، ثم تُشغّل سير العمل لإرسال استجابة إلى قناة Slack.
3. أخيرًا ، أرسل الرسالة @ botusername نشر واجهة برمجة التطبيقات إلى التجريبي في سلاك ، وسترى استجابة مماثلة ، كما هو موضح أدناه.
يمكن تنشيط ملفات سير العمل عند حدوث العديد من أحداث GitHub المختلفة، مثل دفع الكود إلى فرع معين، أو إنشاء علامات، أو إنشاء طلبات استحضار، أو طلب بعض عناوين URL، والكثير غيرها.

الختام
خلال هذا البرنامج التعليمي، تعلمت عن سير العمل في GitHub، بدءًا من تنشيط استجابات Slack يدويًا باستخدام الشيفرة إلى بناء روبوت دردشة. كما تعلمت أن وجود روبوت دردشة في Slack يتيح لك أتمتة المهام عن طريق استدعاء سير العمل لإجراءات GitHub.
هل تنوي تعزيز هذه المعرفة الجديدة بخطوة إضافية، ربما بإضافة روبوت تذكير أو إنشاء رسائل تفاعلية؟