Slack通知(非推奨)
Slack通知インテグレーションは、GitLabプロジェクトが既存のSlackチームにイベント(イシュー作成など)を通知として送信できるようにします。Slack通知を設定するには、SlackとGitLabの両方で設定変更が必要です。
Slackのスラッシュコマンドを使ってSlackからGitLabを操作することもできます。スラッシュコマンドは別に設定します。
Slackの設定
- Slack チームにサインインし、新しい Incoming Webhooks 設定を開始します。
- デフォルトで通知を送信する Slack チャンネルを特定します。Add Incoming WebHooks integrationを選択して設定を追加します。
- 後で GitLab を設定するときに使用するWebhook URLをコピーします。
GitLab の設定
GitLab 15.9でSlackチャンネルをイベントごとに10に制限するように変更しました。
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 設定]>[インテグレーション]を選択します。
- Slack通知を選択します。
- インテグレーションを有効にする]で、[アクティブ]チェックボックスを選択します。
- Triggerセクションで、通知としてSlackに送信するGitLabイベントの種類ごとにチェックボックスを選択します。完全なリストについては、Slack通知のトリガーをご覧ください。デフォルトでは、メッセージはSlack設定中に設定したチャンネルに送信されます。
- オプションです。別のチャンネル、複数のチャンネル、またはダイレクトメッセージとしてメッセージを送信するには:
- チャンネルにメッセージを送るには、Slackチャンネル名をカンマ区切りで入力してください。
- ダイレクトメッセージを送信するには、ユーザーのSlackプロファイルにあるメンバーIDを使用します。
- Webhookに、Slackの設定ステップでコピーしたWebhookのURLを入力します。
- オプションです。Usernameに、通知を送信するSlackボットのユーザー名を入力します。
- Notify only broken pipelinesチェックボックスを選択して、失敗したパイプラインのみに通知するようにします。
- 通知を送信するブランチ] ドロップダウン リストで、通知を送信するブランチの種類を選択します。
- 通知を受けるラベル]フィールドを空白のままにしてすべての通知を受けるか、通知を受けるためにイシューまたはマージリクエストに必要なラベルを追加します。
- オプション。Test settingsを選択します。
- 変更を保存を選択します。
これで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のセキュリティ証明書は常に信頼されるべきです。
どちらの問題がイシューの原因かを見るには、以下のリンクをクリックしてください:
-
Railsコンソールを起動します:
sudo gitlab-rails console -e production # for source installs: bundle exec rails console -e production
-
以下のコマンドを実行してください:
# 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コンソールセッションを起動して、次のようなスクリプトを使用します:
# 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