Cloud Build で Secret Manager で展開した環境変数を Docker の build-arg に渡す
Cloud Build で Secret Manager から接続情報を取得し、Github Packages の nuget feed からパッケージを復元する - dunno logs
先日上記のように Cloud Build で Secret Manager から取り出した値を環境変数として展開し、後続のビルドステップで利用するということをしましたが、 docker build
するケースもあったのでついでに。
もはや Secret Manager は関係ない。
今回のファイル
Dockerfile
FROM alpine ARG GITHUB_USER="test" ARG GITHUB_TOKEN="token" RUN echo $GITHUB_USER
alpine にしてますが、環境変数が渡されてるか知りたいだけなので、そこに意図はないです。
cloudbuild.yaml
steps: - name: gcr.io/cloud-builders/gcloud entrypoint: bash args: - -c - | gcloud secrets versions access --secret=github-access-token latest > /workspace/build_vars - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: - -c - | source /workspace/build_vars docker build --build-arg GITHUB_USER=$$GITHUB_USER --build-arg GITHUB_TOKEN=$$GITHUB_TOKEN .
Secret Mangar からの読み出しは変わってません。
docker build の部分が今回のポイントです。
以下に記述があるのですが、 $
一つだと、Cloud Build の変数置換機能で期待通り評価されないので、 $$
としています。
Substituting variable values | Cloud Build Documentation
これでうまくいきます。
少し思うこと
Cloud Build には Substitution があって、外から値を与えられるのでそこに Secret Manager から値を渡せると嬉しいのだけどなぁと思いつつ、Sustitution の値はビルドログにもガッツリ残るしそこは微妙なのかもと。
KMS で暗号化した値を Substitution に渡して、それを中で復号するというのも検討してみたんですが、結局こちらに落ち着きました。