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

このページでは、ビルドステップ間でデータを渡す方法について説明します。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"
    }
    ]
  }
]
}

次のステップ