经典Delivery Pipeline概述
IBM Cloud® Continuous Delivery包含经典Delivery Pipeline,可在最少人工干预的情况下以可重复的方式构建、测试和部署。 在管道中,阶段序列可检索输入并运行作业(例如,构建、测试和部署)。
您可以使用浏览器或使用 IBM Cloud CLI Developer Tools(ibmcloud dev
)命令 来使用经典和 Tekton 交付管道。 您还可以使用 Tekton 管道 HTTP API 和 SDK,或者使用
IBM Cloud Terraform Provider 来处理 Tekton 交付管道。 有关 Tekton 交付管道的更多信息,请参阅 使用 Tekton 管道。
查看、修改或运行管道的许可权基于拥有管道的工具链的访问控制。 有关工具链访问控制的更多信息,请参阅 管理对资源组中工具链的访问。
您可以指定由管道提供的要在多个作业类型中运行的脚本,这样就可以直接控制作业运行内容。 这些脚本在包含多个标准开发工具的 Docker 映像中运行,其中包括与 IBM Cloud 运行时进行交互所需的工具。 有关标准 Docker 映像中包含哪些内容的更多信息,请参阅预安装的资源。 如果作业需要的开发工具在标准映像中没有提供,或者您需要这些工具的不同版本,那么可以使用定制映像。 有关定制映像的更多信息,请参阅使用定制 Docker 映像。
当管道运行脚本时,会使用环境变量将描述作业运行位置上下文的属性传递到脚本。 例如,作为阶段输入的存储库的 URL,要运行的阶段和作业的名称,作业类型所指定的参数,等等。 要查看可用环境变量的列表,请参阅预安装的资源。
您可以在管道级别和阶段级别定义属性。 管道属性是跨管道中所有阶段和作业共享的。 阶段属性对特定阶段来说是唯一的,并且在该阶段中是跨所有作业共享的。 有关属性的更多信息,请参阅环境属性(环境变量)。
阶段
在构建、部署和测试代码时,阶段可用于组织输入和作业。 阶段从源控制存储库(SCM 存储库)接受输入,或者在其他阶段中构建作业。 对于 SCM 存储库,输入是存储库中特定分支的内容;对于构建作业,输入是作业所产生的工件。 当您创建第一个阶段时,会在输入选项卡中包含缺省设置。
当阶段运行时,阶段的输入会传递给阶段中的每个作业。 会为每一个作业提供一个干净的运行容器。 结果是,阶段中的作业彼此之间无法传递工件。 要在作业内传递工件,可将作业分为两个阶段,并将第一阶段作业的输出作为第二阶段的输入。 任何构建作业都可以作为输入传递到另一阶段中的任何其他作业。 缺省情况下,将在 ./
文件夹中创建输出。 如果您不希望来自构建作业的输出,请将文件夹配置为输出,并且不将任何输出发送到该文件夹。
与定义管道属性的方法相似,您也可以定义阶段属性已用于特定阶段的所有作业中。 例如,您可以定义 TEST_URL
属性,该属性传递 URL 以在阶段中部署和测试作业。 部署作业将部署到该 URL,而测试作业将在该 URL 测试运行中应用程序。 还会使用环境变量将阶段属性传递到作业脚本。 如果在管道级别和阶段级别定义了相同的属性,那么会使用阶段属性的值。
缺省情况下,在阶段中每当更改传递到项目的 SCM 存储库时,都会自动运行构建和部署操作。 阶段和作业按顺序运行;它们为您的工作实现流程控制。 例如,您可能将测试阶段置于部署阶段之前。 如果测试阶段中的测试失败,部署阶段不会运行。
Delivery Pipeline 使用公共和专用工作程序来运行阶段中的作业。 缺省情况下,管道作业是使用公共工作程序在 IBM 管理的公共共享基础架构上运行的。
在某些情况下,Delivery Pipeline 可能需要访问内部或内部部署资源。 在这些情况下,可以连接到 Delivery Pipeline Private Worker 并与之集成以在您自己的 Kubernetes 基础架构上运行。
您可能想要对特定阶段进行更严格的控制。 如果在某个阶段输入时发生了更改,而您不想在每次发生更改时该阶段都运行,那么您可以禁用该功能。 在输入选项卡的“阶段触发器”部分中,单击仅当手动运行此阶段时才运行作业。

