タイトルだけだと何を言っているんだこいつは……と思われても仕方ないんですが、上手く説明ができない!
困ったこと!
- name: 'gcr.io/cloud-builders/gcloud'
args: [
'app',
'deploy',
'${_DEPLOY_YAML}',
]
みたいな感じで、${_DEPLOY_YAML}のところに、app.yamlとcron.yamlを入れたいんですよ。
本番ではapp.yamlとcron.yamlだけど、stagingではapp.yamlしかdeployしたくないみたいなニッチな需要があってですね。
ただ環境変数に"app.yaml cron.yaml"と入れてしまうと、今度は「app.yaml cron.yaml」っていう間にスペースの入ったファイルを探して、そんなものはない!と怒られてしまうんですね。
dockerでも同じようなことが
独自のDockerfileを作って起動させる時に、例えば……nginxとphpを動かしたいと思うわけじゃないですか。
ただ、DockerのCMDからは複数のコマンドは基本的に渡せないわけで。
# これは動かない! というか実行できない!
docker run --rm -it hogehoge service nginx start && service php-fpm start && tail -f /dev/null
ならどうするかというと、2つのコマンドを実行するshellでも作って実行させるか、そういうshellをentrypointとして起動させるかとかになると思うんですね。
あれ、じゃあcloudbuildでも同じようなことをすれば行けるのでは……?
cloudbuildでentrypointを使ってみる
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: '/bin/bash'
args: [
'-c',
'gcloud app deploy ${_DEPLOY_YAML}',
]
という訳で設定してみたのがこれです。
gcloudコンテナの場合、特に何もしないとgcloudコマンドがentrypointとして起動されるんですが、/bin/bashに変更してます。
その上で、実行したいコマンド一式を文字列としてbashに送り込んで実行させて、当初に発生していた問題もクリア! しています!