ビルドステップ間でデータを渡す

このページでは、ビルドステップ間でデータを渡す方法について説明します。Cloud Build を初めて使用する場合は、最初にビルド クイックスタートビルド構成の概要をご覧ください。

Cloud Build は、分離されたコンテナ化環境で実行される一連のビルドステップとしてタスクを実行します。各ステップの後、コンテナは破棄されます。これにより、ステップごとにまったく異なるツールと環境を用意できます。デフォルトでは、1 つのステップで作成されたデータによって次のステップが損なわれることはありません。ただし、以降のステップで使用するために、ビルドの 1 つのステップの状態を保持する必要がある場合もあります。

このようなケースに備えて、Cloud Build には読み書き可能なファイルパスであり、任意のビルドステップにアタッチできるボリュームが用意されています。ビルド期間中、ボリュームはコンテンツを保持します。独自のボリュームを定義できます。または、ユーザーが使用できるように Cloud Build が備えているデフォルトのボリュームである、/workspace を使用できます。ビルドを実行する前に、Cloud Build はソースコードを /workspace に抽出します。任意のステップでユーザー定義のボリュームと /workspace に書き込まれたデータは、後続のステップで使用できます。

ワークスペースを使用してデータを渡す

ビルドステップ間でデータを渡すには、ビルドステップで生成されたアセットを /workspace に保存し、その後のビルドステップでこれらのアセットを使用できるようになります。

次のビルド構成ファイルの例では、最初のビルドステップで文字列「First Value」が /workspace/first.txt に格納され、値 2/workspace/second.txt に格納されます。2 番目のビルドステップでは、/workspace/first.txt/workspace/second.txt の値を読み取り、出力します。

YAML

steps:
- id: "Store Values"
  name: ubuntu
  entrypoint: bash
  args:
    - -c
    - |
      # Save a value to persistent volume mount: "/workspace"
      echo "First Value" > /workspace/first.txt &&
      # Save another
      expr 1 + 1 > /workspace/second.txt
# In the next step, everything in the environment is discarded
# EXCEPT items in "/workspace"
- id: "Read Values"
  name: ubuntu
  entrypoint: bash
  args:
    - -c
    - |
      # Read from "/workspace"
      echo "First we saved " $(cat /workspace/first.txt) &&
      echo "Then we saved " $(cat /workspace/second.txt)

JSON

{
  "steps": [
  {
    "id": "Store Values",
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "echo \"First Value\" > /workspace/first.txt &&\nexpr 1 + 1 > /workspace/second.txt\n"
    ]
    },
    {
      "id": "Read Values",
      "name": "ubuntu",
      "entrypoint": "bash",
      "args": [
        "-c",
        "echo \"First we saved \" $(cat /workspace/first.txt) &&\necho \"Then we saved \" $(cat /workspace/second.txt)\n"
      ]
    }
    ]
}

ユーザー指定のボリュームを使用してデータを渡す

Cloud Build が備えるデフォルトの /workspace ボリュームを使用する代わりに、独自のボリュームを定義して、ビルドステップ間でデータを保持することもできます。

独自のボリュームを定義して使用するには:

  • データを保存するビルドステップで、次の操作を行います。
    • volumes ブロックを追加して、次のフィールドを設定します。
      • name: このフィールドの値を目的のボリューム名に設定します。
      • path: このフィールドの値をデータを保存するファイルパスに設定します。
    • path で指定されたファイルパスにデータを保存します。
  • データを使用するビルドステップでは、以下の操作を行います。
    • namepath の値を含む volumes ブロックを追加します。
    • path で指定されたファイルパスのデータを使用します。

次のビルド構成ファイルの例では、最初のビルドステップで myvolume という名前のボリュームを定義し、/persistent_volume/file にデータを保存します。2 番目のビルドステップでは、/persistent_volume/file に保存されている値を出力します。

YAML

steps:
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      echo "Hello, world!" > /persistent_volume/file
  volumes:
  - name: 'myvolume'
    path: '/persistent_volume'
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      cat /persistent_volume/file
  volumes:
  - name: 'myvolume'
    path: '/persistent_volume'

JSON

{
  "steps": [
  {
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "echo \"Hello, world!\" > /persistent_volume/file\n"
     ],
     "volumes": [
     {
       "name": "myvolume",
       "path": "/persistent_volume"
     }
     ]
  },
  {
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "cat /persistent_volume/file\n"
    ],
    "volumes": [
    {
      "name": "myvolume",
      "path": "/persistent_volume"
    }
    ]
  }
]
}

次のステップ