分支中的 Azure .yaml 管道文件策略

Rod*_*rez 1 .net git azure azure-devops azure-pipelines

我有一个 git 分支策略如下:

分支机构:

experimental-feature integrates to develop

develop integrates to master
Run Code Online (Sandbox Code Playgroud)

在每个分支中,我都有一个名为 azure-pipelines.yaml 的文件,其中包含管道构建的规则,每个规则在每个分支中都不同,因为每个文件都有一个与trigger分支名称匹配的属性名称。

IE:master 分支有一个 azure-pipelines.yml,它有一个名为“master”的触发器属性,因为对于 master 分支上的每个更改,都会触发管道。开发和实验功能也是如此。到目前为止,一切都很好。

develop现在,我不明白为什么当我从git创建拉取请求时,master无法识别每个azure-pipeline.yaml(开发和主控)之间的更改。这很好,因为azure-pipeline.yml开发中的内容总是会覆盖master azure-pipeline.yaml,而我不希望这样。

experimental-feature但是,当我通过拉取请求集成时, gitdevelop的更改确实会识别我不想要的文件之间的更改。

有人可以在这里启发我吗?我在微软文档中也找不到它是如何工作的。

小智 5

您可以使用阶段的触发器和条件来仅针对特定分支运行特定阶段。

我建议azure-pipeline.yml为所有分支和所有环境使用一个管道文件。然后,您可以为作业创建模板,即构建作业、部署到非生产作业等。

像这样:

在此输入图像描述

管道:

trigger:
- master
- dev

pr:
  branches:
    include:
      - master
      - dev

variables:
  - name: vmImage
    value: 'ubuntu-latest'

stages:
  - stage: Build
    displayName: Build stage
    jobs:
    - job: BuildJob
      pool:
        vmImage: $(vmImage)
      steps:
      - template: Jobs/build.yml
 
  - stage: NonProd
    displayName: Deploy non prod stage
    condition: and(succeeded(), in(variables['build.sourceBranch'], 'refs/heads/master', 'refs/heads/dev'))
    jobs:
    - deployment: DeploymentJob1
      pool:
        vmImage: $(vmImage)
      environment: non-prod
      variables:
        - template: Variables/non-prod.yml
      strategy:
        runOnce:
          deploy:
            steps:
            - template: Jobs/deploy.yml

  - stage: Prod
    displayName: Deploy prod stage
    condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/master'))
    jobs:
    - deployment: DeploymentJob2
      pool:
        vmImage: $(vmImage)
      environment: prod
      variables:
        - template: Variables/prod.yml
      strategy:
        runOnce:
          deploy:
            steps:
            - template: Jobs/deploy.yml
Run Code Online (Sandbox Code Playgroud)

触发器

  1. 确保为 dev 和 master 分支触发直接签入构建
trigger:
- master
- dev

Run Code Online (Sandbox Code Playgroud)
  1. 确保 PR 到 dev 和 master 分支(目标)触发构建
pr:
  branches:
    include:
      - master
      - dev

Run Code Online (Sandbox Code Playgroud)

状况

  1. 确保此阶段(非产品部署)仅针对 Master 和 Dev 运行,而不针对任何其他分支运行
condition: and(succeeded(), in(variables['build.sourceBranch'], 'refs/heads/master', 'refs/heads/dev'))
Run Code Online (Sandbox Code Playgroud)
  1. 确保此阶段(产品部署)仅针对 Master 分支运行
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/master'))
Run Code Online (Sandbox Code Playgroud)

同样,您可以混合搭配一些东西以更好地满足您的目的。

请查看存储库以供参考: https://github.com/iqans/azure-pipeline-demo