هذا الروبوت الركود يحسن سير عمل فرق التنمية. خاصة مع التركيز على Jenkins و Github و Gitlab و Jira ، حيث أن التكامل يعمل خارج الصندوق. ولكن أيضًا يمكن تنفيذ الأوامر المخصصة ، وحدات الماكرو ، والأوامر المحددة للمشروع الأخرى بطريقة بسيطة ومرنة.
_metadata :
major_version : 1
minor_version : 1
display_information :
name : slack_bot
background_color : " #382e38 "
features :
app_home :
messages_tab_enabled : true
messages_tab_read_only_enabled : false
bot_user :
display_name : bot
always_online : true
oauth_config :
scopes :
bot :
- app_mentions:read
- channels:read
- channels:history
- groups:history
- chat:write
- im:history
- im:write
- mpim:history
- reactions:read
- reactions:write
- users:read
- files:read
- pins:write
settings :
event_subscriptions :
bot_events :
- app_mention
- message.im
interactivity :
is_enabled : true
org_deploy_enabled : false
socket_mode_enabled : true
token_rotation_enabled : false قم أولاً بإعداد config.yaml ، فقط ألق نظرة على config-example.yaml
go run github.com/innogames/slack-bot/v2/cmd/botdocker-compose upgo run cmd/bot/main.go أو make run تشغيل تطبيق GO كمستخدم Slack ، عليك فقط إرسال رسالة خاصة إلى مستخدم/تطبيق BOT الذي يحتوي على الأمر المراد تنفيذه. بالإضافة إلى ذلك ، يمكنك إضافة الروبوت إلى أي قناة وتنفيذ أوامر BOT فيه عن طريق بادئة أمرك مع @slack-bot start job DailyDeployment ، على سبيل المثال
ملاحظة: عليك دعوة الروبوت إلى القناة لتتمكن من التعامل مع الأوامر.
يطبع أمر help فقط قائمة بجميع الأوامر المتاحة لهذا الروبوت. مع help *command* ستحصل على وصف قصير وبعض الأمثلة لأمر واحد.

الروبوت قادر على بدء ومراقبة Jenkins Job بطريقة بسيطة ولكنها قوية.
بشكل افتراضي ، لا تتوفر الأوامر وغير مرئية في "المساعدة" ، حتى يتم تعريف "Jenkins.host" في ملف التكوين.
تبدأ أمر start job وظيفة Jenkins ويظهر التقدم الحالي. الانتباه: الوظائف ذات القائمة البيضاء فقط في التكوين قابلة للبدء!
في الإضافات ، يمكن أن يكون لكل وظيفة trigger قابل للتكوين مما يجعل من الممكن إنشاء أوامر مخصصة لبدء الوظائف. (إنه regexp الذي يأخذ أسماء المعلمات في الاعتبار). على سبيل المثال ، يمكن أن يكون "بدء النشر اليومي" هو المشغل لوظيفة Jenkins واحدة. إرسال هذا النص إلى الروبوت سيبدأ المهمة.
بعد بدء وظيفة ، سيعرض الروبوت وقت البناء المقدر وبعض أزرار الحركة. هناك يمكنك فتح السجلات أو إحباط البناء مباشرة.
الروبوت قادر أيضًا على تحليل المعلمات وأسماء فروع البحث باستخدام بحث غامض.
أمثلة:
trigger job DeployBetastart job BackendTests TEST-123 (ابحث عن اسم فرع كامل ، يحتوي على الاختبار 123. EG الميزة/الاختبار -123-ميزة-456) 

