090.md 5.5 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
# Slack Notifications Service

> 原文:[https://docs.gitlab.com/ee/user/project/integrations/slack.html](https://docs.gitlab.com/ee/user/project/integrations/slack.html)

*   [Slack configuration](#slack-configuration)
*   [GitLab configuration](#gitlab-configuration)
    *   [Triggers available for Slack notifications](#triggers-available-for-slack-notifications)
*   [Troubleshooting](#troubleshooting)
    *   [Something went wrong on our end](#something-went-wrong-on-our-end)
    *   [`certificate verify failed`](#certificate-verify-failed)

# Slack Notifications Service[](#slack-notifications-service "Permalink")

Slack Notifications Service 允许您的 GitLab 项目将事件(例如问题创建)作为通知发送到您现有的 Slack 团队. 设置 Slack 通知需要同时更改 Slack 和 GitLab 的配置.

**注意:**您还可以使用 Slack 斜杠命令在 Slack 中控制 GitLab. 这是单独配置的[Slack 斜杠命令](slack_slash_commands.html) .

## Slack configuration[](#slack-configuration "Permalink")

1.  登录到 Slack 团队并[开始新的 Incoming WebHooks 配置](https://my.slack.com/services/new/incoming-webhook) .
2.  选择默认情况下将通知发送到的松弛通道. 单击**添加传入的 WebHooks 集成**按钮以添加配置.
3.  复制**Webhook URL** ,我们将在以后的 GitLab 配置中使用它.

## GitLab configuration[](#gitlab-configuration "Permalink")

1.  Open your project’s page, and navigate to your project’s [Integrations page](overview.html#accessing-integrations) at **设置>集成**.
2.  选择**Slack Notifications**集成进行配置.
3.  Click **启用整合**.
4.**Trigger 中** ,选中每种类型的 GitLab 事件的复选框,以将其发送给 Slack 作为通知. 有关完整列表,请参阅[可用于 Slack 通知的触发器](#triggers-available-for-slack-notifications) . 默认情况下,消息将发送到您在[Slack 集成](#slack-configuration)期间配置的通道.
5.  (可选)要将消息发送到其他渠道,多个渠道或作为直接消息:
    *   要将消息发送到频道,请输入 Slack 频道名称,以逗号分隔.
    *   要发送直接消息,请使用在用户的 Slack 个人资料中找到的会员 ID.**注意:**不支持用户名和私人频道.
6.**Webhook 中** ,提供您从[Slack 集成](#slack-configuration)步骤复制的**Webhook** URL.
7.  (可选)在**Username 中** ,提供发送通知的 Slack 机器人的用户名.
8.  选择**仅通知断开的管道**复选框以仅通知失败.
9.**要通知****分支中**选择框,选择要为其发送通知的分支类型.
10.  Click **测试设置并保存更改**.

您的 Slack 团队现在将开始按照配置接收 GitLab 事件通知.

### Triggers available for Slack notifications[](#triggers-available-for-slack-notifications "Permalink")

以下触发器可用于 Slack 通知:

*   **推送** :由推送到存储库触发.
*   **问题** :在创建,更新或关闭问题时触发.
*   **机密问题** :创建,更新或关闭机密问题时触发.
*   **合并请求** :在创建,更新或合并合并请求时触发.
*   **注意** :有人添加评论时触发.
*   **机密注释** :当有人添加机密注释时触发.
*   **标签推送** :将新标签推送到存储库时触发.
*   **管道** :管道状态更改时触发.
*   **Wiki 页面** :在创建或更新 Wiki 页面时触发.
*   **部署** :在部署完成时触发.
*   **警报** :记录新的唯一警报时触发.

## Troubleshooting[](#troubleshooting "Permalink")

如果您的 Slack 集成无法正常工作,请通过在[Sidekiq 日志中](../../../administration/logs.html#sidekiqlog)搜索与 Slack 服务相关的错误来开始故障排除.

### Something went wrong on our end[](#something-went-wrong-on-our-end "Permalink")

这是 GitLab UI 中显示的一般错误,其本身并没有多大意义. 查看[日志](../../../administration/logs.html#productionlog)以查找错误消息,并从那里继续进行故障排除.

### `certificate verify failed`[](#certificate-verify-failed "Permalink")

您可能会在 Sidekiq 日志中看到类似于以下内容的条目:

```
2019-01-10_13:22:08.42572 2019-01-10T13:22:08.425Z 6877 TID-abcdefg ProjectServiceWorker JID-3bade5fb3dd47a85db6d78c5 ERROR: {:class=>"ProjectServiceWorker", :service_class=>"SlackService", :message=>"SSL_connect returned=1 errno=0 state=error: certificate verify failed"} 
```

GitLab 与 Slack 通信或 GitLab 与自身通信可能是一个问题. 前者的可能性较小,因为 Slack 的安全证书*希望*始终受到信任. 我们可以使用下面的 rails 控制台脚本来确定要处理的内容.

```
# start a rails console:
sudo gitlab-rails console -e production

# or for source installs:
bundle exec rails console -e production 
```

```
# run this in the Rails console
# replace <SLACK URL> with your actual Slack URL
result = Net::HTTP.get(URI('https://<SLACK URL>'));0

# replace <GITLAB URL> with your actual GitLab URL
result = Net::HTTP.get(URI('https://<GITLAB URL>'));0 
```

如果 GitLab 不信任自身的 HTTPS 连接,则可能需要[将证书添加到 GitLab 的受信任证书中](https://docs.gitlab.com/omnibus/settings/ssl.html) .

如果 GitLab 不信任与 Slack 的连接,则 GitLab OpenSSL 信任存储不正确. 一些典型的原因:使用`gitlab_rails['env'] = {"SSL_CERT_FILE" => "/path/to/file.pem"}`覆盖信任库,或不小心修改了默认的 CA 捆绑包`/opt/gitlab/embedded/ssl/certs/cacert.pem` .