在构建步骤之间传递数据

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

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

对于此类情况,Cloud Build 提供了卷,它们是您可以附加到任何构建步骤的读写文件路径。卷会在整个构建期间保留其内容。您可以定义自己的卷或使用 /workspace,这是 Cloud Build 为您提供的默认卷。在执行构建之前,Cloud Build 会将源代码提取到 /workspace。通过任何步骤写入用户定义的卷和 /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 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 中。第二个构建步骤会输出存储在 /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"
    }
    ]
  }
]
}

后续步骤