這個鬆弛的機器人改善了開發團隊的工作流程。特別是關注詹金斯,吉特布,吉特拉布和吉拉,因為集成在開箱即用。但是,也可以以簡單且靈活的方式實現自定義命令,宏,CRON和其他特定於項目的命令。
_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添加到任何頻道中,並通過將命令與@bot_name(例如@slack-bot start job DailyDeployment在其中執行bot命令。
注意:您必須邀請機器人進入頻道才能處理命令。
help命令只會打印該機器人所有可用命令的列表。有了help *command*您將獲得一個簡短的描述和一些命令的示例。

該機器人能夠以簡單但功能強大的方式啟動和監視Jenkins的作業。
默認情況下,命令在“ help”中不可用,也不可見,直到在配置文件中定義了“ jenkins.host”。
start job命令開始詹金斯(Jenkins)作業,並顯示當前的進度。注意:配置中只有白名單的作業是可啟動的!
此外,每個作業都可以具有可配置的trigger ,這使創建自定義命令以啟動作業成為可能。 (這是一個將參數名稱考慮在內的正性)。例如,“開始日常部署”可能是詹金斯(Jenkins)作業的觸發因素。將此文本發送到機器人將開始工作。
開始工作後,機器人將顯示估計的構建時間和一些動作按鈕。您可以在那裡打開日誌或直接中止構建。
該機器人還能夠使用模糊分支搜索來解析和查找分支名稱。
示例:
trigger job DeployBetastart job BackendTests TEST-123 (搜索一個完整的分支名稱,包含test-123。EG功能/Test-123-added-feature-456) 

該機器人還可以為Jenkins構建創建一次時間通知。這對於開發人員正在等待結果的長期工作可能很有用。
例子:
inform me about build NightlyTests (觀看最新的運行構建)inform me about build MyJobName #423 (指定構建號)inform job MyJobName (替代語法)為給定的工作收到所有過程構建的鬆弛消息:
例子:
watch JenkinsSelfCheck JenkinsSelfCheck任何工作unwatch JenkinsSelfCheck在詹金斯一側禁用/啟用工作執行的小命令。
例子:
disable job NightlyTests (在詹金斯上禁用工作)enable job NightlyTests當構建失敗時,您可以通過以下方式重試的任何構建:
例子:
retry build NightlyTests (重試工作的最後一個構建)retry build NightlyTests #100 (重新測試構建)jenkins nodes列出了所有可用的詹金斯節點。可見的在線/離線狀態和執行者的數量。 
如果您只是將鏈接粘貼到github/gitlab/bitbucket/astash拖拉請求,則該機器人將跟踪機票狀態!
您還可以設置自定義“批准”反應。例如,要直接查看誰或哪個組件/部門批准了拉動請求,您可以使用反應的名稱或Unicode字符目錄
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
額外的功能:對於Bitbucket,該機器人能夠提取當前的構建狀態(例如,從Jenkins/Bamboo等)顯示出失敗並作為反應(圓形箭頭反應)顯示出失敗的構建(火反應)。當構建穩定時,構建反應消失了。 
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查詢信息,無論是一張票或一整張門票。
默認情況下,命令在“ help”中不可用,也不可見,直到在配置文件中定義了“ 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 Server。
另一個示例在這裡使用GO模板的高級版本。最後,該命令將生成一個子命令,例如: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket>將發佈到Slack Channel的鏈接。
- 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環境中。每個用戶都可以定義自己的變量。
也有可能與官方OpenAI集成(GPT3.5)進行類似chatgpt!

只需在問題之前鍵入“ OpenAi”或“ chatgpt”,以創建一個像知名chatgpt頁面一樣的新線程。最後10條消息的內容用作上下文。為了使其正常工作,必須在配置中提供有效的“ 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”命令時,先前的消息將用作進一步調用的上下文。
也可以在模板中使用該函數(例如自定義命令或CRON中)。
{{ 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 >然後稍後再致電myCommandadd 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的通常模板功能外,模板範圍中還提供了一堆特定的命令。
可以使用list template functions命令來生成所有可用功能(具有參數和返回類型)的所有可用功能的列表。 
注意:此模板功能可以在不同的命令/功能中使用:
通過retry或repeat您的最後執行命令,將重新執行。 - >當失敗的詹金斯作業被修復時有用。
一個小命令,可能與command命令或詹金斯作業的鉤子相結合。
示例命令: delay 10m trigger job DeployWorldwide
作為回复,您將獲得一個命令來停止排隊的作業(例如stop timer 123456 )。當每個人都可以發送命令時,命令可以用來宣布部署,並有疑問,每個人仍然可以停止執行。
reply和send message也是小命令,可與command或詹金斯鉤子結合使用。
示例:
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文件默認情況下啟動bot。使用-config參數使用來自另一個位置的配置文件。
go run cmd/bot/main.go
注意:首先創建一個config.yaml文件
docker-compose up
配置是通過簡單的.YAML文件管理的,該文件存儲了外部服務和自定義命令等的憑據。
最簡單的方法是只有一個config.yaml文件,其中包含所有所需的選項,默認情況下將加載config.yaml 。也可以將配置分為多個文件。
帶有多個配置文件的示例結構:
secret.yaml包含外部服務的憑據(Slack,Jenkins) - 可以通過木偶/Ansible等管理。jenkins.yaml jenkins作業及其參數等的配置project-X.yaml特定團隊的自定義命令project-Y.yaml要加載多個配置文件,請使用go run cmd/bot/main.go -config /path/to/config/*.yaml 。
要運行此機器人,您需要一個“機器人令牌”來進行Slack應用程序。請參閱有關如何使用所需令牌創建適當的應用程序的安裝部分。
要啟動或監視Jenkins作業,您必須首先設置主機和憑據。用戶需要閱讀對工作的訪問權限,並需要觸發白名單的作業的權利。
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 ...例如發送自定義錯誤消息。
可以使用Robfig/Cron庫通過CRONS定期命令。
示例配置
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " 為了能夠在Jenkins Trigger中解析分支名稱,可以配置VCS系統(目前它只是藏匿/bitbucket)。
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_name如果沒有提供配置,則沒有自動化的分支查找,“分支”參數將以1:1傳遞給Jenkins作業。
在您的環境中可能不需要某些功能。如果未提供憑據,例如Jira或Bitbucket,大多數人都不活躍。
其他一些可以通過config禁用:
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/包含機器人的代碼類:連接與Slack,用戶管理,命令匹配...cmd/bot/入口點又名main.go bot和CLI測試工具command/真實命令實現bot.command接口如果您需要使用“命令”命令無法實現的新命令,則必須編寫GO代碼。
有一個方便的CLI應用程序模擬Slack應用程序...只需與您的本地控制台聊天,而無需任何Slack連接即可! 
make run-cli
make air使用“空氣自動重新加載工具”。
有很多測試可以通過:
make test
生成測試覆蓋範圍以構建/覆蓋範圍。html
make test-coverage