🌀

Google Cloud Build: ビルドステップ間でデータを渡す

2024/01/17に公開

基本

ドキュメントがあります。
https://cloud.google.com/build/docs/configuring-builds/pass-data-between-steps?hl=ja

渡したい値をファイルとして書き出し、次のステップではそのファイルから読み込むというのが基本です。(まどろっこしく感じますが仕方なし。)

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