我正在考虑将我的旧 CI/CD 管道迁移到一个多阶段、基于环境的 YAML 文件中,这些管道混合了用于构建的新 YAML 管道和“经典”基于 UI 的发布管道,但我正在苦苦挣扎找到我们目前正在做的事情的文档/示例。
通常有三种环境Test
:UAT
和Production
。
它们都是基于 AKS 的,目前创建 docker 容器的构建将作为其输出的一部分,存储DeployService.yml
发布管道用于更新每个环境的文件(通过修改图像标签和一些环境变量)在运行之前kubectl apply -f DeployService.yml
。
目前我有几个遵循这种模式的项目:
╔══════════════════════════╦══════════════════╦═══ ═══════════╦══════════════════════════════════════ ══════════════════════════════════════════════════ ══════════════════════════════════════════════════ ════════════╗ ║ 名称 ║ 用途 ║ 类型 ║ 描述 ║ ╠══════════════════════════╬══════════════════╬═══ ═══════════╬══════════════════════════════════════ ══════════════════════════════════════════════════ ══════════════════════════════════════════════════ ════════════╣ ║ {项目名称}.ci.yml ║ CI 构建 ║ 基于 YAML ║ 在拉取请求时触发。构建、运行测试等。唯一的输出是 Azure DevOps 中的测试结果和成功/失败。║ ║ {project-name}.cd.yml ║ CD build ║ 基于 YAML ║ 将 PR 成功后的输出构建到 master 中。这通常是一个 docker 容器。║ ║ {project-name} - 发布 ║ 发布管道 ║ '经典' UI ║ 发布管道,由 {project-name}.cd.yml 成功触发并部署到测试环境中。从那里推广到 UAT 和生产。║ ╚══════════════════════════╩══════════════════╩═══ ═══════════╩══════════════════════════════════════ ══════════════════════════════════════════════════ ══════════════════════════════════════════════════ ════════════╝
我想使用单个文件将它们全部移动到更新的多阶段 YAML 构建和发布管道。
就目前而言,我使用新的管道模板创建了一个新的 yaml 文件,然后复制并粘贴了现有 CD 构建的位。
目前,新版本可以:
- 执行创建和推送 docker 容器的构建。
- 触发推送到
Test
环境中的发布。
作为其中的一部分,模板manifests
在 repo 中创建了一个文件夹,其中包含 adeployment.yml
和 a service.yml
。它还创造了一个连接到我们的环境Test
AKS 集群的环境。
所以我的问题是:
- 鉴于
deployment.yml
需要包含特定于环境的变量(想想ASPNETCORE_ENVIRONMENT
),我如何在每个发布环境中提供这些额外的特定于环境的变量? - 我可以重新创建与使用经典 UI 版本相同的促销风格的发布管道吗?
- CI 构建是否完全适合这个过程?还是我应该把它放在一个单独的文件中?
- 鉴于有很多项目遵循这种模式,并且在大多数情况下,它们都做同样的事情,只是构建项目特定的容器,repos 之间是否有任何可重用性?