1. 概述

在 DevOps 实践中,我们经常需要监控构建任务和自动化作业的状态。Jenkins 是一个非常流行的持续集成工具,而 Slack 则是广泛使用的团队协作平台。

本文将介绍如何配置 Jenkins 与 Slack 集成,使 Jenkins 在执行 CI/CD 流水线时能够自动向 Slack 发送通知消息。

2. 配置 Slack

首先,我们需要在 Slack 上创建一个自定义应用,以便 Jenkins 能够通过该应用向 Slack 发送消息。你需要拥有 Slack 管理员权限才能完成此操作。

以下是具体步骤:

  • 打开 https://api.slack.com
  • 登录目标工作区
  • 点击 Start Building
  • 输入应用名称(如 Jenkins),点击 Create App
  • 进入 OAuth & Permissions 页面
  • Bot Token Scopes 区域添加 chat:write 权限
  • 点击 Install App to Workspace,然后点击 Accept

配置完成后,你会看到一个包含 OAuth Token 的页面:

jenkins slack token

妥善保存该 Token,因为后续配置 Jenkins 时会用到它。

最后,你需要将新创建的 Jenkins Bot 用户邀请到你希望它发送消息的频道中。方法很简单:在目标频道中使用 @Jenkins 提及它即可。

3. 配置 Jenkins

要完成 Jenkins 的 Slack 集成,你同样需要 Jenkins 的管理员权限。

以下是配置步骤:

  1. 登录 Jenkins,进入 Manage Jenkins > Plugin Manager
  2. Available 标签页中搜索 "Slack"
  3. 勾选 Slack Notification 插件,点击 Install without restart

jenkins slack install plugin

安装完成后,进入 Jenkins > Credentials > System > Global Credentials 添加一个类型为 Secret text 的凭证:

jenkins slack credential

Secret 字段中填入之前从 Slack 获取的 OAuth Token,并为该凭证设置一个有意义的 ID 和描述。

最后,进入 Jenkins > Manage Jenkins > Configure System,找到 Slack 部分,勾选 Custom slack app bot user

jenkins slack settings custom bot checkbox

至此 Jenkins 的 Slack 插件和凭证配置已完成。

4. 配置传统 Jenkins Job

传统 Jenkins Job 通常通过 UI 配置,我们可以通过添加 Post-build Action 来实现 Slack 消息推送。

具体步骤如下:

  1. 打开任意一个 Jenkins Job(或新建一个)
  2. 展开 Add post-build action 菜单
  3. 选择 Slack Notifications

jenkins slack post build action dropdown

接下来需要填写以下关键信息:

  • 哪些构建阶段需要通知(如开始、成功、失败等)
  • 使用哪个凭证(即上一步添加的 Slack Token)
  • 目标 Slack 频道名称或用户 ID

你还可以自定义更多选项,如是否包含提交信息、自定义消息内容、机器人头像等:

jenkins slack post build action

配置完成后,可以点击 Test Connection 按钮测试 Jenkins 是否能成功发送消息到 Slack:

jenkins slack test message success

如果测试失败,请检查以下内容:

✅ Jenkins凭证是否正确
✅ OAuth Token 是否复制正确
✅ Slack Bot 是否被邀请进目标频道
✅ Jenkins 日志是否有报错信息

5. 配置 Jenkins Pipeline

Jenkins Pipeline 使用 Groovy 脚本定义构建流程,与传统 Job 不同的是,它没有 Post-build Action,而是通过脚本直接调用 slackSend 方法发送通知。

以下是一个简单的示例代码:

slackSend botUser: true, 
  channel: 'builds', 
  color: '#00ff00', 
  message: 'Testing Jenkins with Slack', 
  tokenCredentialId: 'slack-token'

参数说明如下:

  • botUser: 是否使用自定义 Bot 用户(推荐)
  • channel: Slack 频道名或用户 ID
  • color: 消息颜色(支持十六进制)
  • message: 要发送的消息内容
  • tokenCredentialId: 凭证 ID(即 Jenkins 中配置的 ID)

⚠️ 注意:Pipeline 没有“测试”按钮,所以每次修改后需要运行整个流水线才能验证 Slack 配置是否生效。

建议在初次配置时,新建一个只包含 slackSend 的 Pipeline 来测试集成是否成功。

6. 其他注意事项

  • 一个 Jenkins 实例可以对接多个 Slack 工作区:只需为每个工作区创建独立的 Slack App,并在 Jenkins 中保存对应的 Token 即可。
  • 不同 Job 可以发送到不同 Slack 频道:这是 Job 级别的配置,比如构建类任务发到 dev 频道,测试/生产任务发到 ops 频道。
  • 还有其他 Slack 插件可选:比如 Global Slack Notifier 更适合统一通知场景,而当前介绍的 Slack Notification 插件更适合细粒度控制。

7. 总结

通过本文,我们完成了 Jenkins 与 Slack 的集成配置,使 Jenkins 可以在构建过程中自动向 Slack 发送状态通知。

  • ✅ 使用 Slack 自定义应用 + Jenkins 插件方式实现
  • ✅ 支持传统 Job 和 Pipeline 两种方式
  • ✅ 可灵活配置通知时机、频道、颜色等

这套集成可以帮助团队更及时地感知构建状态,快速响应异常,提升 DevOps 协作效率。


原始标题:Jenkins Slack Integration