2022.07.20  

【Github】Actionsで実行したコマンド結果をプルリクに投稿したい

Git,  Terraform    

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を利用しています。

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信