يتمتع الروبوت أيضًا بإمكانية إنشاء إشعارات لمرة واحدة لبناء Jenkins. قد يكون هذا مفيدًا للوظائف طويلة الأمد حيث تنتظر Devs النتيجة.
مثال:
inform me about build NightlyTests (يشاهد أحدث بناء الجري)inform me about build MyJobName #423 (حدد رقم البناء)inform job MyJobName (بناء جملة بديل)تلقي رسائل الركود لجميع عمليات البناء للوظيفة المحددة:
مثال:
watch JenkinsSelfCheck يدرك أي بناء من الوظيفة JenkinsSelfCheckunwatch JenkinsSelfCheckأمر صغير لتعطيل/تمكين تنفيذ الوظائف على جانب جنكينز.
مثال:
disable job NightlyTests (تعطيل الوظيفة على جنكينز)enable job NightlyTestsعندما فشل البناء ، تكون قادرًا على إعادة بناء أي بناء بواسطة:
مثال:
retry build NightlyTests (إعادة بناء آخر بناء وظيفة)retry build NightlyTests #100 (إعادة بناء البناء) jenkins nodes يسرد جميع العقد Jenkins المتاحة. الحالة عبر الإنترنت/غير متصل وعدد المنفذين مرئية. 
إذا قمت فقط بصق رابط إلى طلب سحب github/gitlab/bitbucket/stash ، فسوف يتتبع الروبوت حالة التذكرة!
يمكنك أيضًا تعيين ردود فعل مخصصة "معتمدة". على سبيل المثال ، لمعرفة من أو أي مكون/قسم وافق على طلب سحب يمكنك استخدام اسم رد الفعل أو دليل أحرف Unicode
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
ميزات إضافية: بالنسبة لـ Bitbucket ، يمكن لـ BOT استخراج حالة البناء الحالية (على سبيل المثال من Jenkins/Bamboo etc) وإظهار الفشل والبناء (تفاعل الحريق) كتفاعل (تفاعل سهم الدائرة). عندما يكون البناء مستقرًا ، تختفي ردود فعل البناء. 
يمكن لأمر queue (مع الاسم المستعار then ) طابور الأمر في الأمر المحدد ، حتى ينتهي الأمر الذي يتم تشغيله حاليًا.
مثال على ذلك السيناريو التالي: لديك وظيفة بناء (قد تستغرق بعض الدقائق) ووظيفة نشر تعتمد على القطع الأثرية. الآن يمكنك أن تفعل:
trigger job Build feature1234 لبدء وظيفة البناء مع فرع معينqueue trigger job DeployBranch feature1234queue reply Deployment is done!مثال آخر:
delay 1hthen send message #backend coffee time?لمشاهدة جميع أوامر الخلفية قيد التشغيل (مثل Jenkins Jobs أو PR Watcher) استخدم هذا الأمر:
list queueبوت قادر على الاستعلام عن معلومات من JIRA ، إما من تذكرة واحدة ، أو قائمة كاملة من التذاكر.
بشكل افتراضي ، لا تتوفر الأوامر وغير مرئية في "المساعدة" ، حتى يتم تعريف "Jira.host" في ملف التكوين.
أمثلة
jira TEST-1234jira 1242 (يفتح التذكرة ، باستخدام مشروع JIRA الافتراضي المكون)jql type=bug and status=open (استخدم المشروع الافتراضي بشكل افتراضي)jira "Second city" (البحث النصية للتذاكر في المشروع الافتراضي) 

من الممكن أيضًا الحصول على إشعار عندما يكون هناك تغيير في حالة في تذكرة JIRA معينة.
مثال
watch ticket PROJ-12234من الممكن إنشاء أزرار تقوم بإجراء أي إجراء عند الضغط على الزر. تفاعلات الركود

