3.2.2.5. Workspaces(工作区)
建议您在 OpenShift Pipelines 中使用 Workspaces 而不是 PipelineResources,因为 PipelineResources 很难调试,范围有限,且不容易重复使用。
Workspace 声明 Pipeline 中的任务在运行时需要的共享存储卷来接收输入或提供输出。Workspaces 不指定卷的实际位置,它允许您定义运行时所需的文件系统或部分文件系统。Task 或 Pipeline 会声明 Workspace,您必须提供卷的特定位置详情。然后,它会挂载到 TaskRun 或 PipelineRun 中的 Workspace 中。这种将卷声明与运行时存储卷分开来使得任务可以被重复使用、灵活且独立于用户环境。
使用 Workspaces,您可以:
- 存储任务输入和输出
- 任务间共享数据
- 使用它作为 Secret 中持有的凭证的挂载点
- 使用它作为 ConfigMap 中保存的配置的挂载点
- 使用它作为机构共享的通用工具的挂载点
- 创建可加快作业的构建工件缓存
您可以使用以下方法在 TaskRun 或 PipelineRun 中指定 Workspaces:
- 只读 ConfigMap 或 Secret
- 与其他任务共享的现有 PersistentVolumeClaim
- 来自提供的 VolumeClaimTemplate 的 PersistentVolumeClaim
- TaskRun 完成后丢弃的 emptyDir
以下显示了 build-and-deploy
Pipeline 的代码片段,它为任务 build-image
和 apply-manifests
声明了一个 shared-workspace
Workspace。
apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: build-and-deploy spec: workspaces: 1 - name: shared-workspace params: ... tasks: 2 - name: build-image taskRef: name: buildah kind: ClusterTask params: - name: TLSVERIFY value: "false" - name: IMAGE value: $(params.IMAGE) workspaces: 3 - name: source 4 workspace: shared-workspace 5 runAfter: - fetch-repository - name: apply-manifests taskRef: name: apply-manifests workspaces: 6 - name: source workspace: shared-workspace runAfter: - build-image ...
- 1
- Pipeline 中定义的任务共享的 Workspace 列表。Pipeline 可以根据需要定义 Workspace。在这个示例中,只声明了一个名为
shared-workspace
的 Workspace。 - 2
- Pipeline 中使用的任务定义。此片段定义了两个任务,
build-image
和apply-manifests
。这两个任务共享一个 Workspace。 - 3
build-image
任务中使用的 Workspaces 列表。任务定义可以根据需要包含多个 Workspace。但建议任务最多使用一个可写 Workspace。- 4
- 唯一标识任务中使用的 Workspace 的名称。此任务使用一个名为
source
的 Workspace。 - 5
- 任务使用的 Pipeline Workspace 的名称。请注意,,Workspace
source
使用 Pipeline Workspaceshared-workspace
。 - 6
apply-manifests
任务中使用的 Workspace 列表。请注意,此任务与build-image
任务共享source
Workspace。
工作区可帮助任务共享数据,并允许您指定 Pipeline 中每个任务在执行过程中所需的一个或多个卷。您可以创建持久性卷声明,或者提供一个卷声明模板,用于为您创建持久性卷声明。
以下 build-deploy-api-pipelinerun
PipelineRun 的代码片段使用卷声明模板创建持久性卷声明来为 build-and-deploy
Pipeline 中使用的 shared-workspace
Workspace 定义存储卷。
apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: build-deploy-api-pipelinerun spec: pipelineRef: name: build-and-deploy params: ... workspaces: 1 - name: shared-workspace 2 volumeClaimTemplate: 3 spec: accessModes: - ReadWriteOnce resources: requests: storage: 500Mi