对于使用 Git 存储库输入类型的阶段,有更多阶段触发器选项可用。 例如,可以选择在所选分支上对 Git 事件自动运行作业。 选择此触发器类型时,必须选择下列其中一个或多个事件类型:
- 推送提交时 - 在对所选存储库分支进行推送时触发。
- 打开或更新拉取/合并请求时 - 打开或编辑拉取请求或合并请求时触发。
- 关闭拉取/合并请求时 - 关闭拉取请求或合并请求时触发,即使没有关联的提交也不例外。

如果选中打开或更新拉取/合并请求时复选框,那么管道的状态会返回到 Git 存储库。 拉取请求或合并请求触发管道时,页面上会显示内联状态检查。 系统将显示管道中运行的每个阶段的状态检查,并提供每个阶段的日志和历史记录的链接。 在状态检查运行时,状态会从暂挂更新为成功或失败。 如果管道包含多个阶段,那么每个阶段都会在检查列表中报告其状态。
IBM 托管的 GitLab Community Edition 工具还支持此状态反馈用于合并请求。
您还可以使用 Git 分支保护规则来限制基于状态检查结果的合并。 创建分支保护规则后,将阻止所有合并,直到所有必需的状态检查全部成功。
Bitbucket 云拉取请求
Bitbucket 云当前不支持提取请求的存储库引用,这是 Continuous Delivery 服务所需要的。 此功能允许使用以下格式的引用将拉取请求发送到要访问的存储库: refs/pull/123/…
您可以使用源存储库 URL 本地访存并检出拉取请求。 但是,如果源存储库是专用派生存储库,那么 Continuous Delivery 服务没有管理拉取请求所需的访问权。 要解决此限制,必须显式提供对管道脚本中的派生存储库的必需访问权。
在以下样本 Bash 管道脚本中,两个用户正在使用 Bitbucket Cloud,每个用户都有其主存储库 (bitbucket.org/userA/repo-forked-A 和 bitbucket.org/userB/repo-forked-B) 的专用派生。 此脚本设置为在两个派生存储库中的一个存储库中的拉取请求打开事件或更新事件触发构建作业时检出拉取请求。
case "$BITBUCKET_PR_SOURCE_HOST" in #BITBUCKET_PR_SOURCE_HOST is an environment exported by pipeline if job is triggered by a bitbucket pull request
*userA*) #userA should be replaced to anything to identify a forked repo's url
url="https://$username:$password@$BITBUCKET_PR_SOURCE_HOST" #you need to provide username and password for repo-forked-A
;;
*userB/repo-forked-B*) #userB/repo-forked-B should be replaced to anything to identify a forked repo's url
url="https://$username1:password1@$BITBUCKET_PR_SOURCE_HOST" #you need to provide username1 and password1 for repo-forked-B
;;
esac
git fetch $url $BITBUCKET_PR_SOURCE_BRANCH #BITBUCKET_PR_SOURCE_BRANCH is an environment exported by pipeline if job is triggered by a bitbucket pull request
git checkout FETCH_HEAD
构建阶段
构建阶段指定构建器类型以指示如何构建工件。
在构建作业中可用的很多字段都是在多个构建器类型中很常见的。
可用的构建器类型包括:
构建器类型 | 描述 | 受支持的作业类型 |
---|---|---|
简单 | 归档当前阶段的输入而不进行修改,以供未来阶段使用。 通常情况下,只有当阶段的输入来自 SCM 资源库时,这种构建器类型才会有用。 | 管道映像版本: 通过使用提供各种内置命令的内置 Docker 映像在容器中运行。 要采用这些命令的较新版本,请使用较新映像版本。 |
Ant | 使用 Apache Ant 文件来管理构建作业。 | 管道映像版本: 通过使用提供各种内置命令的内置 Docker 映像在容器中运行。 要采用这些命令的较新版本,请使用较新映像版本。
构建脚本: 每当作业运行时,都在新的 Ubuntu shell 中运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用 启用测试报告:选择此复选框可指定构建任务运行的测试以 JUnit XML 格式生成结果文件。 基于结果文件的报告会显示在“作业结果”页面的“测试”选项卡上。 如果任何测试失败,作业将被标记为失败 启用代码覆盖率报告:选择此复选框可显示更多可用于代码覆盖率报告的字段。 您可以指定覆盖运行程序(如JaCoCo,和 Cobertura)、覆盖结果文件的位置以及相对于工作目录的覆盖结果目录。 |
Container Registry | 构建 docker 映像并将其上传到IBM Cloud Container Registry。 | 管道映像版本: 通过使用提供各种内置命令的内置 Docker 映像在容器中运行。 要采用这些命令的较新版本,请使用较新映像版本。
API 密钥: 用于提供对帐户资源的许可权的 IBM Cloud API 密钥。 Container Registry 名称空间: 要用于存储已构建映像的名称空间。 Docker image name: The name of the image that this job builds and uploads to the IBM Cloud Container Registry. 构建脚本:每次运行任务时,都会在一个新的Ubuntushell 中运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用 启用测试报告:选择此复选框可指定构建任务运行的测试以 JUnit XML 格式生成结果文件。 基于结果文件的报告会显示在“作业结果”页面的“测试”选项卡上。 如果任何测试失败,作业将被标记为失败 启用代码覆盖率报告:选择此复选框可显示更多可用于代码覆盖率报告的字段。 您可以指定覆盖运行程序(如JaCoCo,和 Cobertura)、覆盖结果文件的位置以及相对于工作目录的覆盖结果目录。 |
定制 Docker 映像 | 使用定制 Docker 映像进行构建,并对节点,Java™或其他工具的版本进行细颗粒度控制。 | Docker image name: The name of the image that this job builds and uploads to the IBM Cloud Container Registry.
构建脚本: 每当作业运行时,都在新的 Ubuntu shell 中运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 生成存档目录:指定包含作业输出的目录,以存档供后续阶段使用 启用测试报告:选择此复选框可指定构建任务运行的测试以 JUnit XML 格式生成结果文件。 基于结果文件的报告会显示在“作业结果”页面的“测试”选项卡上。 如果任何测试失败,作业将被标记为失败 启用代码覆盖率报告:选择此复选框可显示更多可用于代码覆盖率报告的字段。 您可以指定覆盖运行程序(如JaCoCo,和 Cobertura)、覆盖结果文件的位置以及相对于工作目录的覆盖结果目录。 |
Gradle | 使用 Gradle进行构建。 | 管道映像版本: 使用内置 Docker 映像在容器中运行,该映像提供各种内置命令。 要采用这些命令的较新版本,请使用较新映像版本。
构建脚本: 每当作业运行时,都在新的 Ubuntu shell 中运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 构建存档目录- 指定包含作业输出的目录,以便存档供后续阶段使用 启用测试报告:选择此复选框可指定构建任务运行的测试以 JUnit XML 格式生成结果文件。 基于结果文件的报告会显示在“作业结果”页面的“测试”选项卡上。 如果任何测试失败,作业将被标记为失败 启用代码覆盖率报告:选择此复选框可显示更多可用于代码覆盖率报告的字段。 您可以指定覆盖运行程序(如JaCoCo,和 Cobertura)、覆盖结果文件的位置以及相对于工作目录的覆盖结果目录。 |
格鲁特 | 使用 Grunt 构建。 | 管道映像版本: 通过使用提供各种内置命令的内置 Docker 映像在容器中运行。 要采用这些命令的较新版本,请使用较新映像版本。
构建脚本: 每当作业运行时,都在新的 Ubuntu shell 中运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用 启用测试报告:选择此复选框可指定构建任务运行的测试以 JUnit XML 格式生成结果文件。 基于结果文件的报告会显示在“作业结果”页面的“测试”选项卡上。 如果任何测试失败,作业将被标记为失败 启用代码覆盖率报告:选择此复选框可显示更多可用于代码覆盖率报告的字段。 您可以指定覆盖运行程序(如JaCoCo,和 Cobertura)、覆盖结果文件的位置以及相对于工作目录的覆盖结果目录。 |
Maven | 使用 Apache Maven 构建。 | 管道映像版本: 使用内置 Docker 映像在容器中运行,该映像提供各种内置命令。 要采用这些命令的较新版本,请使用较新映像版本。
构建脚本: 每当作业运行时,都在新的 Ubuntu shell 中运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用 启用测试报告:选择此复选框可指定构建任务运行的测试以 JUnit XML 格式生成结果文件。 基于结果文件的报告会显示在“作业结果”页面的“测试”选项卡上。 如果任何测试失败,作业将被标记为失败 启用代码覆盖率报告:选择此复选框可显示更多可用于代码覆盖率报告的字段。 您可以指定覆盖运行程序(如JaCoCo,和 Cobertura)、覆盖结果文件的位置以及相对于工作目录的覆盖结果目录。 |
npm | 使用 Node 软件包管理器安装依赖关系。 | 管道映像版本: 使用内置 Docker 映像在容器中运行,该映像提供各种内置命令。 要采用这些命令的较新版本,请使用较新映像版本。
构建脚本: 每当作业运行时,都在新的 Ubuntu shell 中运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用 启用测试报告:选择此复选框可指定构建任务运行的测试以 JUnit XML 格式生成结果文件。 基于结果文件的报告会显示在“作业结果”页面的“测试”选项卡上。 如果任何测试失败,作业将被标记为失败 启用代码覆盖率报告:选择此复选框可显示更多可用于代码覆盖率报告的字段。 您可以指定覆盖运行程序(如JaCoCo,和 Cobertura)、覆盖结果文件的位置以及相对于工作目录的覆盖结果目录。 |
Shell 脚本 | 运行 UNIX shell 脚本,例如 Bash。 | 管道映像版本: 使用内置 Docker 映像在容器中运行,该映像提供各种内置命令。 要采用这些命令的较新版本,请使用较新映像版本。
构建脚本: 每当作业运行时,都在新的 Ubuntu shell 中运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用 启用测试报告:选择此复选框可指定构建任务运行的测试以 JUnit XML 格式生成结果文件。 基于结果文件的报告会显示在“作业结果”页面的“测试”选项卡上。 如果任何测试失败,作业将被标记为失败 启用代码覆盖率报告:选择此复选框可显示更多可用于代码覆盖率报告的字段。 您可以指定覆盖运行程序(如JaCoCo,和 Cobertura)、覆盖结果文件的位置以及相对于工作目录的覆盖结果目录。 |
GradleArtifactory、Nexus 或SonarQube | 通过将 Gradle 与 Nexus 或 Artifactory 存储库配合使用来构建和部署。 Gradle 还与 SonarQube集成。 | 管道映像版本: 使用内置 Docker 映像在容器中运行,该映像提供各种内置命令。 要采用这些命令的较新版本,请使用较新映像版本。
存储库工具集成实例: 要与此构建作业配合使用的存储库工具集成实例的名称。 存储库工具集成类型: 要从中获取 Gradle 信息的工具集成类型。 SonarQube 集成实例: 要与此构建作业配合使用的 SonarQube 集成实例的名称。 构建命令: 每当作业运行时要运行的构建命令。 在 脚本 字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用。 |
MavenArtifactory、Nexus 或SonarQube | 通过将 Maven 与 Nexus 或 Artifactory 存储库配合使用来构建和部署。 Maven 还与 SonarQube集成。 | 管道映像版本: 使用内置 Docker 映像在容器中运行,该映像提供各种内置命令。 要采用这些命令的较新版本,请使用较新映像版本。
存储库工具集成实例: 要与此构建作业配合使用的存储库工具集成实例的名称。 存储库工具集成类型: 要从中获取 Gradle 信息的工具集成类型。 SonarQube 集成实例: 要与此构建作业配合使用的 SonarQube 集成实例的名称。 构建命令: 每当作业运行时要运行的构建命令。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用。 |
npmArtifactory或 Nexus) | 通过将 npm 与 Nexus 或 Artifactory 存储库配合使用来构建。 | 管道映像版本: 使用内置 Docker 映像在容器中运行,该映像提供各种内置命令。 要采用这些命令的较新版本,请使用较新映像版本。
存储库工具集成实例: 要与此构建作业配合使用的存储库工具集成实例的名称。 存储库工具集成类型: 要从中获取 Gradle 信息的工具集成类型。 SonarQube 集成实例: 要与此构建作业配合使用的 SonarQube 集成实例的名称。 构建命令: 每当作业运行时要运行的构建命令。 在 脚本 字段中,输入存储在项目源代码控制中的脚本或引用脚本。 增量快照模块版本: 通过在发布步骤中根据 工作目录:指定运行脚本的目录 生成存档目录:指定包含作业输出的目录,以便存档供后续阶段使用。 |
部署阶段
部署阶段指定来自构建阶段的输入。 部署阶段中的作业指定部署程序类型。 可用的部署程序类型包括:
部署程序类型 | 描述 | 受支持的作业类型 |
---|---|---|
定制 Docker 映像 | 通过将定制 Docker 映像与对节点版本,Java™或其他工具的细颗粒度控制配合使用来部署。 | 管道映像版本: 通过使用提供各种内置命令的内置 Docker 映像在容器中运行。 要采用这些命令的较新版本,请使用较新映像版本。
API 密钥: 用于提供对帐户资源的许可权的 IBM Cloud API 密钥。 Docker image name: The name of the image that this job builds and uploads to the IBM Cloud Container Registry. 部署脚本: 部署命令以在作业运行时运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 |
Kubernetes | 将应用程序部署到 Kubernetes 集群,例如在 IBM Cloud Container Service 中找到的应用程序。 | 管道映像版本: 通过使用提供各种内置命令的内置 Docker 映像在容器中运行。 要采用这些命令的较新版本,请使用较新映像版本。
API 密钥: 用于提供对帐户资源的许可权的 IBM Cloud API 密钥。 集群名称: Kubernetes 集群的名称; 在其上部署 Kubernetes 组件的平台。 部署脚本: 部署命令以在作业运行时运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 |
测试阶段
测试阶段指定测试配置。 测试阶段的工作指定一种测试器类型。 可提供以下测试仪类型:
测试程序类型 | 描述 | 受支持的作业类型 |
---|---|---|
简单 | 启动 shell 命令以使用可选测试报告来运行自动化测试。 | 管道映像版本: 未使用。
测试脚本: 测试命令以在作业运行时运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录: 运行测试脚本的目录。 启用测试报告: 未使用。 启用代码覆盖报告: 未使用。 |
定制 Docker 映像 | 使用定制 Docker 映像进行测试,并对节点,Java™或其他工具的版本进行细颗粒度控制。 | Docker 映像名称: 要用于运行作业的 Docker 映像的名称。 要确保作业在干净的上下文中运行,请在 Docker 容器中运行这些作业。
测试脚本: 测试命令以在作业运行时运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录: 运行测试脚本的目录。 启用测试报告: 未使用。 启用代码覆盖报告: 未使用。 |
Vulnerability Advisor | 针对指定的映像运行合规性和漏洞检查,并显示结果。 如果发现任何问题,则此阶段失败。 | 管道映像版本: 通过使用提供各种内置命令的内置 Docker 映像在容器中运行。 要采用这些命令的较新版本,请使用较新映像版本。
API 密钥: 用于提供对帐户资源的许可权的 IBM Cloud API 密钥。 Container Registry 名称空间: 存储已构建映像的名称空间。 Docker 映像名称: 要用于运行作业的 Docker 映像的名称。 要确保作业在干净的上下文中运行,请在 Docker 容器中运行这些作业。 Docker映像标签:在IBM Cloud Container Registry中显示的Docker映像的标签 测试脚本: 测试命令以在作业运行时运行。 在脚本字段中,输入存储在项目源代码控制中的脚本或引用脚本。 工作目录: 运行测试脚本的目录。 启用测试报告: 未使用。 启用代码覆盖报告: 未使用。 |
Sauce Labs | 使用 Sauce Labs 运行JavaScript, Node 或Java™测试。 | 管道映像版本: 通过使用提供各种内置命令的内置 Docker 映像在容器中运行。 要采用这些命令的较新版本,请使用较新映像版本。
服务实例: 选择配置实例或创建配置实例。 |
不推荐的作业类型
IBM Globalization PipelineBuild 作业、Space Shell Test 作业和DevOps InsightsGate Test 作业等几种作业类型已被弃用。 虽然不推荐使用这些作业类型,但您可能仍能够在 UI 中装入这些作业类型,并指示该作业类型已不推荐使用。 或者,您的作业可能会还原为仍受支持的其他作业类型,并发出警告通知。
如果需要使用不推荐的作业类型中的配置,请使用下列其中一种方法来访问管道配置。
-
使用 IBM Cloud Devtool:
ic dev pipeline-get 7325f511-492a-4c35-a388-5e499e65d6bb -output JSON
-
使用Delivery PipelineAPI。应用程序接口:
curl --location --request GET 'https://devops-api.us-south.devops.cloud.ibm.com/v1/pipeline/pipelines/7325f511-492a-4c35-a388-5e499e65d6bb/stages' \ --header 'Authorization: Bearer <IAM Bearer token>
-
从 Delivery Pipeline UI 的 网络 选项卡中,按管道标识进行过滤,以找到包含不推荐的作业类型数据的管道。
API 密钥
一些标准管道作业使用IBM CloudAPI 密钥来访问服务,例如部署到Kubernetes。 IBM Cloud Identity and Access Management (IAM) 服务提供两种类型的 API 密钥:
- 用户 API 密钥:这些 API 密钥提供对用户有权访问的所有服务和资源的完全访问权。
- 服务 API 密钥:可以配置服务 API 密钥,以提供对各种服务和资源的特定访问权。
某些服务无法使用服务标识 API 密钥。 在此类情况下,管道用户界面会提示您指定用户 API 密钥。
由于管道作业运行的用户创建的脚本可能以任意方式使用服务 API 密钥,因此管道无法确定要应用于特定密钥的限制集。 在此类情况下,如果请求管道创建 API 密钥,那么它会创建用户 API 密钥。 要保持强大的安全性,请改为使用其访问权限制为只能访问您在脚本中需要的服务和资源的服务 API 密钥。 在这种情况下,您必须自行创建 API 密钥。 有关创建 API 密钥的更多信息,请参阅 IBM Cloud API 密钥。
作业
作业是阶段中的执行单元。 一个阶段可以包含多个作业,阶段中的作业可以按顺序运行。 缺省情况下,如果某个作业失败,那么阶段中的后续作业不会运行。

