اتوماسیون اعلان درخواست را بکشید – جامعه Dev

TL ؛
به تازگی نسخه جدیدی از ربات اعلان درخواست GitHub Pull Pull خود را منتشر کرده ام و آن را برای تیم فناوری داخلی در شرکت فعال کرده ام. این پروژه پیام های SLACK را بر اساس رویدادهای درخواست GitHub Pull Pull مدیریت می کند. طی دو هفته گذشته ، این کار برای تیم ما کاملاً کار کرده و مدتی را برای ما صرفه جویی کرده است.
در این مقاله جزئیات مربوط به پروژه و نحوه عملکرد آن را به اشتراک می گذارم.
مثل آن؟ بیایید به جزئیات شیرجه بزنیم.
انگیزه
به صورت دستی یا کارها را انجام دهید؟ جواب همیشه است “خودکار!”، حتی اگر این یک کار کوچک باشد.
در تیم من ، ما بر توسعه چابک و نسخه های مکرر تأکید می کنیم. بررسی کد بخش مهمی از گردش کار ما است و ما به طور فعال از Slack برای ارتباطات استفاده می کنیم. در نتیجه ، این یک روال روزانه برای نویسنده درخواست PULL (PR) تبدیل شده است تا به صورت دستی به تیم در یک کانال Slack اطلاع دهد و پیام را به روز نگه دارد تا دیگران به راحتی ببینند که آیا PR نیاز به بررسی دارد یا قبلاً ادغام شده یا بسته شده است.
بنابراین ، من مدتی را در آخر هفته گذراندم تا یک برنامه ساده برای خودکار سازی آن ایجاد کنم.
شاید تعجب کنید که چرا ما فقط از ادغام Slack Github استفاده نمی کنیم. دلیل آن ساده است: با ارسال پیام های جداگانه برای هر رویداد ، سر و صدای بیش از حد ایجاد می کند. هیچ راهی برای به روزرسانی پیام ها ، قالب بندی آنها به درستی یا برچسب زدن کاربران وجود ندارد و باعث می شود تا نیازهای ما کمتر مؤثر باشد.
مفهوم و عملکرد اساسی
به طور کلی ، برنامه یک سرور وب ساده است که به GitHub Webhooks پیام می دهد تا پیام هایی را به Slack ارسال کند و تا حد امکان نویز کمی ایجاد می کند. در عین حال ، باید انعطاف پذیر و قابل تنظیم باشد تا هر تیم بتواند برنامه را مطابق نیاز خود تنظیم کند.
عملکرد:
- ارسال پیام به کانال Slack هنگام ایجاد روابط عمومی جدید.
- پیام به روزرسانی در کانال Slack هنگام ادغام یا بسته شدن PR.
- حذف پیام در کانال Slack هنگامی که PR از آماده برای بررسی برای پیش نویس منتقل می شود.
- پیام ارسال به کانال Slack هنگامی که PR از پیش نویس به آماده برای بررسی منتقل می شود.
- کاربران یا گروه ها را برچسب بزنید در پیام SLACK
- چندین کانال شلختهبشر
- چندین مخازن GitHubبشر
- (اختیاری) واکنش به پیام های موجود در کانال Slack هنگام ادغام یا بسته شدن PR.
جزئیات درخواست
همانطور که در طرح بالا مشاهده می کنید ، برنامه نیاز به داشتن یک پایگاه داده SQLITE دارد. ممکن است بپرسید “چرا به پایگاه داده نیاز دارید؟”بشر جواب این است “برای نگه داشتن شناسه پیام Slack برای به روزرسانی های آینده”بشر یکی دیگر از دلایل داشتن یک بانک اطلاعاتی ، ذخیره پیکربندی برای هر کانال مخزن و Slack است.
پیکربندی
به مورد پیکربندی نگاهی بیندازید
+------------------+---------------+--------------------------------------+
| Repository | Slack Channel | Mentions |
+------------------+---------------+--------------------------------------+
| owner/repository | C12312312111 | <@U08ENEE1ZPW>, |
+------------------+---------------+--------------------------------------+
همانطور که می بینید می توانید تنظیم کنید کانال وت ذکر کردن برای هر مخزنبشر این زمانی که چندین تیم ، کانال و مخازن داشته باشید کاملاً مفید است.
برای مدیریت پیکربندی سه دستور CLI ایجاد شد:
-
gsm:write
– برای ایجاد یا به روزرسانی پیکربندی در پایگاه داده. اولین استدلال (owner/repository
) به عنوان شناسه استفاده می شود. مثال:php bin/console gsm:write owner/repository SLACK_CHANNEL_ID '<@USERID>,'
-
gsm:list
– برای لیست پیکربندی از پایگاه داده. مثال:php bin/console gsm:list
-
gsm:remove
– برای حذف پیکربندی از پایگاه داده. مثال:php bin/console gsm:remove owner/repository
توجه:
gsm
مخفف در این فرمان مخفف نقشه برداری Slack Github است.
علاوه بر این ، از طریق متغیرهای محیط ، می توانید واکنش ها را فعال یا غیرفعال کرده و ایموجی ها را برای واکنش ها تنظیم کنید. لطفاً برای اطلاعات بیشتر به اسناد پیکربندی مراجعه کنید.
صفحه وب GitHub
برای دریافت رویدادهای GitHub ، باید در تنظیمات مخزن GitHub ، Webhook را تنظیم کنید. من روند ثبت نام GitHub Webhook را در مقاله ثبت نام GitHub Webhook شرح دادم. لطفاً توجه داشته باشید که نیازی به ارسال همه رویدادها نیست ، رویدادهای “درخواست” کافی است. برنامه همه رویدادهای غیر ضروری را فیلتر می کند.
ادغام شل
برای ارسال پیام به کانال Slack ، باید یک ربات Slack ایجاد کنید و نشانه را بدست آورید. نشانه باید به عنوان یک متغیر محیط تنظیم شود. می توانید دستورالعمل های دقیق را در اینجا پیدا کنید.
موارد استفاده
استفاده از مورد 1: روابط عمومی جدید ایجاد می شود.
- برنامه پیامی را به کانال Slack ارسال می کند.
- برنامه شناسه پیام را در پایگاه داده ذخیره می کند و آن را به مخزن و PR مربوط می کند.
استفاده از مورد 2: پیش نویس جدید PR ایجاد شده است.
- هیچ اقدامی صورت نمی گیرد
استفاده از مورد 3: PR از “پیش نویس” به “آماده برای بررسی” منتقل می شود.
- برنامه پیامی را به کانال Slack ارسال می کند.
- برنامه شناسه پیام را در پایگاه داده ذخیره می کند و آن را به مخزن و PR مربوط می کند.
استفاده از مورد 4: PR از “آماده برای بررسی” به “پیش نویس” حالت منتقل می شود.
- برنامه پیام را در کانال Slack حذف می کند.
- برنامه شناسه پیام را از پایگاه داده حذف می کند.
استفاده از مورد 5: PR ادغام شده است.
- برنامه پیام را در کانال Slack با “به روز می کند”[Merged]”پیشوند پیام.
- (اختیاری) برنامه واکنشی به پیام اضافه می کند.
استفاده از مورد 6: PR بسته است.
- برنامه پیام را در کانال Slack با “به روز می کند”[Closed]”پیشوند پیام.
- (اختیاری) برنامه واکنشی به پیام اضافه می کند.
چگونه در تیم ما استفاده می شود؟
در تیم من یک تیم داریم که از توسعه دهندگان جبهه و پس زمینه تشکیل شده است. توسعه دهندگان Frontend با استفاده از یک مخزن جداگانه روی برنامه React کار می کنند و توسعه دهندگان پس زمینه با استفاده از مخزن دیگر روی برنامه API کار می کنند. به دلیل محدود کردن تعداد کانال ها ، تصمیم گرفتیم از یک کانال برای هر دو مخزن استفاده کنیم و اعضای تیم را که مخزن را حفظ می کنند ، برچسب گذاری کنیم.
بعد از تنظیم برنامه BOT ، من با استفاده از موارد پیکربندی در پایگاه داده ایجاد کردم gsm:write
فرمان همچنین ، من یک وب سایت را در هر دو مخزن ثبت کردم و ربات را به کانال دعوت کردم.
در نتیجه هنگامی که مخزن برنامه Frontend PR برچسب های پیام را باز کرده است @fronend
توسعه دهندگان و اگر روابط عمومی در مخزن برنامه API ایجاد شود @backend
توسعه دهندگان برچسب خورده اند.
و این نتیجه کلی از آنچه اکنون داریم:
پایان
برنامه بسیار ساده است. این برنامه های روزمره را خودکار می کرد و ارتباط تیمی را مؤثرتر می کرد.
اگر این پروژه را مفید دیدید ، لطفاً آن را در Github به آن ستاره دهید و آن را با دوستان خود به اشتراک بگذارید.
لطفاً توجه داشته باشید که هنوز در دست توسعه است ، و من برای هرگونه پیشنهاد یا مشارکت باز هستم.
مقاله های بیشتری را در وبلاگ من بررسی کنید.