💬

GitHub Actions で tfcmt を使って terraform plan の結果をコメントに貼り付ける

2022/09/10に公開
2

tfcmt を業務で使ってみたらめちゃくちゃ良かったので、 GitHub Actions で動かす例を備忘録として残しておきます。

検証環境

  • tfcmt v3.4.1
  • terraform v1.2.9

tfcmt とは?

https://github.com/suzuki-shunsuke/tfcmt

tfcmt は terraform planterraform apply の結果を GitHub にコメントとして通知する CLI ツールです。
CI のログを見にいかなくとも GitHub のコメント上で結果を確認することができます。
且つ、見やすい形式でコメントしてくれるので素のログよりも結果が分かりやすいです。

詳しくは開発者の方が書いている紹介記事や公式ドキュメントをご参照ください。

https://zenn.dev/shunsuke_suzuki/articles/improve-terraform-cicd-with-tfcmt
https://suzuki-shunsuke.github.io/tfcmt/

GitHub Actions で tfcmt を実行するサンプルコード

https://github.com/koki-develop/tfcmt-on-gh-actions-example

こんな感じ。
push 時に関連する PR が存在する場合は PR にコメントが作成され、 PR が存在しない場合は Commit に対してコメントが作成されます。
また、 PR がマージされたときにも Merge Commit に対してではなく Merge された PR に対してコメントが作成されます。

.github/workflows/main.yml
name: terraform plan

on:
  push:
  pull_request:

jobs:
  terraform_plan:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: setup terraform
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: 1.2.9

      - name: setup tfcmt
        env:
          TFCMT_VERSION: v3.4.1
        run: |
          wget "https://github.com/suzuki-shunsuke/tfcmt/releases/download/${TFCMT_VERSION}/tfcmt_linux_amd64.tar.gz" -O /tmp/tfcmt.tar.gz
          tar xzf /tmp/tfcmt.tar.gz -C /tmp
          mv /tmp/tfcmt /usr/local/bin
          tfcmt --version

      - run: terraform init
      - name: terraform plan
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: tfcmt plan -patch -- terraform plan -no-color -input=false
  • tfcmt に使用される GITHUB_TOKEN 環境変数には自動的に作成される GITHUB_TOKEN シークレットを使えるため、自分でアクセストークンを発行する必要はありません。
    • GITHUB_TOKEN シークレットについての詳細はこちらをご参照ください。
  • tfcmt 実行時に -patch オプションを設定して、既存のコメントがある場合は更新するようにしています。
    • -path オプションについての詳細はこちらをご参照ください。

実際に作成されるコメントはこんな感じです。


PR に作成されたコメント

その他

tfcmt では設定ファイルを作成することでより細かい設定を行うことも可能です。
詳しくは下記ドキュメントをご参照ください。

https://suzuki-shunsuke.github.io/tfcmt/config

また、 GitHub Actions で tfcmt を含めた様々なツールを利用したいい感じの Terraform Workflow を構築するための tfaction というアクションも公開されています。
詳しくは下記ドキュメントをご参照ください。

https://zenn.dev/shunsuke_suzuki/articles/tfaction-introduction
https://suzuki-shunsuke.github.io/tfaction/docs/

まとめ

めちゃくちゃ良いです。

Discussion

Shunsuke SuzukiShunsuke Suzuki

こんにちは。 tfcmt, tfaction を開発している者です。ご紹介いただきありがとうございます。

push 時には Commit に対してコメントが作成され

こちらに関して補足させてください。

tfcmt v3.4.0 以降では、 commit に関連した Pull Request を自動で取得し、 Commit ではなく Pull Request にコメントをするようになっているはずです。
ただし、まだ Pull Request が open されていないなどの理由で関連する Pull Request が存在しない場合は Commit にコメントをします。

https://github.com/suzuki-shunsuke/tfcmt/releases/tag/v3.4.0

また、 Pull Request の Merge Commit に対しても、 Merge Commit ではなく Merge された Pull Request にコメントをするはずです。


あとこれは宣伝ですが、 tfcmt などの CLI ツールのインストールには aqua というツールを使うと、 YAML で宣言的に管理できるようになり、 Renovate で自動 update が簡単に出来、 CI だけでなくローカルにもインストールできるといったメリットがあって便利なので、よければどうぞ。

https://zenn.dev/shunsuke_suzuki/articles/what-is-aqua

kokikoki

ありがとうございます!
ご本人様に読んでいただけてめっちゃ嬉しいです!

commit に関連した Pull Request を自動で取得し、 Commit ではなく Pull Request にコメントをするようになっているはずです。

おっしゃる通りです。
PR 作成・更新時には...更新時 の方に含めたつもりだったのですが、たしかに表現が不適切というかわかりづらかったですね。
修正しました!

Pull Request の Merge Commit に対しても、 Merge Commit ではなく Merge された Pull Request にコメントをするはずです。

この挙動は知りませんでした、便利!
こちらも合わせて追記させていただきました。

あとこれは宣伝ですが、

存じ上げております!! ( tfaction ではどうやって tfcmt インストールするんだろうと思ってソース読み漁ったときに見つけてふむふむとなっておりました )
かなりイケてる感じがするので機会があれば触ってみようと思います、ありがとうございます!