作业在 Docker 容器中的独立工作目录中运行,而这些容器是为运行每一个管道所创建的。 在作业运行之前,其工作目录中会填充在阶段级别定义的输入。 例如,您的某个阶段中可能包含测试作业和部署作业。 如果您在一个作业上安装依赖项,那么这些依赖项无法用于另一个作业。 但是,如果您在阶段输入中提供依赖项,那么这些依赖项可用于这两个作业。
除了简单类型构建作业之外,当您配置作业时,可以包括内含构建、测试或部署命令的 UNIX shell 脚本。 因为作业在特定容器中运行,所以一个作业的操作无法影响其他作业的运行环境,即使这些作业属于相同的阶段也是如此。
构建和部署脚本示例可在 https://github.com/open-toolchain/commons 中找到。
此外,管道作业仅可以 sudo
运行以下命令:
/usr/sbin/service
/usr/bin/apt-get
/usr/bin/apt-key
/usr/bin/dpkg
/usr/bin/add-apt-repository
/opt/IBM/node-v0.10.40-linux-x64/npm
/opt/IBM/node-v0.12.7-linux-x64/npm
/opt/IBM/node-v4.2.2-linux-x64/npm
/usr/bin/Xvfb
/usr/bin/pip
作业运行之后,即会废弃针对其创建的容器。 可以持久存储作业运行的结果,但是不会持久存储其运行的环境。
作业最长可以运行 60 分钟。 当作业超过此限制时即会失败。 如果作业会超过此限制,请将其分成多个作业。 例如,如果作业执行三个任务,那么您可以将其分成三个作业:每个任务一个作业。
要了解如何将作业添加到阶段,请参阅将作业添加到阶段。
构建作业
构建作业可对您的项目进行编译,以为部署做好准备。 它们会生成可发送到构建归档目录的工件,但是缺省情况下,工件会置于项目的根目录中。
从构建作业接受输入的作业必须参考与其采用相同结构创建的构建工件。 例如,如果构建作业将构建工件归档至 output
目录,那么部署脚本会参考 output
目录而非项目根目录,以部署编译过的项目。 可以通过在构建归档目录字段中输入目录名称来指定归档目录。 使此字段保留为空白将归档根目录。
如果使用简单构建器类型,那么不会编译或构建代码;而是将其打包,并使其可用于未来的阶段。
部署作业
部署作业可将项目作为应用程序上传到 IBM Cloud,且可通过 URL 进行访问。 部署项目之后,可以在 IBM Cloud 仪表板上查找已部署的应用程序。
部署作业可以部署新的应用程序或更新现有的应用程序。 即使您首先使用其他方法部署了应用程序,也可以使用部署作业来更新应用程序。 要更新应用程序,请在部署作业中,使用该应用程序的名称。
可以部署到一个或多个区域和服务。 例如,您可以设置 Delivery Pipeline 以使用一个或多个服务,在一个区域中进行测试,然后部署到多个区域中的生产环境。
测试作业
如果您想要求满足某些条件,请在构建和部署作业之前或之后,包括测试作业。 您可以定制测试作业,按您的需要定制为简单或复杂。 例如,您可能会发出 cURL 命令并期望获得特定响应。 您还可能使用第三方测试服务(如 Sauce Labs),运行一组单元测试或运行功能测试。
如果测试产生 JUnit XML 格式的结果文件,那么基于结果文件的报告将显示在每个测试结果页面的测试选项卡上。 如果测试失败,那么作业也会失败。
环境属性(环境变量)
一组预定义的环境属性提供作业执行环境相关信息的访问权。 有关预定义环境属性的完整列表,请参阅环境属性和资源。
也可以定义自己的环境属性。 例如,可以定义 API_KEY
属性以传递管道中所有脚本用来访问 IBM Cloud 资源的 API 密钥。
可以添加以下类型的属性:
- 文本:具有单行值的属性关键字。
- 文本区域:具有多行值的属性关键字。 每个文本区域属性值的 base64 版本也可用。 您可以使用带有尾部
_base641
后缀的属性键名称来访问此版本。 您可以对文本区域属性的 base64 版本进行解码,并通过输入echo "$(echo $multi_base64 | base64 -d)"
进行回传,其中multi
是您定义的属性键名称,multi_base64
是提供的其他属性。 管道基本映像包含内置支持,以透明方式管理多行编码。 但是,如果使用定制映像,那么必须附加_base64
后缀属性,以防止出现行尾截断值的问题。 - 安全:具有单行值的属性关键字,使用 AES-128 加密来保护安全。 该值显示为星号。
- 属性:项目存储库中的文件。 此文件可以包含多个属性。 每一个属性必须位于自己的行上。 要分隔键/值对,请使用等号 (=)。将所有字符串值括在引号中。 例如,
MY_STRING="SOME STRING VALUE"
。
您可以通过在作业脚本中运行 env
命令来检查管道作业的环境属性。
管道属性
要定义管道属性,请从“管道”页面上的溢出菜单中选择配置管道。

