Bot Slack ini meningkatkan alur kerja tim pengembangan. Terutama dengan fokus pada Jenkins, GitHub, Gitlab dan Jira, karena integrasi bekerja di luar kotak. Tetapi juga perintah khusus, makro, cron, dan perintah spesifik proyek lainnya dapat diimplementasikan dengan cara yang sederhana dan fleksibel.
_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 Pertama persiapkan config.yaml , lihat saja config-example.yaml
go run github.com/innogames/slack-bot/v2/cmd/botdocker-compose upgo run cmd/bot/main.go atau make run UNTUK MENJALANKAN APLIKASI GO Sebagai pengguna Slack, Anda hanya perlu mengirim pesan pribadi ke pengguna bot/aplikasi yang berisi perintah untuk dieksekusi. Selain itu, Anda dapat menambahkan bot ke saluran apa pun dan menjalankan perintah bot di dalamnya dengan mengawali perintah Anda dengan @bot_name, @slack-bot start job DailyDeployment
Catatan: Anda harus mengundang bot ke saluran untuk dapat menangani perintah.
Perintah help hanya mencetak daftar semua perintah bot ini yang tersedia. Dengan help *command* Anda akan mendapatkan deskripsi singkat dan beberapa contoh untuk satu perintah.

Bot dapat memulai dan memantau pekerjaan Jenkins dengan cara yang sederhana namun kuat.
Secara default, perintah tidak tersedia dan tidak terlihat dalam "bantuan", sampai "jenkins.host" didefinisikan dalam file konfigurasi.
Perintah start job memulai pekerjaan Jenkins dan menunjukkan kemajuan saat ini. Perhatian: Hanya pekerjaan yang masuk daftar putih di konfigurasi yang dapat dimulai!
Selain itu, setiap pekerjaan dapat memiliki trigger yang dapat dikonfigurasi yang memungkinkan untuk membuat perintah khusus untuk memulai pekerjaan. (Ini adalah RegExp yang memperhitungkan nama parameter). Misalnya "Mulai Penempatan Harian" bisa menjadi pemicu untuk satu pekerjaan Jenkins. Mengirim teks ini ke bot akan memulai pekerjaan.
Setelah memulai pekerjaan, bot akan menunjukkan perkiraan waktu pembangunan dan beberapa tombol aksi. Di sana Anda dapat membuka log atau membatalkan build secara langsung.
Bot juga dapat menguraikan parameter dan mencari nama cabang menggunakan pencarian cabang fuzzy.
Contoh:
trigger job DeployBetastart job BackendTests TEST-123 (cari nama cabang lengkap, berisi tes-123. Misalnya fitur/tes-123-fitur-fitur-456) 

Bot juga memiliki kemungkinan untuk membuat pemberitahuan satu kali untuk pembuatan Jenkins. Ini mungkin berguna untuk pekerjaan yang sudah berjalan lama di mana para devs menunggu hasilnya.
Contoh:
inform me about build NightlyTests (menonton Build Running terbaru)inform me about build MyJobName #423 (tentukan nomor build)inform job MyJobName (sintaks alternatif)Menerima pesan Slack untuk semua proses pembuatan untuk pekerjaan yang diberikan:
Contoh:
watch JenkinsSelfCheck memberi tahu tentang bangunan apa pun dari JenkinsSelfCheckunwatch JenkinsSelfCheckPerintah kecil untuk menonaktifkan/mengaktifkan eksekusi pekerjaan di sisi Jenkins.
Contoh:
disable job NightlyTests (nonaktifkan pekerjaan di jenkins)enable job NightlyTestsKetika sebuah bangunan gagal, Anda dapat mencoba lagi bangunan apa pun dengan:
Contoh:
retry build NightlyTests (coba lagi pembangunan pekerjaan terakhir)retry build NightlyTests #100 (coba lagi Build) jenkins nodes mencantumkan semua node Jenkins yang tersedia. Status online/offline dan jumlah pelaksana terlihat.
Jika Anda hanya menempelkan tautan ke permintaan GitHub/GitLab/Bitbucket/Stash Pull, bot akan melacak keadaan tiket!
Anda juga dapat menetapkan reaksi "yang disetujui" khusus. Misalnya untuk melihat langsung siapa atau komponen/departemen mana yang menyetujui permintaan tarik Anda dapat menggunakan nama reaksi atau direktori karakter unicode
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
Fitur tambahan: Untuk bitbucket, bot dapat mengekstraksi status build saat ini (misalnya dari Jenkins/Bamboo dll) dan menunjukkan pembuatan yang gagal dan berjalan (reaksi api) sebagai reaksi (reaksi panah lingkaran). Ketika build stabil, reaksi build menghilang.
Perintah queue (dengan alias then ) dapat mengantri perintah yang diberikan, sampai perintah yang sedang berjalan selesai.
Contoh skenario berikut: Anda memiliki pekerjaan build (yang mungkin memakan waktu beberapa menit) dan pekerjaan penyebaran yang bergantung pada artefak build. Sekarang Anda bisa melakukannya:
trigger job Build feature1234 untuk memulai pekerjaan pembangunan dengan cabang yang diberikanqueue trigger job DeployBranch feature1234queue reply Deployment is done!Contoh Lainnya:
delay 1hthen send message #backend coffee time?Untuk melihat semua perintah latar belakang yang berjalan (seperti Jenkins Jobs atau PR Watcher) Gunakan perintah ini:
list queueBot dapat meminta informasi dari Jira, baik dari satu tiket, atau seluruh daftar tiket.
Secara default, perintah tidak tersedia dan tidak terlihat dalam "bantuan", sampai "jira.host" didefinisikan dalam file konfigurasi.
Contoh
jira TEST-1234jira 1242 (membuka tiket, menggunakan proyek JIRA default yang dikonfigurasi)jql type=bug and status=open (gunakan proyek default secara default)jira "Second city" (Pencarian Teks Tiket dalam Proyek Default) 

