このページでは、ビルドステップ間でデータを渡す方法について説明します。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
で指定したファイルパスに保存します。
- データを使用するビルドステップでは、以下の操作を行います。
name
とpath
の値を含む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"
}
]
}
]
}
次のステップ
- ビルドを手動で開始する方法を学習する。
- トリガーを使用してビルドを自動化する方法を学習する。
- ビルドステップの中で bash スクリプトを実行する方法を学習する。
- ビルドステップの順序を構成する方法を学習する。