azure-devops - Azure Pipelines 将 YAML 用于具有不同变量值但没有 YAML 重复的多个环境(阶段)

标签 azure-devops yaml azure-pipelines continuous-deployment azure-pipelines-yaml

假设我在 Azure 上有 3 个环境:Dev、Test 和 Prod。我有相同的管道来为每个环境构建和部署资源和代码,但有两个不同之处:

  • 不同的触发分支
  • 不同的变量值

  • 这种情况的正确方法是什么?因为我想到了至少 3 个,没有一个是完美的:
    选项 1: 我想我可以在 Azure DevOps 上创建单个管道(由 3 个分支中的任何一个触发),每个环境有 3 个阶段,并为每个阶段添加一个根据源分支运行的条件,如下所示:condition: eq(variables['Build.SourceBranch'], 'refs/heads/a-branch-name')并在每个阶段引用不同的变量。但这会在每个阶段引入代码重复——在添加或修改一个步骤时,我必须记住编辑 3 个阶段——这是不可取的。
    选项 2: 在我的存储库中创建 3 个单独的 YAML 文件,每个文件都具有指定的触发器分支并引用相同的变量名称,然后在 Azure DevOps 上创建 3 个不同的管道,每个管 Prop 有不同的变量值。但这也会引入代码重复。
    选项 3: 使用其中定义的步骤创建 1 个 build-and-deploy.yaml 文件作为模板,然后创建另外 3 个引用该模板的 YAML 文件,每个文件在每个 Azure 管道中具有不同的触发器分支和不同的变量值,如下所示:
    trigger:
      branches:
        include:
        - a-branch-name
    
    steps:
    - template: build-and-deploy.yaml
      parameters:
          parameterName1: $(parameterValue1)
          parameterName2: $(parameterValue2)
    
    这似乎是最好的选择,但我没有看到它在示例中的任何地方使用过,所以也许我只是不知道它的缺点,如果有的话。

    最佳答案

    以下是如何使用包含在特定于环境的管道中的共享管道配置来执行此操作。
    要支持 2 个环境( devprod ),您需要:

  • 1 共享管道 yaml
  • 2 个特定于环境的 yaml,每个环境一个
  • 2 个在 Azure DevOps 中创建的管道,每个 env 一个;每个管道引用相应的 yaml
  • pipeline-shared.yml :
    variables:
      ARTIFACT_NAME: ApiBuild
      NPM_CACHE_FOLDER: $(Pipeline.Workspace)/.npm
    
    stages:
      - stage: Build
        displayName: Build
        pool:
          vmImage: 'ubuntu-latest'
          demands: npm
        jobs:
          ...
    
      - stage: Release
        displayName: Release
        dependsOn: Build
        pool:
          vmImage: 'ubuntu-latest'
        jobs:
          ...
    
    pipeline-dev.yml :
    # Trigger builds on commits to branches
    trigger:
      - dev
    
    # Do not trigger builds on PRs
    pr: none
    
    extends:
      template: pipeline-shared.yml
    
    pipeline-prod.yml
    trigger:
      - master
    
    pr: none
    
    extends:
      template: pipeline-shared.yml
    

    关于azure-devops - Azure Pipelines 将 YAML 用于具有不同变量值但没有 YAML 重复的多个环境(阶段),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64777703/

    相关文章:

    Azure PostgreSQL : it is not possible to remove database through Azure CLI

    azure-devops - 如何从 Azure DevOps 管道中的另一个作业访问 InvokeRestAPI 任务的响应?

    azure - 如何在 Terraform 中验证 IP 地址?

    Azure 资源 WebApp 已部署但无法从 url 访问

    yaml - Fn::Foreach 具有内部函数参数 | Fn::GetAZ |找不到集合

    unicode - 如何在 YAML 多行字符串中进行 Unicode 转义?

    ruby-on-rails - YAML::load 引发未定义的类/模块错误

    docker - 无法连接到在 VSTS 中运行的 Docker 容器

    基于输出结果的 Azure Pipeline 任务(通过或失败)

    azure-devops - 将拉取请求构建状态添加到 Github