@takepepeさんの歯車本を見ながらGitHub Actionsにreg-suitを連携してみる
この時、本ではStorycapの保存先をS3にしているが、今回はGCPのCloud Storageを使う点が異なるのでつまった点などをメモ
本に書かれているvrt.yamlのAWSのクレデンシャルのところをGCP用に変える
GCPの認証の有効化は以下を参考にして行う
認証方法はいくつか方法があり、上記のドキュメントでは GCPの Workload Identity Federation
を使用して認証することが推奨されている
ただ、ちょっと今回はOIDC
の理解ができていなかったのでService Account Key JSON
を使う方法を採用する
手順
- Google Cloud サービス アカウントを作成し、IAM 権限を付与する
→作成したサービス アカウントに「サービス アカウント トークン作成者」の権限と「Storage オブジェクト管理者」の権限を付与する - 有効期間の長いサービスアカウントキーJSONファイルをエクスポートする
- サービスアカウントキー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/