在构建步骤之间传递数据

本页面介绍如何在构建步骤之间传递数据。如果您是刚接触 Cloud Build,请先阅读构建快速入门构建配置概览

Cloud Build 将任务作为一系列构建步骤运行,这些步骤将在隔离的容器化环境中执行。每执行完一个步骤,容器都会被舍弃。这样,您就可以每个步骤拥有完全不同的工具和环境。默认情况下,一步中创建的任何数据都不能影响下一步。但有时您可能需要持久保留构建中某个步骤的状态,以便在后续步骤中使用。

对于此类情况,Cloud Build 提供了,它们是可以附加到任何构建步骤的读写文件路径。卷会在构建过程中保留其内容。您可以定义自己的卷或使用 /workspace,这是 Cloud Build 为您提供的默认卷。由任何步骤写入用户定义的卷和 /workspace 的任何内容都将可用于后续步骤。

使用工作区传递数据

如需在构建步骤之间传递数据,请将构建步骤生成的资源存储在 /workspace 中,这些资源将可用于所有后续构建步骤。

在以下示例构建配置文件中,第一个构建步骤将字符串“First Value”存储在 /workspace/first.txt 中,并将值 2 存储在 /workspace/second.txt 中。第二个构建步骤读取并输出 /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 on "/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 中指定的文件路径中。
  • 在构建步骤中,您需要使用数据:
    • 添加一个 volumes 块,其中包含 namepath 的值。
    • 使用 path 中指定的文件路径中的数据。

在以下构建配置文件示例中,第一个构建步骤定义了一个名为 myvolume 的卷,并将数据存储在 /persistent_volume/file 中。第二个构建步骤输出 /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"
    }
    ]
  }
]
}

后续步骤