Help us learn about your current experience with the documentation. Take the survey.

GitLab 聊天操作

  • Tier: 免费版, 高级版, 旗舰版
  • Offering: GitLab.com, GitLab 自托管, GitLab 专属

使用 GitLab 聊天操作通过聊天服务(如 Slack)与 CI/CD 作业进行交互。

许多组织使用 Slack 或 Mattermost 进行协作、故障排除和规划工作。通过聊天操作,您可以在同一个应用程序中与团队讨论工作、运行 CI/CD 作业并查看作业输出。

斜杠命令集成

您可以使用 run 斜杠命令 来触发聊天操作。

以下集成可用:

聊天操作工作流和 CI/CD 配置

聊天操作会在项目的默认分支的 .gitlab-ci.yml 文件中查找指定的作业。如果找到该作业,聊天操作会创建一个仅包含该指定作业的流水线。如果您设置 when: manual,聊天操作会创建流水线,但作业不会自动启动。

通过聊天操作运行的作业与从 GitLab 运行的作业具有相同的功能。作业可以使用现有的 CI/CD 变量(如 GITLAB_USER_ID)来执行额外的权限验证,但这些变量可以被 覆盖

您应该设置 rules,以使该作业不作为标准 CI/CD 流水线的一部分运行。

聊天操作将以下 CI/CD 变量 传递给作业:

  • CHAT_INPUT - 传递给 run 斜杠命令的参数。
  • CHAT_CHANNEL - 运行作业的聊天频道名称。
  • CHAT_USER_ID - 运行作业的用户的聊天服务 ID。

当作业运行时:

  • 如果作业在 30 分钟内完成,聊天操作会将作业输出发送到聊天频道。
  • 如果作业完成时间超过 30 分钟,您必须使用类似 Slack API 的方法将数据发送到频道。

从聊天操作中排除作业

要防止作业通过聊天运行:

  • .gitlab-ci.yml 中,将作业设置为 except: [chat]

自定义聊天操作回复

聊天操作将包含单个命令的作业输出作为回复发送到频道。例如,当以下作业运行时,聊天回复是 Hello world

stages:
- chatops

hello-world:
  stage: chatops
  rules:
    - if: $CI_PIPELINE_SOURCE == "chat"
  script:
    - echo "Hello World"

如果作业包含多个命令,或者设置了 before_script,聊天操作会将命令及其输出发送到频道。这些命令被包裹在 ANSI 颜色代码中。

要选择性地回复一个命令的输出,请将输出放在 chat_reply 部分。例如,以下作业列出当前目录中的文件:

stages:
- chatops

ls:
  stage: chatops
  rules:
    - if: $CI_PIPELINE_SOURCE == "chat"
  script:
    - echo "This command will not be shown."
    - echo -e "section_start:$( date +%s ):chat_reply\r{content}33[0K\n$( ls -la )\nsection_end:$( date +%s ):chat_reply\r{content}33[0K"

使用聊天操作触发 CI/CD 作业

前提条件:

  • 您必须拥有项目的 Developer 角色或更高。
  • 项目已配置为使用斜杠命令集成。

您可以从 Slack 或 Mattermost 在默认分支上运行 CI/CD 作业。

触发 CI/CD 作业的斜杠命令取决于为项目配置了哪种斜杠命令集成。

  • 对于 GitLab for Slack 应用,请使用 /gitlab <项目名称> run <作业名称> <参数>
  • 对于 Slack 或 Mattermost 斜杠命令,请使用 /<触发名称> run <作业名称> <参数>

其中:

  • <作业名称> 是要运行的 CI/CD 作业的名称。
  • <参数> 是要传递给 CI/CD 作业的参数。
  • <触发名称> 是为 Slack 或 Mattermost 集成配置的触发名称。

聊天操作会安排一个仅包含指定作业的流水线。

相关主题