Dimungkinkan juga untuk mendapatkan pemberitahuan ketika ada perubahan negara dalam tiket JIRA tertentu.
Contoh
watch ticket PROJ-12234Dimungkinkan untuk membuat tombol yang melakukan tindakan bot apa pun saat menekan tombol. Interaksi kendur

Contoh:
add button "Start Deployment" "trigger job LiveDeployment"Catatan
Konfigurasikan variabel spesifik pengguna untuk menyesuaikan perilaku bot. Misalnya setiap pengembang memiliki lingkungan servernya sendiri.
Contoh: Memiliki konfigurasi global ini:
commands :
- name : Deploy
trigger : " deploy (?P<branch>.*) "
commands :
- deploy {{.branch}} to {{ customVariable "defaultServer" }} Setiap pengembang sekarang dapat menelepon setelah perintah ini seperti: set variable defaultSerer foobarX.local untuk mendaftarkan "defaultServer" khusus.
Ketika sekarang memanggil deploy mater , itu akan menggunakan cabang master ke server foobarX.local .
Contoh lain di sini versi canggih yang menggunakan template Go. Pada akhirnya, perintah tersebut akan menghasilkan satu sub-perintah, seperti: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> yang akan memposting tautan ke saluran Slack.
- 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 Pengguna dapat mendefinisikan lingkungan defaultnya sekali dengan menggunakan set variable serverEnvironment aws-02 .
Kemudian deploy feature-123 akan menggunakan cabang ke lingkungan aws-02 yang ditentukan. Setiap pengguna dapat mendefinisikan variabel sendiri.
Dimungkinkan juga untuk melakukan chatgpt seperti percakapan dengan Integrasi Openai Resmi (GPT3.5)!

Cukup ketik "OpenAi" atau "ChatGPT" sebelum pertanyaan Anda untuk membuat utas baru yang berperilaku seperti halaman chatgpt terkenal. Isi 10 pesan terakhir digunakan sebagai konteks. Untuk membuatnya berfungsi, "openai.api_key" yang valid harus disediakan dalam konfigurasi.
Konfigurasi Diperpanjang:
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 logSaat menggunakan perintah "openai xxx" dalam utas yang ada, pesan sebelumnya digunakan sebagai konteks untuk panggilan lebih lanjut.
Dimungkinkan juga untuk menggunakan fungsi dalam templat (seperti dalam perintah atau cron khusus).
{{ openai "Say some short welcome words to @Jon_Doe"}} akan mencetak sesuatu seperti Hello Jon, welcome! How can I assist you today?
Bot juga dapat menghasilkan gambar dengan bantuan Dall-E. Hanya awalan yang Anda minta dengan "Dalle" dan bot akan menghasilkan gambar berdasarkan teks Anda.

