我正在考虑将旧的CI / CD管道(新的用于构建的YAML管道和基于“ UI”的“经典”管道)的混合物迁移到基于环境的多阶段YAML文件中,我正在努力寻找与我们目前正在做的事情相符的文档/示例。
通常存在三种环境:Test
,UAT
和Production
。
它们都是基于AKS的,现在,创建docker容器的构建将作为其输出的一部分存储DeployService.yml
文件,该文件由发布管道用于更新每个环境(通过在运行kubectl apply -f DeployService.yml
之前修改image标签以及一些环境变量。
目前,我有几个遵循这种模式的项目:
╔══════════════════════════╦══════════════════╦══════════════╦══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ ║ Name ║ Purpose ║ Type ║ Description ║ ╠══════════════════════════╬══════════════════╬══════════════╬══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣ ║ {project-name}.ci.yml ║ CI build ║ YAML-based ║ Triggered on pull-requests. Builds, run tests, etc. The only output is test results and success/ failure in Azure DevOps. ║ ║ {project-name}.cd.yml ║ CD build ║ YAML-based ║ Builds the output upon successful PR into master. This is more often than not a docker container. ║ ║ {project-name} - Release ║ Release Pipeline ║ 'Classic' UI ║ Release pipeline, triggered by {project-name}.cd.yml success and deploys into the Test environment. From there it's promotion to UAT and Production. ║ ╚══════════════════════════╩══════════════════╩══════════════╩══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
我想使用一个文件将它们全部移至更新的多阶段YAML构建和发布管道。
就目前情况而言,我已经使用新的管道模板创建了一个新的yaml文件,然后复制并粘贴了现有CD版本的一部分。
目前,新版本可以:
Test
环境中的发行版。为此,模板在存储库中创建了一个manifests
文件夹,其中包含一个deployment.yml
和一个service.yml
。它还创建了连接到我们的Test
AKS集群的环境。
所以我的问题是这些
deployment.yml
需要包含特定于环境的变量(请考虑ASPNETCORE_ENVIRONMENT
),如何为每个发行版环境提供那些附加的特定于环境的变量?答案 0 :(得分:1)
1,为Deployment.yml提供其他特定于环境的变量。
您可以在管道中使用Magic Chunks任务在构建过程中替换yaml文件中的变量。如果未安装Magic Chunks扩展,则需要将其安装到您的组织。请检查here以获得有关此任务的更多信息。您也可以查看this thread作为示例。
2,您可以创建与经典用户界面相同的促销样式。
您可以定义dependenies and condtions来根据运行上一个阶段的状态来控制一个阶段的运行。对于下面的示例。
stages:
- stage: A
# stage B runs if A fails
- stage: B
condition: failed()
# stage C runs if B succeeds
- stage: C
dependsOn:
- A
- B
condition: succeeded('B')
您还可以为您的阶段添加批准和检查。请检查文档Define approvals and checks
但是,Yaml管道尚不支持手动触发阶段。此功能已在路线图上。请检查this thread。
3,我建议您将CI构建文件放在单独的文件中。如果它在同一个yaml文件中,则随后的所有CD构建和阶段都将在请求请求时触发。
4,模板可让您定义可重用的内容,逻辑和参数。您可以将许多项目所使用的任务/作业放在模板yaml文件中。请检查here以获得有关yaml模板的更多信息。