Azure devops 将yaml构建和经典发布管道迁移到多阶段yaml

Azure devops 将yaml构建和经典发布管道迁移到多阶段yaml,azure-devops,yaml,azure-pipelines-release-pipeline,build-pipeline,Azure Devops,Yaml,Azure Pipelines Release Pipeline,Build Pipeline,我正在考虑将我的旧CI/CD管道迁移到一个多阶段、基于环境的YAML文件中,这些管道是用于构建的新YAML管道和基于“经典”UI的发布管道的混合体,但我很难找到与我们目前正在做的工作相一致的文档/示例 通常有三种环境:Test、UAT和Production 它们都是基于AKS的,目前创建docker容器的构建将作为其输出的一部分存储一个DeployService.yml文件,发布管道使用该文件更新每个环境(通过修改图像标记和一些环境变量)在运行kubectl apply-f DeployServ

我正在考虑将我的旧CI/CD管道迁移到一个多阶段、基于环境的YAML文件中,这些管道是用于构建的新YAML管道和基于“经典”UI的发布管道的混合体,但我很难找到与我们目前正在做的工作相一致的文档/示例

通常有三种环境:
Test
UAT
Production

它们都是基于AKS的,目前创建docker容器的构建将作为其输出的一部分存储一个
DeployService.yml
文件,发布管道使用该文件更新每个环境(通过修改图像标记和一些环境变量)在运行
kubectl apply-f DeployService.yml
之前

目前,我有几个项目遵循这种模式:

╔══════════════════════════╦══════════════════╦══════════════╦══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ ║ 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. ║ ╚══════════════════════════╩══════════════════╩══════════════╩══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ ╔══════════════════════════╦══════════════════╦══════════════╦══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ ║ 名称║ 目的║ 类型║ 描述║ ╠══════════════════════════╬══════════════════╬══════════════╬══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣ ║ {project name}.ci.yml║ CI构建║ 基于YAML的║ 在拉取请求时触发。构建、运行测试等。唯一的输出是Azure DevOps中的测试结果和成功/失败。║ ║ {project name}.cd.yml║ 光盘制作║ 基于YAML的║ 将成功的PR输出构建到master中。这通常是docker容器。║ ║ {项目名称}-发布║ 泄放管线║ '经典用户界面║ 发布管道,由{project name}.cd.yml success触发,并部署到测试环境中。从那时起,它将推广到UAT和生产。║ ╚══════════════════════════╩══════════════════╩══════════════╩══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ 我想使用一个文件将它们全部移动到更新的多阶段YAML构建和发布管道

目前,我已经使用新的管道模板创建了一个新的yaml文件,然后复制和粘贴了我现有的CD版本

目前,新版本可以:

  • 执行创建并推送docker容器的生成
  • 触发推入
    测试
    环境的释放
作为其中的一部分,模板在repo中创建了一个
manifests
文件夹,其中包含一个
deployment.yml
和一个
service.yml
。它还创建了一个连接到我们的
Test
AKS集群的环境

所以我的问题是:

  • 鉴于
    deployment.yml
    需要包含特定于环境的变量(想想
    ASPNETCORE\u environment
    ),我如何为每个发布环境提供这些额外的特定于环境的变量
  • 我可以重新创建与使用经典UI版本相同的促销风格发布管道吗
  • CI构建是否完全适合此过程?还是我应该把它单独归档
  • 考虑到有很多项目都遵循这种模式,并且大多数情况下它们都做相同的事情,但是构建特定于项目的容器,那么repo之间是否有任何可重用性

  • 1,为deployment.yml提供其他特定于环境的变量

    在构建过程中,可以使用管道中的任务替换yaml文件中的变量。如果未安装Magic Chunks扩展,则需要将其安装到您的组织中。请查看此任务的详细信息。您还可以检查示例

    2、您可以创建与经典UI相同的促销风格

    您可以定义,以根据运行前一个阶段的状态来控制该阶段的运行。例如下面的例子

    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')
    
    您还可以为阶段添加批准和检查。请核对文件

    然而,Yaml管道还不支持手动触发阶段。这一功能已在路线图上。请查收

    3、我建议您将CI构建保留在单独的文件中。如果它位于同一个yaml文件中,则以下所有CD都将生成一个