前提
CloudBuildでdocker buildをするにあたって、gitにはコミットしたくないがbuild時に--build-argで渡したいAPI KEYがあった
そのため、API KEYをCloudKMSに登録し、step内で$$API_KEYで取得して使おうとしていた
CloudKMSについては以下を参照
https://cloud.google.com/cloud-build/docs/securing-builds/use-encrypted-secrets-credentials?hl=ja
ハマった点
- name: 'gcr.io/cloud-builders/docker'
id: 'build-docker-image'
args: ['build', '-t', 'asia.gcr.io/$PROJECT_ID/SERVICE_NAME', '--build-arg', API_KEY=$$API_KEY', '.']
secretEnv: ['API_KEY']
上記のような感じで$$API_KEYを使おうとしても、docker側に渡されずに困った
解決策
- name: 'gcr.io/cloud-builders/docker'
id: 'build-docker-image'
entrypoint: 'bash'
args: ['-c', "docker build -t asia.gcr.io/$PROJECT_ID/SERVICE_NAME --build-arg API_KEY=$$API_KEY ."]
secretEnv: ['API_KEY']
上記のようにentrypointをbashにしてやることで、docker buildの引数として渡すことができた
確かにCloudKMSをCloudBuildで使っているexampleを見ると、bashを介していた気がする
修正前はshellを介しておらず、docker buildしているのはshellとは別プロセスになっているため取得できなかったと考えている
最後に
CloudRunでNuxtを使う場合など、環境変数周りでハマりそうなので誰かの参考になれば。