# 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` .