在“管道”配置页面的环境属性选项卡中,设置管道级别环境属性。

阶段属性
要定义阶段属性,请打开“阶段”配置页面,然后单击环境属性选项卡。

可以使用初始值(或空白值)来定义阶段属性,然后通过导出环境变量来覆盖作业中的该值。 通过覆盖初始值,阶段中的后续作业可以看到新值。 例如,可以使用以下命令设置 $API_KEY
属性,并将其提供给阶段内的另一个任务:export API_KEY=<insert API key here>
计算属性
您可以计算跨各个阶段共享的环境属性值,方法是在运行该阶段时创建 build.properties
文件,然后让下一个阶段运行该文件。 例如,构建作业可以在构建脚本中包括以下命令:
echo "IMAGE_NAME=${FULL_REPOSITORY_NAME}" >> $ARCHIVE_DIR/build.properties
所有作业都通过运行 build.properties
文件(如果存在)来启动。
创建和使用工件
构建作业自动访存运行用户脚本的当前文件夹中的内容。 如果不需要整个 Git 存储库内容以供将来部署,那么最好配置显式输出目录,然后在该目录中复制或创建相关工件。 作业脚本在构建结果(输出目录)中运行。
部署到 IBM Cloud Kubernetes Service 的部署作业需要指定使用其权限运行作业的用户的 Platform API 密钥、Dockerfile 和可选的 Helm chart。
作业脚本在作业使用分配的 Platform API 密钥登录到目标环境后运行(以便您可以在脚本中运行 cf push
或 kubectl
命令)。
管道示例
简单管道可能包含三个阶段:
- 构建阶段,对应用程序进行编译并运行构建过程。
- 测试阶段,部署应用程序的实例,并对其运行测试。
- 生产阶段,部署已测试应用程序的生产实例。
此管道在以下概念图中显示:

阶段从存储库和构建作业接受输入,阶段中的作业按顺序彼此独立地运行。 在管道示例中,尽管测试和生产阶段都将构建阶段的输出作为其输入,各阶段还是按顺序运行。