
今回は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をはじめることができるのは魅力的ですね。
最後までご覧いただきありがとうございます。