在构建步骤之间传递数据

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

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

对于此类情况,Cloud Build 提供了,它们是可读写的文件路径,可附加到任何构建步骤。卷会在整个 build 期间保留其内容。您可以定义自己的卷,也可以使用 /workspace,这是 Cloud Build 为您提供的默认卷。在执行构建之前,Cloud Build 会将 将源代码复制到 /workspace任何写入 Volume 和 /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 中指定的文件路径中。
  • 在要使用数据的构建步骤中:
    • 添加一个 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"
    }
    ]
  }
]
}

后续步骤