Jika Anda membutuhkan istirahat kecil dan ingin memainkan permainan kuis kecil, Anda dapat melakukannya dengan memanggil perintah ini. Tidak lebih dari 50 pertanyaan diizinkan. Pertanyaannya berasal dari berbagai kategori dan tingkat yang sulit dan merupakan pilihan ganda atau pertanyaan yang benar/salah.
Perintah
quiz 10 untuk memulai kuis dengan 10 pertanyaananswer 1 untuk menjawab pertanyaan dengan jawaban pertama 
Dimungkinkan untuk mengatur OpenWeathermap untuk mendapatkan informasi tentang cuaca saat ini di lokasi Anda.

Contoh Config:
open_weather :
apikey : " 612325WD623562376678 "
location : " Hamburg, DE "
units : " metric " Setiap pengguna dapat mendefinisikan alias perintah sendiri. Ini adalah fitur praktis untuk menghindari mengetikkan perintah yang sama setiap hari.
Contoh penggunaan
list commands untuk Cukup daftar perintah yang ditentukan untuk pengguna saat iniadd command 'myCommand' 'trigger job RestoreWorld 7 -> lalu hubungi myCommand nantiadd command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'delete command 'build master'myCommand untuk memicu pekerjaan Jenkins ini 
"Perintah" yang ditentukan (sebelumnya disebut "makro") sangat ajaib dan dapat didefinisikan dalam file konfigurasi YAML.
Mereka memiliki pemicu (ekspresi reguler) dan memiliki daftar sub perintah yang akan dieksekusi. Mereka memperhitungkan kelompok parameter dari RegExp - sehingga mereka bisa sangat fleksibel!
Satu contoh sederhana untuk memulai dua pekerjaan Jenkins dengan nama cabang yang diberikan secara bersamaan:
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: " 
CATATAN : Dalam perintah, Anda dapat menggunakan set lengkap fitur template dari Go -> loop/kondisi dimungkinkan!
Selain fitur template biasa dari go sekelompok perintah spesifik bot tersedia dalam lingkup templat.
Daftar semua fungsi yang tersedia (dengan argumen dan tipe pengembalian) dapat dihasilkan dengan menggunakan perintah list template functions . 
Catatan: Fungsi template ini dapat digunakan dalam berbagai perintah/fitur:
Dengan retry atau repeat perintah terakhir Anda yang dieksekusi akan dieksekusi ulang. -> Berguna saat pekerjaan Jenkins yang gagal diperbaiki.
Perintah kecil yang mungkin berguna dalam kombinasi dengan perintah command atau sebagai kait untuk pekerjaan Jenkins.
Contoh Perintah: delay 10m trigger job DeployWorldwide
Sebagai balasan, Anda akan mendapatkan perintah untuk menghentikan pekerjaan antrian (seperti stop timer 123456 ). Karena semua orang dapat mengirim perintah, perintah dapat digunakan untuk mengumumkan penyebaran dan ragu, eksekusi masih dapat dihentikan oleh semua orang.
reply dan send message juga merupakan perintah kecil yang berguna dalam kombinasi dengan command atau kait Jenkins.
Contoh:
send message to #backend The job failed :panic:delay 10m send message to @peter_pan I should notify you to...Perintah sederhana jika Anda tidak dapat memutuskan antara berbagai opsi
Contoh
random Pizza Pasta -> menghasilkan "pizza" atau "pasta"random Peter Paul Tom Jan -> Siapa yang harus mengambil tentang mengatur makanan hari ini?config.yaml (Anda dapat melihat config.example.yaml ) Perintah ini akan memulai bot, menggunakan file config.yaml secara default. Gunakan argumen -config untuk menggunakan file konfigurasi dari lokasi lain.
go run cmd/bot/main.go
Perhatian : Buat file config.yaml terlebih dahulu
docker-compose up
Konfigurasi dikelola melalui file .yaml sederhana yang menyimpan kredensial untuk layanan eksternal dan perintah khusus dll.
Cara termudah adalah dengan hanya memiliki satu file config.yaml dengan semua opsi yang diperlukan disertakan, config.yaml dimuat secara default. Dimungkinkan juga untuk membagi konfigurasi menjadi beberapa file.
Contoh struktur dengan beberapa file konfigurasi:
secret.yaml yang berisi kredensial untuk layanan eksternal (Slack, Jenkins) - dapat dikelola dengan boneka/ansible dll.jenkins.yaml pekerjaan Jenkins dan parameternya dllproject-X.yaml Perintah khusus untuk tim tertentuproject-Y.yaml Untuk memuat beberapa file konfigurasi, gunakan go run cmd/bot/main.go -config /path/to/config/*.yaml yang menggabungkan semua konfigurasi bersama -sama.
Untuk menjalankan bot ini, Anda memerlukan "token bot" untuk aplikasi Slack Anda. Lihat bagian instalasi tentang cara membuat aplikasi yang tepat dengan token yang dibutuhkan.
Untuk dapat memulai atau memantau pekerjaan Jenkins, Anda harus mengatur host dan kredensial terlebih dahulu. Pengguna perlu membaca akses ke pekerjaan dan hak untuk memicu pekerjaan untuk pekerjaan yang masuk daftar putih.
jenkins :
host : https://jenkins.example.de
username : jenkinsuser
password : secretUntuk dapat memulai pekerjaan, pekerjaan dan parameternya harus didefinisikan dalam konfigurasi.
Pekerjaan tanpa parameter apa pun terlihat sangat sederhana:
jenkins :
jobs :
CleanupJob : Kemudian Anda dapat menggunakan trigger job CleanupJob atau start job CleanupJob untuk memulai pekerjaan. Ini juga akan memberi tahu Anda ketika pekerjaan berhasil atau gagal (termasuk log kesalahan).
Selanjutnya, pekerjaan dengan dua parameter:
jenkins :
jobs :
RunTests :
parameters :
- name : BRANCH
default : master
type : branch
- name : GROUP
default : allPekerjaan ini dapat menangani dua parameter:
Jika Anda mengatur VSC di konfigurasi, Anda tidak perlu melewati nama cabang lengkap, tetapi dapat menggunakan pencarian fuzzy.
Contoh:
start job RunTests akan memulai grup "semua" di cabang masterstart job JIRA-1224 unit akan mencoba menemukan cabang yang cocok untuk nomor tiket. (Pesan Kesalahan Jika tidak ada hasil pencarian yang unik!)Sekarang contoh yang lebih kompleks dengan lebih banyak sihir:
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 Langkah demi langkah: trigger adalah ekspresi reguler untuk memulai pekerjaan, yang mungkin berisi grup bernama. Grup RegExp akan dicocokkan dengan parameter pekerjaan secara otomatis.
Kemudian Anda dapat menggunakan deploy bugfix-1234 to test untuk memulai pekerjaan Jenkins.
Catatan: Anda selalu dapat memulai pekerjaan ini juga melalui start job DeployBranch master . trigger hanyalah alternatif.
onsuccess adalah pengait yang akan dieksekusi ketika pekerjaan dimulai melalui bot ini. Selain itu, onsuccess dan onerror juga tersedia ... misalnya untuk mengirim pesan kesalahan khusus.
Dimungkinkan untuk mendefinisikan perintah berkala melalui crons, menggunakan perpustakaan Robfig/Cron.
Contoh konfigurasi
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " Untuk dapat menyelesaikan nama cabang dalam pemicu Jenkins, sistem VCS dapat dikonfigurasi (saat ini hanya Stash/Bitbucket).
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_nameJika tidak ada konfigurasi yang disediakan, tidak ada pencarian cabang otomatis dan parameter "cabang" diloloskan 1: 1 ke pekerjaan Jenkins.
Beberapa fitur mungkin tidak diperlukan di lingkungan Anda. Sebagian besar tidak aktif jika kredensial tidak disediakan, seperti untuk Jira atau Bitbucket.
Beberapa yang lain dapat dinonaktifkan melalui konfigurasi:
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/ berisi kelas kode bot: Koneksi ke Slack, Manajemen Pengguna, Pencocokan Perintah ...cmd/bot/ POIN MASIH AKA Main.go untuk Bot dan Alat Uji CLIcommand/ Perintah Nyata Mengimplementasikan Bot.Command Interface Jika Anda memerlukan perintah baru, yang tidak dapat diimplementasikan dengan perintah "perintah", Anda harus menulis kode Go.
Ada aplikasi CLI praktis yang meniru aplikasi Slack ... cukup mengobrol dengan konsol lokal Anda tanpa koneksi kendur! 
make run-cli
make air untuk menggunakan "Alat Pengisian Udara Udara".
Ada banyak tes yang dapat dieksekusi melalui:
make test
Cakupan uji dihasilkan untuk membangun/cakupan.html
make test-coverage