GitLab ChatOpsを使用しCI/CD ジョブを実行する

今回はGitLab ChatOpsを使用しCI/CD ジョブを実行する方法を紹介していきます。

利用するGitLab環境はFreeのSaaS版を利用しており、無料枠でも実行できる内容となっています。

必要に応じて下記よりサインアップしてみてください。

GitLab ChatOpsとは

GitLab ChatOpsを利用すると、Slackなどのチャットサービス上で任意のコマンドを実行することが可能となります。

実行したいコマンドはGitLab CI/CDのジョブで定義し、Slackのスラッシュコマンドを利用し実行されます。

新規プロジェクトの作成

はじめにGitLab ChatOpsの検証用にchatops-demoというプロジェクトを作成します。

Slack applicationの追加

Slack スラッシュコマンドを利用できるようにインテグレーションを追加します。

[設定]、[インテグレーション]、[Slack application]を選択し追加します。

Slack スラッシュコマンド入力時に指定するプロジェクト名はエイリアスを利用できます。

エイリアス名は下記のように[編集]より変更可能となります。

Slack スラッシュコマンドの確認

Slack チャンネル上でスラッシュコマンドが利用できるか下記を実行し確認します。

/gitlab chatops-demo help

初回実行時は下記のようにGitLabアカウントに接続し承認する必要があります。

承認後再度実行すると下記のようにヘルプが表示されるはずです。

GiLab CI/CDの設定

GitLab CI/CDを利用し、ChatOpsで実行したいジョブを設定していきます。

GitLabプロジェクトへ下記の.gitlab-ci.ymlを追加します。

stages:
  - chatops

hello:
  stage: chatops
  only:
    - chat
  script:
    - echo "Hello GitLab ChatOps"

GitLab ChatOpsの実行確認

Slack チャンネル上で登録したジョブが実行できるか下記を実行し確認します。

/gitlab chatops-demo run hello

CI/CDのパイプラインで対象のジョブが実行されていれば成功です。

Slack スラッシュコマンドで実行した出力結果は、下記のようにわかりづらいので出力内容をカスタマイズしてみます。

出力内容の検証用にcheckip.shという名前でサンプルスクリプトを用意します。

サンプルスクリプトでは、AWS Route53のヘルスチェックIPを出力しています。

#!/usr/bin/env bash

echo "--------- Route53 ヘルスチェックIPの確認 ---------"
curl -s https://ip-ranges.amazonaws.com/ip-ranges.json |
    jq -r '.prefixes[] | select(.service == "ROUTE53_HEALTHCHECKS")'.ip_prefix
echo "-----------------------------------------------"

.gitlab-ci.ymlを下記の内容に更新します。下記ではEXEC_CMDへ作成したサンプルスクリプトを定義し、chat_replyセクションでEXEC_CMDを実行するように指定しています。

stages:
  - chatops

checkip:
  stage: chatops
  only:
    - chat
  image: amazonlinux:2
  script:
    - yum install -y jq
    - EXEC_CMD="bash checkip.sh"
    - echo -e "section_start:$(date +%s):chat_reply\r\033[0K\n\n$($EXEC_CMD)\nsection_end:$(date +%s):chat_reply\r\033[0K"

修正内容をプッシュし、Slack チャンネル上で追加したジョブが実行できるか下記を実行し確認します。

/gitlab chatops-demo run checkip

GitLab CI/CDのパイプラインで該当のジョブが実行され、下記のように表示されれば成功です。

さいごに

GitLab ChatOpsを使用しCI/CD ジョブを実行する方法いかがでしたでしょうか。

簡単にChatOpsをはじめることができるのは魅力的ですね。

最後までご覧いただきありがとうございます。

SNSでもご購読できます。