1. 概要

私たちのチームがDevOpsプラクティスを担当する場合、ビルドやその他の自動化されたジョブを監視する必要があることがよくあります。

このチュートリアルでは、2つの一般的なプラットフォーム Jenkins とSlackを構成して連携し、CI/CDパイプラインの実行中に何が起こっているかを説明します。

2. Slackの設定

JenkinsがSlackにメッセージを送信できるようにSlackを設定することから始めましょう。 これを行うには、管理者アカウントを必要とするカスタムSlackアプリを作成します。

Slackでは、アプリケーションを作成し、OAuthトークンを生成します。

  • https://api.slack.comにアクセスしてください
  • 目的のワークスペースにログインします
  • ビルド開始ボタンをクリックします
  • アプリケーションにJenkinsという名前を付け、 CreateAppをクリックします。
  • クリック OAuthと権限
  • ボットトークンスコープセクションで、 chat:writeスコープを追加します
  • ワークスペースにアプリをインストールボタンをクリックします
  • 承認ボタンをクリックします

これが完了すると、概要画面が表示されます。

ここで、OAuthトークンに注意する必要があります。後でJenkinsを構成するときに必要になります。 これらを機密性の高い資格情報として扱い、安全に保管する必要があります。

Slackのセットアップを完了するには、使用したいチャネルに新しいJenkinsユーザーを招待する必要があります。 これを行う簡単な方法の1つは、各チャネル内に@文字を使用して新しいユーザーに言及することです。

3. ジェンキンスのセットアップ

Jenkinsを設定するには、管理者アカウントが必要です。

まず、Jenkinsにログインし、Jenkinsの管理>プラグインマネージャーに移動します。

次に、 Available タブで、Slackを検索します。

Slack Notification のチェックボックスを選択し、再起動せずにインストールをクリックしてみましょう。

次に、新しい資格情報を構成する必要があります。 Jenkins>資格情報>システム>グローバル資格情報に移動し、新しいシークレットテキスト資格情報を追加しましょう。

SlackからのOAuthトークンをシークレットフィールドに配置します。 また、後で簡単に識別できるように、これらの資格情報に意味のあるIDと説明を与える必要があります。 Jenkinsクレデンシャルストアは、このトークンを安全に保管できる場所です。

資格情報を保存したら、設定するグローバル構成がもう1つあります。 Jenkins> Manage Jenkins> Configure System で、SlackセクションのCustomslack app botuserチェックボックスをオンにする必要があります。

Jenkinsのセットアップが完了したので、Slackメッセージを送信するようにJenkinsジョブとパイプラインを構成する方法を見てみましょう。

4. 従来のJenkinsジョブの構成

従来のジェンキンスの仕事は通常、目標を達成するために1つ以上のアクションを実行します。 これらは、Jenkinsユーザーインターフェイスを介して構成されます。

従来のジョブをSlackと統合するために、ビルド後のアクションを使用します。

任意のジョブを選択するか、新しいジョブを作成しましょう。 ビルド後のアクションの追加メニューをドロップダウンすると、Slack通知が表示されます。

選択すると、Slack通知アクションに利用できる入力がたくさんあります。 通常、ほとんどのデフォルト値で十分です。 ただし、必要な情報がいくつかあります。

  • メッセージを送信するビルドフェーズ(開始、成功、失敗など)
  • 使用する資格情報の名前–以前に追加した資格情報
  • メッセージを送信するSlackチャネル名またはメンバーID

必要に応じて、Jenkinsジョブに使用されるコミット情報、カスタムメッセージ、カスタムボットアイコンなどの追加フィールドを指定することもできます。

UIを介して設定する場合、テスト接続ボタンを使用して、JenkinsがSlackに到達できることを確認できます。 成功すると、JenkinsユーザーからのSlackチャネルにテストメッセージが表示されます。

メッセージが表示されない場合は、Jenkinsログファイルがトラブルシューティングに役立ちます。 通常、ビルド後のアクションにすべての必須フィールドが含まれていること、OAuthトークンが正しくコピーされていること、Slackを構成したときにトークンに適切なスコープが付与されていることを再確認する必要があります。

5. Jenkinsパイプラインの構成

ジェンキンスパイプラインは、従来の仕事とは異なります。 ビルドを定義するために、ステージに分割された単一のGroovyスクリプトを使用します。 ビルド後のアクションもないため、パイプラインスクリプト自体を使用してSlackメッセージを送信します

次のスニペットは、JenkinsパイプラインからSlackにメッセージを送信します。

slackSend botUser: true, 
  channel: 'builds', 
  color: '#00ff00', 
  message: 'Testing Jekins with Slack', 
  tokenCredentialId: 'slack-token'

従来のJenkinsジョブ設定と同様に、使用するチャネル名とクレデンシャルの名前を指定する必要があります。

Jenkinsパイプラインを介して、ファイルのアップロード、メッセージスレッドなど、さまざまな追加のSlack機能を使用することもできます。

Jenkinsパイプラインを使用することの1つの欠点は、テストボタンがないことです。 Slackとの統合をテストするには、パイプライン全体を実行する必要があります。

最初に設定するときに、動作中にSlackコマンドのみを含む新しいパイプラインを作成できます。

6. 追加の考慮事項

JenkinsとSlackが接続されたので、いくつかの追加の考慮事項があります。

まず、単一のJenkinsインスタンスが複数のSlackワークスペースと通信できます。 カスタムアプリケーションを作成し、ワークスペースごとに新しいトークンを生成するだけです。 各トークンがJenkinsに独自のクレデンシャルとして保存されている限り、さまざまなジョブをさまざまなワークスペースに投稿できます。

これらの同じ方針に沿って、別のJenkinsジョブが別のSlackチャネルに投稿できます。 これは、構成するビルド後のアクションのジョブごとの設定です。 たとえば、ソフトウェアビルドに関連するジョブは、開発専用チャネルに投稿できます。 また、テストまたは本番に関連するジョブは、独自の専用チャネルに移動できます。

最後に、Jenkins用の最も人気のあるSlackプラグインの1つを見てきました。これは、送信するものをきめ細かく制御できますが、さまざまな目的に役立つプラグインが他にもたくさんあります。 たとえば、すべての Jenkinsジョブで同じ通知を送信する場合は、 Global SlackNotifierプラグインの方が適している可能性があります。

7. 結論

この記事では、JenkinsとSlackを統合して、CI/CDパイプラインに関するフィードバックを得る方法を見てきました。

JenkinsプラグインとカスタムSlackアプリケーションを使用して、JenkinsからSlackにメッセージを送信することができました。 これにより、チームはJenkinsのジョブのステータスに気づき、問題に迅速に対処できます。