🐡
GHAからGCRへはOIDCを利用してシンプルに
OpenID Connectを利用するための設定に関しては公式ドキュメントに任せます。
例えばDocker Layerd Cacheを利用してビルドして、成果物のイメージをGoogle Container RegistryにPushしたいみたいなケースを想定してます。
pushされたら実行
name: Build and Publish
on: ["push"]
permissions:
id-token: write
contents: read
Jobsの定義に関してはここから、まずは最初の準備
使うコードと環境の準備です。
jobs:
build_and_push:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
イメージを何度も0からビルドしてると無駄なので、cacheを利用します。
cacheには、actions/cache
を利用しますので、その設定とcacheが存在する場合は、それを取得します。
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
suffixに${{ github.sha }}
とすることで、repositoryに変更があれば新しいキャッシュが作られる事になります。
restore-keysでは、suffix部分を省略して各事で、前方一致でhitする新しいキャッシュを取得します。
ここからOIDCを利用して、GCPのSAのToken情報を取得します。
といっても書くことはシンプルで、下記の通り書くだけです。
裏側の挙動に関しては、公式ドキュメント参照してくださいね。
- id: auth
name: Authenticate to GCP
uses: 'google-github-actions/auth@v0.3.1'
with:
create_credentials_file: true
workload_identity_provider: projects/<YOUR GCP PROJECT NUMBER>/locations/global/workloadIdentityPools/<YOUR POOL NAME>/providers/<YOUR PROVIDER NAME>
service_account: <YOUR GCP SERVICE ACCOUNT>
取得したkey情報を利用して、gcloudコマンドを利用できるように auth loginします。
- id: gcloud
name: gcloud
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud --quiet auth configure-docker
さて、buildしてpushするための準備はできましたので、残りはBuildとPush
そして最後にキャッシュの保存
- name: Build and push and cache
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: |
<YOUR IMAGE NAME>:${{ github.sha }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new
- name: Move cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
```
雑メモでしたが、以上です
Discussion