Slack通知(非推奨)

caution
この機能はGitLab 15.9で非推奨となり、17.0で削除される予定です。代わりにGitLab for Slack アプリをご利用ください。この変更はブレークチェンジです。GitLab for Slackアプリのセルフマネージドインスタンスへの対応予定については、エピック1211をご覧ください。

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

Slackのスラッシュコマンドを使ってSlackからGitLabを操作することもできます。スラッシュコマンドは別に設定します。

Slackの設定

  1. Slack チームにサインインし、新しい Incoming Webhooks 設定を開始します。
  2. デフォルトで通知を送信する Slack チャンネルを特定します。Add Incoming WebHooks integrationを選択して設定を追加します。
  3. 後で GitLab を設定するときに使用するWebhook URLをコピーします。

GitLab の設定

GitLab 15.9でSlackチャンネルをイベントごとに10に制限するように変更しました。

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. 設定]>[インテグレーション]を選択します。
  3. Slack通知を選択します。
  4. インテグレーションを有効にする]で、[アクティブ]チェックボックスを選択します。
  5. Triggerセクションで、通知としてSlackに送信するGitLabイベントの種類ごとにチェックボックスを選択します。完全なリストについては、Slack通知のトリガーをご覧ください。デフォルトでは、メッセージはSlack設定中に設定したチャンネルに送信されます。
  6. オプションです。別のチャンネル、複数のチャンネル、またはダイレクトメッセージとしてメッセージを送信するには:
    • チャンネルにメッセージを送るには、Slackチャンネル名をカンマ区切りで入力してください。
    • ダイレクトメッセージを送信するには、ユーザーのSlackプロファイルにあるメンバーIDを使用します。
  7. WebhookにSlackの設定ステップでコピーしたWebhookのURLを入力します。
  8. オプションです。Usernameに、通知を送信するSlackボットのユーザー名を入力します。
  9. Notify only broken pipelinesチェックボックスを選択して、失敗したパイプラインのみに通知するようにします。
  10. 通知を送信するブランチ] ドロップダウン リストで、通知を送信するブランチの種類を選択します。
  11. 通知を受けるラベル]フィールドを空白のままにしてすべての通知を受けるか、通知を受けるためにイシューまたはマージリクエストに必要なラベルを追加します。
  12. オプション。Test settingsを選択します。
  13. 変更を保存を選択します。

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

Slack通知のトリガー

Slack通知では以下のトリガーを使用できます:

トリガー名トリガーイベント
プッシュリポジトリにプッシュします。
イシューイシューの作成、クローズ、再開。
インシデントインシデントが作成、クローズ、または再開されます。
機密イシュー機密イシューが作成、クローズ、または再開されます。
マージリクエストマージリクエストが作成、マージ、クローズ、再開されました。
注意コメントが追加されます。
コンフィデンシャルノートイシューに関する内部メモやコメントが追加されます。
タグプッシュ新しいタグがリポジトリにプッシュされるか、削除されます。
パイプラインパイプラインのステータスが変更されました。
Wikiページ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 Integrations::ExecuteWorker JID-3bade5fb3dd47a85db6d78c5 ERROR: {:class=>"Integrations::ExecuteWorker :integration_class=>"SlackService", :message=>"SSL_connect returned=1 errno=0 state=error: certificate verify failed"}

このイシューは、GitLabとSlackの通信に問題があるか、GitLab自身との通信に問題がある場合に発生します。前者は可能性が低く、Slackのセキュリティ証明書は常に信頼されるべきです。

どちらの問題がイシューの原因かを見るには、以下のリンクをクリックしてください:

  1. Railsコンソールを起動します:

    sudo gitlab-rails console -e production
       
    # for source installs:
    bundle exec rails console -e production
    
  2. 以下のコマンドを実行してください:

    # 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 trusted certificatesに追加してください。

GitLabがSlackへの接続を信頼しない場合、GitLab OpenSSLのトラストストアが正しくありません。典型的な原因は以下の通りです:

  • gitlab_rails['env'] = {"SSL_CERT_FILE" => "/path/to/file.pem"}でトラストストアを上書きしている場合。
  • デフォルトの CA バンドル/opt/gitlab/embedded/ssl/certs/cacert.pemを誤って変更。

Slack Notificationインテグレーションを無効にするための一括更新

Slackインテグレーションを有効にしているすべてのプロジェクトの通知を無効にするには、Railsコンソールセッションを起動して、次のようなスクリプトを使用します:

caution
データを変更するコマンドは、正しく実行しなかったり適切な条件下で実行しなかったりすると、ダメージを与える可能性があります。必ず最初にテスト環境でコマンドを実行し、リストアできるようにバックアップインスタンスを用意してください。
# Grab all projects that have the Slack notifications enabled
p = Project.find_by_sql("SELECT p.id FROM projects p LEFT JOIN integrations s ON p.id = s.project_id WHERE s.type_new = 'Slack' AND s.active = true")

# Disable the integration on each of the projects that were found.
p.each do |project|
  project.slack_integration.update!(:active, false)
end