LoginSignup
2
3

More than 5 years have passed since last update.

cloudbuildで、一つの環境変数で、引数に2つの値を渡せるようにする

Posted at

タイトルだけだと何を言っているんだこいつは……と思われても仕方ないんですが、上手く説明ができない!

困ったこと!

- 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に送り込んで実行させて、当初に発生していた問題もクリア! しています!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3