GitLab CI/CDでtfnotifyを使う
mercari/tfnotifyがv0.3.2でGitLab CI/CDに対応したので試してみました。個人的には待望の機能追加です。tfnotifyを利用すると、GitLab CI/CDでTerraformを実行した結果をMerge Requestのコメントに反映できます。いちいちジョブの結果を見に行かなくてよいので便利です。
Getting Started
以下のステップでGitLabとtfnotifyを設定します。
- Personal Access Tokenの設定
- tfnotifyの設定
- GitLab CI/CDの設定
1. Personal Access Tokenの設定
tfnotifyはGitLab APIを利用してCommitにコメントを書き込みます。tfnotifyがGitLab APIにアクセスできるように、環境変数でPersonal Access Tokenを渡します。
User Settingsを開き、新しいPersonal Access Tokenを生成します。スコープはapiのみでよいです。
リポジトリのCI/CD Settingsを開き、以下の環境変数を追加します。
2. tfnotifyの設定
.tfnotify.yaml
を作成します。ここでは、tfnotifyのREADMEに記載されている設定例をそのまま利用します。
ci: gitlabci notifier: gitlab: token: $GITLAB_TOKEN base_url: https://gitlab.example.com repository: owner: OWNER name: NAME terraform: fmt: template: | {{ .Title }} {{ .Message }} {{ .Result }} {{ .Body }} plan: template: | {{ .Title }} <sup>[CI link]( {{ .Link }} )</sup> {{ .Message }} {{if .Result}} <pre><code> {{ .Result }} </pre></code> {{end}} <details><summary>Details (Click me)</summary> <pre><code> {{ .Body }} </pre></code></details> apply: template: | {{ .Title }} {{ .Message }} {{if .Result}} <pre><code> {{ .Result }} </pre></code> {{end}} <details><summary>Details (Click me)</summary> <pre><code> {{ .Body }} </pre></code></details>
https://gitlab.com を利用している場合は base_url
は設定しなくてもOKです。OWNER, NAMEはリポジトリのパスに合わせて修正してください。
3. GitLab CI/CDの設定
terraformと同時にtfnotifyを実行するように .gitlab-ci.yml
を書き換えます。planの例を下記に示します。
stages: - build terraform_plan: stage: build image: name: hashicorp/terraform:0.12.8 entrypoint: - /usr/bin/env script: # Install tfnotify - apk add --upgrade curl - curl -fL -o /tmp/tfnotify.tar.gz https://github.com/mercari/tfnotify/releases/download/v0.3.3/tfnotify_0.3.3_linux_amd64.tar.gz - tar -C /usr/bin -xzf /tmp/tfnotify.tar.gz # Run Terraform - cd terraform/ - terraform --version - terraform init - terraform fmt | tfnotify fmt - terraform plan -out=plan.tfplan | tfnotify plan artifacts: name: plan paths: - terraform/plan.tfplan cache: paths: - terraform/.terraform
tfnotifyはGitHub Releasesのバイナリを利用します。hashicorp/terraform
イメージにはcurlコマンドが含まれていないため、apkコマンドでcurlをインストールする必要があります。デフォルトではカレントディレクトリにある .tfnotify.yaml
を読みに行くので、カレントディレクトリに注意してください。
動作確認
上記の変更をコミットし、新しいMerge Requestを作成します。うまくいけば、Merge Requestにコメントが書き込まれます。