Slack通知サービス
Slack Notifications Serviceを使うと、GitLabプロジェクトが既存のSlackチームにイベント(イシューの作成など)を通知として送ることができます。 Slack通知を設定するには、SlackとGitLabの両方で設定を変更する必要があります。
スラックの設定
- Slack チームにサインインし、新しい Incoming Webhooks 設定を開始します。
- デフォルトで通知を送信するSlackチャンネルを選択します。Add Incoming WebHooksインテグレーションボタンをクリックして、設定を追加します。
- 後で GitLab の設定で使う Webhook URLをコピーします。
GitLabの設定
- プロジェクトのページを開き、 Settings > Integrationsでプロジェクトのインテグレーションページに移動します。
- Slack通知インテグレーションを選択して設定します。
- インテグレーションを有効にする」をクリックします。
- Triggerで、Slackに通知するGitLabイベントの種類ごとにチェックボックスを選択します。 完全なリストは、Slack通知に利用できるトリガーを参照してください。 デフォルトでは、メッセージはSlackインテグレーション中に設定したチャンネルに送信されます。
- (オプション)別のチャネル、複数のチャネル、またはダイレクト・メッセージとしてメッセージを送信します:
- チャンネルにメッセージを送信するには、Slackチャンネル名をカンマ区切りで入力します。
- ダイレクトメッセージを送信するには、ユーザーのSlackプロフィールにあるメンバーIDを使用します。
注:ユーザー名と非公開チャンネルはサポートされていません。 - Webhookに、Slackインテグレーションステップでコピーしたwebhook URLを入力します。
- (オプション)ユーザー名には、通知を送信するSlackボットのユーザー名を入力します。
- 故障したパイプラインにのみ通知する] チェックボックスを選択すると、故障時のみ通知されます。
- 通知するブランチのセレクトボックスで、通知を送信するブランチの種類を選択します。
- 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
を誤って変更したことが考えられます。