这个松弛的机器人改善了开发团队的工作流程。特别是关注詹金斯,吉特布,吉特拉布和吉拉,因为集成在开箱即用。但是,也可以以简单且灵活的方式实现自定义命令,宏,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