GitLab ChatOps

原文:https://docs.gitlab.com/ee/ci/chatops/README.html

GitLab ChatOps

版本历史

GitLab ChatOps 提供了一种通过 Slack 等聊天服务与 CI / CD 作业进行交互的方法. 许多组织的讨论,协作和故障排除都是在聊天服务中进行的. 拥有一种方法来运行 CI / CD 作业并将输出回传到渠道,可以极大地增强团队的工作流程.

How GitLab ChatOps works

GitLab ChatOps 是基于GitLab CI / CDSlack Slash Commands构建的. ChatOps 使用以下参数为斜杠命令提供run操作:

  • 要执行的<job name> .
  • The <job arguments>.

ChatOps 将以下CI / CD 变量传递给作业:

  • CHAT_INPUT包含任何其他参数.
  • CHAT_CHANNEL设置为触发该动作的通道的名称.

当执行时,ChatOps 查找指定的作业名称,并尝试将其与.gitlab-ci.yml的相应作业匹配. 如果在master上找到匹配的作业,则计划仅包含该作业的管道. 作业完成后:

  • 如果作业在不到 30 分钟内完成 ,则 ChatOps 会将作业的输出发送到 Slack.
  • 如果作业在30 分钟内完成 ,则该作业必须使用Slack API将数据发送到通道.

要使用run命令,您必须具有Developer 访问权限或更高权限 . 如果不能从聊天中触发某项工作,则可以将其设置为下列except: [chat] .

Best practices for ChatOps CI jobs

由于 ChatOps 是基于 GitLab CI / CD 构建的,因此该作业具有可用的所有相同功能. 创建 ChatOps 作业时,请考虑以下最佳做法:

  • GitLab 强烈建议您only: [chat]设置only: [chat]以便该作业不会作为标准 CI 管道的一部分运行.
  • 如果作业设置为以下when: manual ,则 ChatOps 将创建管道,但是作业等待启动.
  • ChatOps 为访问控制提供了有限的支持. 如果触发斜杠命令的用户在项目中具有” 开发人员”访问权限或更高权限 ,则作业将运行. 作业本身可以使用现有的CI / CD 变量(例如GITLAB_USER_ID来执行其他权限验证,但是可以覆盖这些变量.

Controlling the ChatOps reply

单个命令的作业输出将作为答复发送到通道. 例如,以下任务的聊天回复是频道中的Hello World

  1. hello-world:
  2. stage: chatops
  3. only: [chat]
  4. script:
  5. - echo "Hello World"

包含多个命令(或before_script )的作业将在聊天回复中返回其他内容. 在这些情况下,命令和它们的输出都包括在内,并且命令以 ANSI 颜色代码包装.

To selectively reply with the output of one command, its output must be bounded by the chat_reply section. For example, the following job lists the files in the current directory:

  1. ls:
  2. stage: chatops
  3. only: [chat]
  4. script:
  5. - echo "This command will not be shown."
  6. - echo -e "section_start:$( date +%s ):chat_reply\r\033[0K\n$( ls -la )\nsection_end:$( date +%s ):chat_reply\r\033[0K"

GitLab ChatOps examples

GitLab.com 团队创建了一个常见 ChatOps 脚本的存储库,它们用于与我们的 GitLab 生产实例进行交互. 其他 GitLab 实例的管理员可能会发现它们很有用. 它们可以作为您可以编写以与自己的应用程序进行交互的 ChatOps 脚本的灵感.

GitLab ChatOps icon

官方的 GitLab ChatOps 图标可以下载. 您可以在此处找到并下载官方的 GitLab ChatOps 图标.

GitLab ChatOps bot icon