部署流程中的制品
图示
我们用一个 demo 部署流程帮助您理解制品和预期制品(expected artifacts)的工作原理。
以下是使用到的元素:
假设配置如下的部署流程:
这个部署流程声明了在启动时需要获取到
制品 1
(可以是一个 Docker 镜像),对应配置在部署流程配置阶段完成。另外还声明了在部署流程的 B 阶段(可以是从执行环境中查找制品
阶段)需要获取制品 2
。
部署流程被触发器(假设由 Webhook 触发)触发执行,触发器提供了两个制品:
虽然只有制品 1
被匹配成功被绑定,但是由于触发器携带了两个制品的信息,所以在下游阶段两个制品都可以被引用。预期制品(expected artifact) 的好处是下游阶段可以直接引用,而如果下游阶段引用了制品3
(没有被 expected artifacts 匹配成功的制品),那么在阶段运行时需要判断这个制品是否存在。
需要强调的是制品 1
在部署流程启动时就被绑定了,如果我们像图示在下游阶段(如 Deploy Manifest)中引用制品,这个制品在部署流程开始执行时就被绑定到阶段,而不是阶段执行时才绑定。
当 B 阶段执行时,需要绑定制品2
。假设是 从执行环境中查找制品
阶段,B 阶段将从其他部署流程执行环境中查找制品并绑定。
如果阶段 C 或 D 需要引用上游的制品,它们所能引用的制品源可能不同,因为阶段 C 和 D 各自的上游阶段也不相同。如图,阶段 D 无法引用制品2
。
部署流程执行上下文的制品可能来自于外部触发器(如上传到 CODING 制品库的 Docker 镜像),也可以从其他阶段获取,制品可以被下游的阶段所使用。
CODING 部署控制台通过 Expected artifacts
特性将其他部署流程的制品、阶段的产物(例如 Bake 阶段)与特定阶段相绑定。
触发器
你可以通过手动触发部署流程,也可以通过设置触发器的方式自动触发。例如在「部署流程」的「基础配置」中使用「Docker 触发器」就能够监听特定类型的制品上传,以此作为触发条件。
如果部署流程启动时无法匹配【制品匹配规则】中所定义的制品,将会按照优先级排序以下两项可获取制品的次选方案:
使用上一次执行的触发器
使用默认制品
触发器 Payloads 携带制品信息
在触发器的 payload
内容中,名为 artifacts
的键(list 类型)提供了制品列表。当部署流程被触发时,artifacts
的值将会注入到部署流程执行上下文。如下以 payload
携带 CODING docker 制品为例:
{
"artifacts": [
{
"type": "coding_docker/image",
"name": "lhkprod-docker.pkg.coding.net/cd-demo/release/nginx",
"reference": "lhkprod-docker.pkg.coding.net/cd-demo/release/nginx:latest"
}
]
}
在部署流程执行环境中查找制品
「部署阶段」中支持自动获取镜像版本,Manifest 中的镜像版本默认支持动态替换,即启动部署流程时可以指定版本覆盖 Manifest 中的默认版本。
常见的使用场景是当某个镜像通过部署流程成功地部署在预发布环境后,使用正式环境对应的部署流程查找此制品用以部署到正式环境。
在部署流程之间传递制品
制品可以在部署流程之间传递,假设 A 部署流程触发了 B 部署流程执行,那么 B 部署流程可以获取到 A 部署流程中任何可用的制品;包括 A 部署流程触发器携带的制品以及 A 部署流程生成的制品。
以下两个案例说明了制品是如何在部署流程之间传递的:
在 B 部署流程的配置阶段,将 A 部署流程配置为自动触发器。当 A 部署流程执行完毕时,B 部署流程将会被触发执行,并且 B 部署流程将拥有访问 A 部署流程所有制品的权限。
子部署流程作为父部署流程的阶段
在 A 部署流程(父部署流程)中添加类型为部署流程的阶段并指向 B 部署流程。B 部署流程将拥有上游制品的权限(上游制品指 B 部署流程被触发之前 A 部署流程的所有制品)
在阶段中生成制品
阶段中生成的制品同样可以作为触发下一阶段的触发条件。在部署阶段中可以选择将镜像来源设置为「上游阶段生成」
阶段生成的制品有如下两个使用场景:
绑定制品注入到阶段上下文
在阶段(如 Deploy(Manifest))中生成的制品可供下游阶段使用。
人为地将制品注入到阶段上下文
如果阶段本身不生成制品(如
Run Job
阶段),您可以配置默认制品,每次阶段执行时将默认制品注入到部署流程。需要注意的是,如果指定的镜像不匹配,阶段将会绑定部署流程中的任意制品。
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。