正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Slack通知(非推奨)

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

この機能は、GitLab 15.9で非推奨となり、19.0で削除される予定です。代わりにGitLab for Slackアプリを使用してください。これは破壊的な変更です。

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

SlackからGitLabを制御するために、Slackスラッシュコマンドを使用することもできます。スラッシュコマンドは個別に構成されます。

Slackの設定

  1. Slackチームにサインインし、新しい受信WebHooks設定を開始します。
  2. 通知の送信先となるSlackチャンネルをデフォルトで指定します。Add Incoming WebHooks integration(受信WebHooksインテグレーションの追加]を選択)して、設定を追加します。
  3. WebhookのURLをコピーして、GitLabを設定する際に使用します。

GitLabを設定する

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 設定 > インテグレーションを選択します。
  3. Slack notifications(Slack通知)を選択します。
  4. インテグレーションを有効にするで、有効チェックボックスをオンにします。
  5. トリガーセクションで、Slackに通知として送信するGitLabイベントの各タイプのチェックボックスをオンにします。完全なリストについては、Slack通知のトリガーを参照してください。デフォルトでは、メッセージはSlackの設定で構成したチャンネルに送信されます。
  6. オプション。別のチャンネル、複数のチャンネル、またはダイレクトメッセージとしてメッセージを送信するには:
    • チャンネルにメッセージを送信するには、カンマで区切ってSlackチャンネル名を入力します。
    • ダイレクトメッセージを送信するには、ユーザーのSlackプロファイルにあるメンバーIDを使用します。
  7. Webhookに、Slackの設定手順でコピーしたWebhookのURLを入力します。
  8. オプション。ユーザー名に、通知を送信するSlackボットのユーザー名を入力します。
  9. 壊れたパイプラインのみ通知チェックボックスをオンにして、失敗した場合のみ通知します。
  10. 通知を送信するブランチドロップダウンリストで、通知を送信するブランチの種類を選択します。
  11. すべての通知を取得するには、Labels to be notified(通知するラベル)フィールドを空白のままにするか、イシューまたはマージリクエストが通知をトリガーするために必要なラベルを追加します。
  12. オプション。テスト設定を選択します。
  13. 変更を保存を選択します。

Slackチームは、構成されたGitLabイベント通知を受信するようになります。

Slack通知のトリガー

Slack通知には、次のトリガーを使用できます:

トリガー名トリガーイベント
プッシュリポジトリへのプッシュ。
イシューイシューが作成、クローズ、または再度オープンされます。
インシデントインシデントが作成、クローズ、または再度オープンされます。
非公開のイシュー機密情報イシューが作成、クローズ、または再度オープンされます。
マージリクエストマージリクエストが作成、マージ、クローズ、または再度オープンされます。
メモコメントが追加されます。
非公開メモ機密情報イシューに関する内部メモまたはコメントが追加されます。
タグのプッシュタグがリポジトリにプッシュされるか、削除されます。
パイプラインパイプラインのステータスが変更されました。
WikiページWikiページが作成または更新されます。
デプロイデプロイが開始または完了した。
アラート新しい一意のアラートが記録されます。
Group mention in public(パブリックでのグループメンション)公開コンテキストでグループがメンションされます。
Group mention in private(プライベートでのグループメンション)グループが機密コンテキストで言及されている。
脆弱性新しい一意の脆弱性が記録される。

グループメンションの通知をトリガーする

グループメンションの通知イベントをトリガーするには、次の場所で@<group_name>を使用します:

  • イシューとマージリクエストの説明
  • イシュー、マージリクエスト、コミットのコメント

通知は、言及が行われたリソース(たとえば、マージリクエスト)を表示する権限がすべての直接グループメンバーにある場合にのみ、トリガーされます。1つのイベントで最大3つのグループにのみ通知が送信されます。

トラブルシューティング

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

エラー: Something went wrong on our end

この一般的なエラーメッセージが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の信頼できる証明書に追加します。

GitLabがSlackへの接続を信頼しない場合、GitLab OpenSSLトラストストアが正しくありません。一般的な原因は次のとおりです:

  • gitlab_rails['env'] = {"SSL_CERT_FILE" => "/path/to/file.pem"}でトラストストアをオーバーライドする。
  • デフォルトのCAバンドル/opt/gitlab/embedded/ssl/certs/cacert.pemを誤って変更しました。

Slack通知インテグレーションを無効にする一括更新

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

データを変更するコマンドは、正しく実行されなかった場合、または適切な条件下で実行されなかった場合、損害を与える可能性があります。最初にテスト環境でコマンドを実行し、復元できるバックアップインスタンスを準備してください。

# 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 = 'Integrations::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