构建CI触发管道触发部署管道

时间:2020-04-30 19:39:23

标签: azure-devops yaml azure-pipelines

试图将文档(https://docs.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers)组合在触发器/资源上,以创建一组管道,这些管道将具有由提交触发的构建管道,并且当该管道完成时,部署管道会消耗工件并进行部署。之所以拥有一个单独的构建和部署管道,是因为要对提交在主线中的PR进行批处理提交(读为:master)

当对仓库进行提交时手动触发构建时,以下管道文件可以工作,同时启动两个管道。那不是想要的。如果从部署管道中删除了触发器,则管道触发器的管道将正常工作。

我们想要

  1. 回购提交
  2. 构建管道开始
  3. 构建管道发布工件
  4. 开始部署管道
  5. 部署管道会消耗工件
  6. 部署管道部署工件

build-pipeline.yml

name: $(date:yyyy).$(date:MM).$(date:dd)$(rev:.r)

trigger:
- master
- feature/*

pool:
vmImage: 'ubuntu-latest'

variables:
artifactsName: "artifacts"

steps:
- task: PowerShell@2
inputs:
    targetType: 'inline'
    script: |
    Write-Host "Executing Build"
    Write-Host "Creating Artifacts"
    New-Item -Type Directory -Path $(artifactsName)
    $artifactPath = Join-Path -Path $(artifactsName) -ChildPath "$(Build.BuildNumber).txt"
    Set-Content -Path $artifactPath -Value "$(Get-Date)"
    pwsh: true

- task: PublishPipelineArtifact@1
inputs:
    targetPath: $(artifactsName)
    artifactName: buildartifacts

deploy-pipeline.yml

resources:
pipelines:
- pipeline: buildpipeline
    source: -splitpipeline-build
    trigger:
    branches:
        include:
        - master
        - feature/*

pool:
vmImage: 'ubuntu-latest'

steps:
- script: echo Deploy Step 
displayName: 'Deploy'

1 个答案:

答案 0 :(得分:0)

如果要避免在提交后运行,则必须将trigger: none添加到deploy-pipeline.yml中。还可能需要pr: none,因为在创建请求请求时管道可能会运行。总结一下您需要的作品:

build-pipeline.yml

name: $(date:yyyy).$(date:MM).$(date:dd)$(rev:.r)

trigger:
- master
- feature/*

pool:
  vmImage: 'ubuntu-latest'

variables:
  artifactsName: "artifacts"

steps:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      Write-Host "Executing Build"
      Write-Host "Creating Super Artifacts"
      New-Item -Type Directory -Path $(artifactsName)
      $artifactPath = Join-Path -Path $(artifactsName) -ChildPath "$(Build.BuildNumber).txt"
      Set-Content -Path $artifactPath -Value "$(Get-Date)"
    pwsh: true

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: $(artifactsName)
    artifactName: buildartifacts

deploy-pipeline.yml

resources:
  pipelines:
  - pipeline: buildpipeline
    source: stackoverflow\kmadof.dm-so-15-a
    trigger:
      branches:
        include:
        - master
        - feature/*

trigger: none

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo Deploy Step 
  displayName: 'Deploy'

请检查doc以获得更多详细信息:

同时指定CI触发器和管道触发器时,可以 期望每次(a)对 仓库和(b)上游管线的运行已完成。 考虑一个依赖于A的管道B的示例。 假设这两个管道都使用相同的存储库 源代码,并且它们都还配置了CI触发器。 当您将更新推送到存储库时,然后:

  • A的新运行开始。
  • 与此同时,新的B运行是 开始。此运行将消耗先前从中产生的工件 答:
  • A完成后,将触发另一次B运行。

为防止 在此示例中触发两次B运行,必须删除其CI 触发器或管道触发器。