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

时间:2020-08-11 19:05:31

标签: .net git azure azure-devops azure-pipelines

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

分支机构:

experimental-feature integrates to develop

develop integrates to master

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

I.E:master分支具有azure-pipelines.yml,该触发器具有名为“ master”的触发属性,因为对于master分支上的每次更改,都会触发管道。开发和实验功能相同。 到目前为止一切顺利。

现在,我不明白为什么当我创建从developmaster的拉取请求时git不知何故无法识别每个azure-pipeline.yaml(开发和母版)之间的变化。很好,因为开发中的azure-pipeline.yml总是会覆盖master azure-pipeline.yaml,而我不希望那样。

但是,当我通过请求合并请求时,从experimental-featuredevelop git的更改可以识别不需要的文件之间的更改。

有人可以在这里启发我吗?我也无法在Microsoft文档中找到这是如何工作的。

1 个答案:

答案 0 :(得分:1)

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

我建议为所有分支机构和所有环境使用单个管道文件azure-pipeline.yml。然后,您可以为Jobs创建模板,例如,Build Job,Deploy to Non-prod job等。

赞:

enter image description here

管道:

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

触发器

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

  1. 确保PR对开发者和主分支(目标)触发器的构建
pr:
  branches:
    include:
      - master
      - dev

条件

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

类似地,您可以混合和匹配事物以更好地满足您的目的。

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