前提
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
を使う場合など、環境変数周りでハマりそうなので誰かの参考になれば。