UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【reg-suit】GitHub Actions から Google Cloud に認証できるようにする

@takepepeさんの歯車本を見ながらGitHub Actionsにreg-suitを連携してみる

この時、本ではStorycapの保存先をS3にしているが、今回はGCPのCloud Storageを使う点が異なるのでつまった点などをメモ

本に書かれているvrt.yamlAWSのクレデンシャルのところをGCP用に変える

GCPの認証の有効化は以下を参考にして行う

github.com

認証方法はいくつか方法があり、上記のドキュメントでは GCPWorkload Identity Federationを使用して認証することが推奨されている

ただ、ちょっと今回はOIDCの理解ができていなかったのでService Account Key JSONを使う方法を採用する

手順

  1. Google Cloud サービス アカウントを作成し、IAM 権限を付与する
    →作成したサービス アカウントに「サービス アカウント トークン作成者」の権限と「Storage オブジェクト管理者」の権限を付与する
  2. 有効期間の長いサービスアカウントキーJSONファイルをエクスポートする
  3. サービスアカウントキーJSONファイルを GitHub シークレットにアップロードする

ドキュメントにあったスニペットはこう

job:
  job_id:
    steps:
    - id: 'auth'
      uses: 'google-github-actions/auth@v1'
      with:
        credentials_json: '${{ secrets.GCP_CREDENTIALS }}'

    - name: 'Set up Cloud SDK'
      uses: 'google-github-actions/setup-gcloud@v1'

    - name: 'Use gcloud CLI'
      run: 'gcloud info'

credentials_json にはサービスアカウントキーJSONファイルを base64 したものを GitHub の シークレットにアップロードする

※ドキュメントだと「圧縮しろ」としか書いてなかったので、こちらを参考にbase64化した

macの場合は以下のコマンドでクリップボードbase64したものが保存される

cat service-account-key.json | base64 | pbcopy

yamlファイルを完成させる

上記はスニペットであり、これだけでうまく動かない

ドキュメントをよく見ると前提条件に「アクションの前にactions/checkout@v3ステップを実行する必要がある」とあるのでこれを記述する

actions/checkout@v3はジョブで利用するリポジトリをチェックアウトするための記述でGCPに関係なく必要

結果的に以下のような記述で無事動いた

name: Run VRT

on: push

env:
  REG_NOTIFY_CLIENT_ID: ${{ secrets.REG_NOTIFY_CLIENT_ID }}
  BUCKET_NAME: ${{ secrets.BUCKET_NAME }}

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v3
        with:
          node-version: 16

      - id: auth
        uses: google-github-actions/auth@v1
        with:
          credentials_json: ${{ secrets.GCP_CREDENTIALS }}
      - name: Set up Cloud SDK
        uses: google-github-actions/setup-gcloud@v1
        with:
          project_id: ${{ secrets.PROJECT_ID }}
      - name: Use gcloud CLI
        run: gcloud info

      - name: Install dependencies
        run: npm ci
      - name: Build Storybook
        run: npm run storybook:build
      - name: Run Storycap
        run: npm run vrt:snapshot
      - name: Run reg-suit
        run: npm run vrt:run

他参考

https://blog.lacolaco.net/2022/07/github-actions-oidc-google-cloud/

https://cloud.google.com/blog/ja/products/identity-security/enabling-keyless-authentication-from-github-actions