Slack通知サービス

Slack Notifications Serviceを使うと、GitLabプロジェクトが既存のSlackチームにイベント(イシューの作成など)を通知として送ることができます。 Slack通知を設定するには、SlackとGitLabの両方で設定を変更する必要があります。

注:Slackのスラッシュコマンドを使ってSlack内でGitLabを操作することもできます。 これは別途設定したSlackのスラッシュコマンドです。

スラックの設定

  1. Slack チームにサインインし、新しい Incoming Webhooks 設定を開始します。
  2. デフォルトで通知を送信するSlackチャンネルを選択します。Add Incoming WebHooksインテグレーションボタンをクリックして、設定を追加します。
  3. 後で GitLab の設定で使う Webhook URLをコピーします。

GitLabの設定

  1. プロジェクトのページを開き、 Settings > Integrationsでプロジェクトのインテグレーションページに移動します。
  2. Slack通知インテグレーションを選択して設定します。
  3. インテグレーションを有効にする」をクリックします。
  4. Triggerで、Slackに通知するGitLabイベントの種類ごとにチェックボックスを選択します。 完全なリストは、Slack通知に利用できるトリガーを参照してください。 デフォルトでは、メッセージはSlackインテグレーション中に設定したチャンネルに送信されます。
  5. (オプション)別のチャネル、複数のチャネル、またはダイレクト・メッセージとしてメッセージを送信します:
    • チャンネルにメッセージを送信するには、Slackチャンネル名をカンマ区切りで入力します。
    • ダイレクトメッセージを送信するには、ユーザーのSlackプロフィールにあるメンバーIDを使用します。
    注:ユーザー名と非公開チャンネルはサポートされていません。
  6. WebhookにSlackインテグレーションステップでコピーしたwebhook URLを入力します。
  7. (オプション)ユーザー名には、通知を送信するSlackボットのユーザー名を入力します。
  8. 故障したパイプラインにのみ通知する] チェックボックスを選択すると、故障時のみ通知されます。
  9. 通知するブランチのセレクトボックスで、通知を送信するブランチの種類を選択します。
  10. Test settingsをクリックし、変更を保存します。

これであなたのSlackチームは設定通りにGitLabのイベント通知を受け取るようになります。

Slack通知で利用可能なトリガー

Slackの通知には以下のトリガーが利用できます:

  • Push: リポジトリへのプッシュがトリガー。
  • イシュー:イシューが作成、更新、クローズされたときにトリガーされます。
  • 機密issue:機密issueが作成、更新、クローズされたときにトリガされます。
  • マージリクエスト: マージリクエストが作成、更新、マージされたときにトリガーされます。
  • :誰かがコメントを追加するとトリガーされます。
  • 機密メモ:誰かが機密メモを追加するとトリガーされます。
  • タグのプッシュ: 新しいタグがリポジトリにプッシュされたときにトリガーされます。
  • パイプライン:パイプラインのステータスが変更されたときにトリガーされます。
  • Wiki page: Wikiページが作成または更新されたときにトリガーされます。
  • デプロイ:デプロイが完了したときにトリガーされます。
  • アラート:新しいユニークなアラートが記録されたときにトリガーされます。

トラブルシューティング

Slackインテグレーションが機能していない場合は、SidekiqのログからSlackサービスに関連するエラーを検索し、トラブルシューティングを開始してください。

私たちの側で何かが間違っていました

これはGitLab UIに表示される一般的なエラーで、それだけではあまり意味がありません。ログをレビューしてエラーメッセージを見つけ、そこからトラブルシューティングを続けてください。

certificate verify failed

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の信頼できる証明書に追加する必要があるかもしれません。

GitLabがSlackへの接続を信頼しない場合、GitLab OpenSSLのトラストストアが正しくない可能性があります。典型的な原因としては、トラストストアをgitlab_rails['env'] = {"SSL_CERT_FILE" => "/path/to/file.pem"}で上書きしたり、デフォルトのCAバンドル/opt/gitlab/embedded/ssl/certs/cacert.pemを誤って変更したことが考えられます。