🌀
Google Cloud Build: ビルドステップ間でデータを渡す
基本
ドキュメントがあります。
渡したい値をファイルとして書き出し、次のステップではそのファイルから読み込むというのが基本です。(まどろっこしく感じますが仕方なし。)
steps:
- id: "Store Values"
name: ubuntu
entrypoint: bash
args:
- -c
- |
echo "First Value" > /workspace/first.txt
- id: "Read Values"
name: ubuntu
entrypoint: bash
args:
- -c
- |
echo "First we saved " $(cat /workspace/first.txt) # First we saved First Value
次のステップがbashではないときは?
ビルドステップとして gcloud
のようなクラウドビルダー等を実行することも多いと思います。argsと合わせてコマンド実行のような形態で呼ぶことになりますが、これだとどうやってファイルを読み込みに行けばよいか、困りました。
steps:
- name: ubuntu
entrypoint: bash
args:
- -c
- |
echo "asia-northeast1-a" > /workspace/zones.txt
- name: gcr.io/cloud-builders/gcloud
args:
- compute
- instances
- list
- --zones ${ZONES} # どう持ってくる?
こういうときは、そのクラウドビルダーステップでも entrypoint: bash
をしてしまうのがよさそうです。
steps:
- name: ubuntu
entrypoint: bash
args:
- -c
- |
echo "asia-northeast1-a" > /workspace/zones.txt
- name: gcr.io/cloud-builders/gcloud
entrypoint: bash
args:
- '-c'
- |
set -o errexit
# ファイルから前のステップの情報を取り出す
ZONES=$(cat /workspace/zones.txt)
# 行いたいことは普段通りな書き方で
gcloud compute instances list --zones ${ZONES}
万一、FROM scratch
なシェルが無いイメージを使うとするならばこの技はできないです。gcloud, docker, gitなどのクラウドビルダーや、ubuntu, pythonといった著名なイメージの多くにはシェルが含まれるようで、今のところは困ったことはありません。
Discussion