ChatOps
Tier: 基础版,专业版,旗舰版
Offering: JihuLab.com,私有化部署
使用极狐GitLab ChatOps 通过 Slack 等聊天服务与 CI/CD 任务交互。
许多组织使用 Slack 或 Mattermost 进行协作、故障排除和工作规划。借助 ChatOps,你可以在同一个应用程序中与团队讨论工作、运行 CI/CD 任务,并查看任务输出。
斜杠命令集成
你可以使用 run 斜杠命令 触发 ChatOps。
以下集成可用:
- 极狐GitLab for Slack 应用(推荐用于 Slack)
- Mattermost 斜杠命令
ChatOps 工作流和 CI/CD 配置
ChatOps 在项目默认分支的 .gitlab-ci.yml 中查找指定任务。如果找到该任务,ChatOps 会创建一个仅包含该指定任务的流水线。如果设置了 when: manual,ChatOps 会创建流水线,但任务不会自动启动。
通过 ChatOps 运行的任务具有与从极狐GitLab 运行的任务相同的功能。该任务可以使用现有的 CI/CD 变量,如 GITLAB_USER_ID,来进行额外的权限验证,但这些变量可以被覆盖。
你应该设置 rules,以便该任务不作为标准 CI/CD 流水线的一部分运行。
ChatOps 将以下 CI/CD 变量 传递给任务:
- CHAT_INPUT - 传递给 run 斜杠命令的参数。
- CHAT_CHANNEL - 运行任务的聊天频道名称。
- CHAT_USER_ID - 运行任务的用户的聊天服务 ID。
任务运行时:
- 如果任务在 30 分钟内完成,ChatOps 会将任务输出发送到聊天频道。
- 如果任务完成时间超过 30 分钟,你必须使用类似 Slack API 的方法将数据发送到频道。
从 ChatOps 中排除任务
要防止从聊天中运行任务:
- 在 .gitlab-ci.yml 中,将任务设置为 except: [chat]。
自定义 ChatOps 回复
ChatOps 将使用单个命令的任务的输出作为回复发送到频道。例如,当以下任务运行时,聊天回复为 Hello world:
yaml1stages: 2- chatops 3 4hello-world: 5 stage: chatops 6 rules: 7 - if: $CI_PIPELINE_SOURCE == "chat" 8 script: 9 - echo "Hello World"
如果任务包含多个命令,或者设置了 before_script,ChatOps 会将命令及其输出发送到频道。命令会被包装在 ANSI 颜色代码中。
要有选择地回复一个命令的输出,请将输出放在 chat_reply 部分。例如,以下任务列出当前目录中的文件:
yaml1stages: 2- chatops 3 4ls: 5 stage: chatops 6 rules: 7 - if: $CI_PIPELINE_SOURCE == "chat" 8 script: 9 - echo "This command will not be shown." 10 - echo -e "section_start:$( date +%s ):chat_reply\r\033[0K\n$( ls -la )\nsection_end:$( date +%s ):chat_reply\r\033[0K"
使用 ChatOps 运行 CI/CD 任务
先决条件:
- 你必须拥有该项目的开发者、维护者或所有者角色。
- 项目已配置为使用斜杠命令集成。
你可以从 Slack 或 Mattermost 在默认分支上运行 CI/CD 任务。
运行 CI/CD 任务的斜杠命令取决于为项目配置的斜杠命令集成。
- 对于极狐GitLab for Slack 应用,使用 /gitlab <project-name> run <任务名称> <参数>。
- 对于 Slack 或 Mattermost 斜杠命令,使用 /<触发器名称> run <任务名称> <参数>。
其中:
- <任务名称> 是要运行的 CI/CD 任务名称。
- <参数> 是传递给 CI/CD 任务的参数。
- <触发器名称> 是为 Slack 或 Mattermost 集成配置的触发器名称。
ChatOps 会安排一个仅包含指定任务的流水线。
相关主题
- 通用 ChatOps 脚本仓库,极狐GitLab 用于与 JihuLab.com 交互
- 极狐GitLab for Slack 应用
- Mattermost 斜杠命令