أمثلة:
add button "Start Deployment" "trigger job LiveDeployment"ملحوظة
تكوين المتغيرات الخاصة بالمستخدم لتخصيص سلوك الروبوت. على سبيل المثال ، كل مطور لديه بيئة الخادم الخاصة به.
مثال: وجود هذا التكوين العالمي:
commands :
- name : Deploy
trigger : " deploy (?P<branch>.*) "
commands :
- deploy {{.branch}} to {{ customVariable "defaultServer" }} يمكن لكل مطور الاتصال الآن بمجرد أن تكون هذه الأوامر مثل: set variable defaultSerer foobarX.local لتسجيل "DefaultServer" المخصص.
عند الاتصال الآن deploy mater ، سيتم نشر الفرع master على خادم foobarX.local .
مثال آخر هنا نسخة متقدمة تستخدم قوالب GO. في النهاية ، سيقوم الأمر بإنشاء مجموعة فرعية واحدة ، مثل: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> الذي سينشر الرابط إلى قناة الركود.
- name : demo
trigger : " demo (?P<ticketId> \ w+- \ d+) "
commands :
- |
{{ $ticket := jiraTicket .ticketId }}
{{ if $ticket }}
reply <!here> demo for <{{ jiraTicketUrl $ticket.Key }}|{{ $ticket.Key }}: {{ $ticket.Fields.Summary }}>
{{ else }}
reply Ticket {{ .ticketId }} not found :white_frowning_face:
{{ end }}
description : Informs the current channel about a demo of a Jira ticket. It directly posts a link to the ticket
examples :
- demo XYZ-1232 يمكن للمستخدم تحديد بيئته الافتراضية مرة واحدة عن طريق استخدام set variable serverEnvironment aws-02 .
ثم ستقوم deploy feature-123 بنشر الفرع على بيئة aws-02 المحددة. يمكن لكل مستخدم تحديد متغيراته الخاصة.
من الممكن أيضًا إجراء chatgpt مثل محادثة مع تكامل Openai الرسمي (GPT3.5)!

فقط اكتب "Openai" أو "chatgpt" قبل سؤالك لإنشاء موضوع جديد يتصرف مثل صفحة ChatGpt المعروفة. يتم استخدام محتوى الرسائل العشرة الأخيرة كسياق. لجعلها تعمل ، يجب توفير "openai.api_key" صالح في التكوين.
التكوين الممتد:
openai :
api_key : " sk-123....789 "
initial_system_message : " You are a Slack bot for Project XYZ, please answer shortly. "
update_interval : ' 3s ' # fewer Slack messages update during generation
model : gpt-3.5-turbo
temperature : 0.8
log_texts : true # opt in: log all input/output text to the logعند استخدام الأمر "Openai XXX" ضمن مؤشر ترابط موجود ، يتم استخدام الرسائل السابقة كسياق لمزيد من المكالمات.
من الممكن أيضًا استخدام الوظيفة في القوالب (كما هو الحال في الأوامر المخصصة أو crons).
{{ openai "Say some short welcome words to @Jon_Doe"}} سوف تطبع شيئًا مثل Hello Jon, welcome! How can I assist you today?
الروبوت قادر أيضًا على إنشاء صور بمساعدة Dall-E. ما عليك سوى البادئة التي تطالب بها مع "Dalle" وسيقوم الروبوت بإنشاء صورة بناءً على النص الخاص بك.

إذا كنت بحاجة إلى استراحة صغيرة وترغب في لعب لعبة مسابقة صغيرة ، فيمكنك القيام بذلك عن طريق الاتصال بهذا الأمر. لا يسمح أكثر من 50 سؤالا. الأسئلة من فئات مختلفة ومستويات صعبة وإما خيار متعدد أو أسئلة حقيقية/خاطئة.
الأوامر
quiz 10 لبدء اختبار مع 10 أسئلةanswer 1 للإجابة على سؤال مع الإجابة الأولى 
من الممكن إعداد OpenWeatherMap للحصول على معلومات حول الطقس الحالي في موقعك.

