GithubActionsで実行したterraform plan
コマンドの実行結果をプルリクエストに投稿する機能を作ったのでメモ書きします。
投稿した結果は記述量が多いため、ワンクリックで内容の表示、非表示を行えるようにしてあります。
実装
コードは次のようになります。
terraform planの結果をプルリクに投稿している処理は一番下の箇所となります。
on:
pull_request:
branches:
- 'master'
types: [opened,synchronize]
env:
TF_VERSION: 1.1.2
# OIDCAロールはAWSで事前に作成しておく
OIDC_AWS_ROLE: arn:aws:iam::111222333444:role/GitHubActionsRole
AWS_DEFAULT_REGION: ap-northeast-1
permissions:
id-token: write
contents: read
jobs:
terraform-plan:
environment:
name: aws-env # GithubのSettings --> Environments で作成しておいた環境名
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
# GithubAcitonのコンテナにコードをチェックアウトする
- name: Checkout Code
uses: actions/checkout@v2
# terraform利用準備
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: ${{ env.TF_VERSION }}
# AWS環境への接続情報を取得
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: ${{ env.AWS_DEFAULT_REGION }}
role-to-assume: ${{ env.OIDC_AWS_ROLE }}
# terraform initの実行
- name: Exec Terraform init
run: |
terraform init
# terraform planを行なって結果をプルリクに投稿する準備
- name: Exec Terraform plan
run: |
echo '<h2>terraform plan 実行結果</h2>' > outputs
echo '<pre><code><details><summary>詳細</summary>' >> outputs
pwd; terraform plan -no-color >> outputs
echo '</details></code></pre>' >> outputs
# 結果をプルリクに投稿する処理
- name: Post Comments
env:
# GithubのSettings --> EnvironmentsにPERSONAL_ACCESS_TOKENを登録しておく
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
URL: ${{ github.event.pull_request.html_url }}
run: |
gh pr comment -F ./outputs "${URL}"
解説
# terraform planを行なって結果をプルリクに投稿する準備
- name: Exec Terraform plan
run: |
echo '<h2>terraform plan 実行結果</h2>' > outputs
echo '<pre><code><details><summary>詳細</summary>' >> outputs
pwd; terraform plan -no-color >> outputs
echo '</details></code></pre>' >> outputs
この部分でプルリクエストに投稿内容を作成、保存しています。
名前はなんでも良いのですが、今回はoutputs
ファイルを作成し内容を保存しています。
プルリクエストの投稿欄ではhtmlタグが利用できるので、視認性を上げるため色々とタグを仕込んでいます。
<h2>
はプルリクエストコメントのタイトルが欲しい時に入れます。
<pre><code>
はコードを見やすくするためのタグです。
<details><summary>[概要]</summary>[メッセージ]<details>
は、[メッセージ]の内容を表示、非表示できるようにするタグです。[概要]の部分はメッセージ非表示時に表示されるメッセージ概要を設定できます。
# 結果をプルリクに投稿する処理
- name: Post Comments
env:
# GithubのSettings --> EnvironmentsにPERSONAL_ACCESS_TOKENを登録しておく
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
URL: ${{ github.event.pull_request.html_url }}
run: |
gh pr comment -F ./outputs "${URL}"
GITHUB_TOKEN
にはgithubユーザーのパーソナルアクセストークンを設定する必要があります。
作成の仕方については下記ページに記載があります。
https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
発行したパーソナルアクセストークンはベタ書きせず、GithubのSettings --> Environmentsで変数に登録します。登録したトークンは${{ secrets.変数名 }}
で呼び出すことができます。
${{ github.event.pull_request.html_url }}
は、作成したプルリクページのURLを取得してくれます。
gh pr comment -F ./outputs "${URL}"
はGithubのURLで指定したページにコメントを送信するコマンドです。-F
はコメントの内容をファイルから指定するという意味で、今回はoutputs
を利用しています。