澄清与Azure DevOps管道触发器的版本协调



在Azure DevOps中,我有一个构建管道B和一个部署管道d(这些是YAML管道)。管道D有两个阶段,一个用于立即部署到Dev服务器,另一个用于在批准后部署到Test服务器。管道B通过CI触发器被提交(通过pull请求)到repo中的主分支触发。管道b成功完成后,通过管道触发器触发管道D。

管道B被配置为从主分支构建最新版本。当然,我希望管道D能够部署由管道b创建的构建,这在测试部署被批准后开始时尤其正确,这可能是一两天之后。即使存在中间的提交和构建,我也希望这个部署基于这个构建。

微软似乎保证了这一点,在https://learn.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers?view=azure-devops&tabs=yaml, "如果触发管道和被触发管道使用相同的存储库,当一个触发另一个管道时,两个管道将使用相同的提交运行。如果您的第一个管道构建代码,第二个管道对其进行测试,这将很有帮助。">

但这里,或多或少,是我的管道代码D:

deploy:
steps:
- task: DownloadBuildArtifacts@0
displayName: 'Download artifacts from build'
inputs:
buildType: 'specific'
project: '19be1886-bedf-4a25-b77b-3a427a7ca358'
pipeline: ${{ parameters.buildPipelineId }}
specificBuildWithTriggering: true
buildVersionToDownload: 'latest'
downloadType: 'specific'
itemPattern: 'drop/**'
downloadPath: '$(System.ArtifactsDirectory)'
- task: Kubernetes@0
displayName: 'Deploy configuration to k8s'
inputs:
kubernetesServiceConnection: '${{ parameters.kubernetesServiceConnection }}'
namespace: '$(kubernetesNamespace)'
command: apply
useConfigurationFile: true
configuration: '$(System.ArtifactsDirectory)/drop/$(kubernetesConfigurationFile)'

这似乎是声明要使用最新版本。这似乎与微软的文件所表明的相矛盾。如果要把它从"最新"改成"最新"到别的东西,我怎么改变它,使部署是从同一构建触发管道D开始?

根据您的需求,您需要使部署管道D使用管道B的相应构建构件,而不是下载最新的构件。

因为管道D是由管道B触发的,你可以使用管道变量:$(BUILD.TRIGGEREDBY.BUILDID),它可以得到触发管道的buildID。

你可以在downloadbuilartifacts任务中使用这个变量。

例如:

- task: DownloadBuildArtifacts@0
displayName: 'Download artifacts from build'
inputs:
buildType: 'specific'
project: '19be1886-bedf-4a25-b77b-3a427a7ca358'
pipeline: ${{ parameters.buildPipelineId }}
specificBuildWithTriggering: true
buildVersionToDownload: specific
buildId: '$(BUILD.TRIGGEREDBY.BUILDID)'
itemPattern: 'drop/**'
downloadPath: '$(System.ArtifactsDirectory)'

最新更新