مثال على التكوين:
open_weather :
apikey : " 612325WD623562376678 "
location : " Hamburg, DE "
units : " metric " كل مستخدم قادر على تحديد الاسم المستعار للأمر الخاص. هذه ميزة مفيدة لتجنب كتابة نفس الأمر كل يوم.
مثال الاستخدام
list commands لسرد فقط الأوامر المحددة للمستخدم الحاليadd command 'myCommand' 'trigger job RestoreWorld 7 -> ثم فقط اتصل بـ myCommand لاحقًاadd command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'delete command 'build master'myCommand لتشغيل وظيفة Jenkins هذه 
"الأوامر" المحددة (السابقة تسمى "وحدات الماكرو") سحرية للغاية ويمكن تعريفها في ملفات تكوين YAML.
لديهم مشغل (تعبير منتظم) ولديهم قائمة بالأوامر الفرعية التي سيتم تنفيذها. يأخذون مجموعات المعلمات من regexp في الاعتبار - بحيث يمكن أن تكون مرنة للغاية!
مثال واحد بسيط لبدء وظيفتين من Jenkins مع اسم فرع معين في نفس الوقت:
commands :
- name : build clients
trigger : " build clients (?P<branch>.*) "
commands :
- " reply I'll build {{ .branch }} for you "
- " trigger job BuildFrontendClient {{ .branch }} "
- " trigger job BuildMobileClient {{ .branch }} "
- " then reply done! :checkmark: " 
ملاحظة : في الأوامر ، يمكنك استخدام المجموعة الكاملة من ميزات القالب الخاصة بـ GO -> الحلقات/الشروط الممكنة!
بجانب ميزات القالب المعتادة لـ GO تتوفر مجموعة من الأوامر المحددة في BOT في نطاق القالب.
يمكن إنشاء قائمة بجميع الوظائف المتاحة (مع الوسائط وأنواع الإرجاع) باستخدام أمر list template functions . 
ملاحظة: يمكن استخدام وظائف القالب في أوامر/ميزات مختلفة:
من خلال retry أو repeat آخر أمر تم تنفيذه ، سيتم إعادة تنفيذها. -> مفيد عندما يتم إصلاح وظيفة Jenkins الفاشلة.
أمر صغير قد يكون مفيدًا في تركيبة الأمر مع أمر command أو كخطاف لوظائف Jenkins.
مثال على الأمر: delay 10m trigger job DeployWorldwide
كرد ، ستحصل على أمر لإيقاف وظيفة قائمة الانتظار (مثل stop timer 123456 ). نظرًا لأنه يمكن للجميع إرسال الأمر ، يمكن استخدام الأمر للإعلان عن نشر وابتكار ، لا يزال من الممكن إيقاف التنفيذ من قبل الجميع.
reply send message هي أيضًا أوامر صغيرة مفيدة في تركيبة مع command أو Jenkins Hooks.
أمثلة:
send message to #backend The job failed :panic:delay 10m send message to @peter_pan I should notify you to...أمر بسيط إذا لم تكن قادرًا على اتخاذ قرار بين الخيارات المختلفة
أمثلة
random Pizza Pasta -> إنتاج إما "بيتزا" أو "باستا"random Peter Paul Tom Jan -> من يجب أن يأخذ حول تنظيم الطعام اليوم؟config.yaml (يمكنك إلقاء نظرة على config.example.yaml ) سيبدأ هذا الأمر الروبوت ، باستخدام ملف config.yaml افتراضيًا. استخدم وسيطة -config لاستخدام ملف (ملفات) التكوين من موقع آخر.
go run cmd/bot/main.go
الانتباه : إنشاء ملف config.yaml أولاً
docker-compose up
تتم إدارة التكوين من خلال ملفات .yaml البسيطة التي تخزن بيانات الاعتماد للخدمات الخارجية والأوامر المخصصة وما إلى ذلك.
أسهل طريقة هي الحصول على ملف config.yaml واحد فقط مع جميع الخيارات المطلوبة ، يتم تحميل config.yaml افتراضيًا. من الممكن أيضًا تقسيم التكوين إلى ملفات متعددة.
مثال بنية مع ملفات التكوين المتعددة:
secret.yaml التي تحتوي على بيانات الاعتماد للخدمات الخارجية (Slack ، Jenkins) - يمكن إدارتها بواسطة Puppet/Ansible وما إلى ذلك.jenkins.yaml تكوين Jenkins Job ومعلماتها وما إلى ذلكproject-X.yaml لفريق معينproject-Y.yaml لتحميل ملفات التكوين المتعددة ، استخدم go run cmd/bot/main.go -config /path/to/config/*.yaml الذي دمج جميع التكوينات معًا.
لتشغيل هذا الروبوت ، تحتاج إلى "رمز الروبوت" لتطبيق Slack الخاص بك. راجع قسم التثبيت حول كيفية إنشاء تطبيق مناسب مع الرموز المطلوبة.
لتكون قادرًا على بدء أو مراقبة Jenkins Jobs ، يجب عليك إعداد المضيف وبيانات الاعتماد أولاً. يحتاج المستخدم إلى قراءة الوصول إلى الوظائف والحق في تشغيل الوظائف لوظائفك ذات القائمة البيضاء.
jenkins :
host : https://jenkins.example.de
username : jenkinsuser
password : secretلتكون قادرة على بدء وظيفة ، يجب تحديد المهمة والمعلمات في التكوين.
وظيفة بدون أي معلمة تبدو بسيطة للغاية:
jenkins :
jobs :
CleanupJob : ثم يمكنك استخدام trigger job CleanupJob أو start job CleanupJob لبدء المهمة. كما سيعلمك عندما نجحت المهمة أو فشل (بما في ذلك سجل الأخطاء).
بعد ذلك ، وظيفة مع معلمتين:
jenkins :
jobs :
RunTests :
parameters :
- name : BRANCH
default : master
type : branch
- name : GROUP
default : allيمكن لهذه المهمة التعامل مع معلمتين:
إذا قمت بإعداد VSC في التكوين ، فلن تضطر إلى تمرير اسم الفرع الكامل ، ولكن يمكنك استخدام البحث الغامض.
مثال:
start job RunTests في "جميع" المجموعات في فرع الماجستيرstart job JIRA-1224 unit ستحاول العثور على فرع مطابق لرقم التذكرة. (رسالة خطأ إذا لم تكن هناك نتيجة بحث فريدة!)الآن مثال أكثر تعقيدًا مع المزيد من السحر:
jenkins :
jobs :
DeployBranch :
trigger : " deploy (?P<BRANCH>[ \ w \ -_ \ . \ /]*) to (?P<ENVIRONMENT>prod|test|dev) "
parameters :
- name : BRANCH
default : master
type : branch
- name : ENVIRONMENT
onsuccess :
- reply Tadaa : Take a look on http://{{ .ENVIRONMENT }}.example.com خطوة بخطوة: trigger هو تعبير منتظم لبدء المهمة ، والتي قد تحتوي على مجموعات مسموسة. سيتم مطابقة مجموعات REGEXP مع معلمات الوظيفة تلقائيًا.
ثم يمكنك استخدام deploy bugfix-1234 to test لبدء وظيفة Jenkins.
ملاحظة: يمكنك دائمًا بدء تشغيل هذه المهمة أيضًا عبر start job DeployBranch master . trigger هو مجرد بديل.
onsuccess هو خطاف سيتم تنفيذه عند بدء وظيفة عبر هذا الروبوت. بالإضافة إلى ذلك ، يتوفر onsuccess و onerror أيضًا ... على سبيل المثال لإرسال رسائل خطأ مخصصة.
من الممكن تحديد الأوامر الدورية عبر crons ، باستخدام مكتبة Robfig/Cron.
مثال التكوين
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " لتكون قادرًا على حل أسماء الفروع في TRIGGER Jenkins ، يمكن تكوين نظام VCS (في الوقت الحالي فقط خبأ/bitbucket).
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_nameإذا لم يتم توفير تكوين ، فلا يوجد بحث تلقائي للفرع ويتم تمرير المعلمات "الفرع" 1: 1 إلى وظيفة Jenkins.
قد لا تكون هناك حاجة لبعض الميزات في بيئتك. معظمها غير نشط إذا لم يتم توفير بيانات الاعتماد ، مثل Jira أو Bitbucket.
يمكن تعطيل بعضها الآخر عبر التكوين:
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/ يحتوي على فئات التعليمات البرمجية في الروبوت: اتصال إلى Slack ، إدارة المستخدم ، مطابقة الأوامر ...cmd/bot/ ENTROND POINTS AKA MAIN.GO لـ BOT وأداة اختبار CLIcommand/ الأمر الحقيقي الذي ينفذ واجهة Bot.Command إذا كنت بحاجة إلى أمر جديد ، وهو أمر غير قابل للتنفيذ باستخدام أمر "أمر" ، فيجب عليك كتابة رمز GO.
يوجد تطبيق CLI مفيد يحاكي تطبيق Slack ... فقط الدردشة مع وحدة التحكم المحلية دون أي اتصال Slack! 
make run-cli
make air لاستخدام "أداة إعادة تحميل Air Auto".
هناك مجموعة من الاختبارات التي يمكن تنفيذها عبر:
make test
يتم إنشاء تغطية الاختبار للبناء/التغطية. html
make test-coverage