基于我发布的关于通过标签推送从另一个管道触发管道的上一个线程从由标签推送触发的另一个管道触发Azure DevOps管道现已解决,但当我尝试触发另一个管道时,它会带来新问题来自不同存储库的管道,详细信息如下。
pr: none
trigger: none
resources:
repositories:
- repository: demoRepo
type: git
name: Project/demoRepo
trigger:
tags:
include:
- '*'
steps:
- script: |
echo "##vso[build.addbuildtag]ABuildTag"
displayName: Add a tag for the build of source pipeline
- task: CopyFiles@2
inputs:
contents: $(System.DefaultWorkingDirectory)/**/*.yml
targetFolder: $(Build.ArtifactStagingDirectory)
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: $(Build.ArtifactStagingDirectory)
artifactName: dummy-$(Build.BuildId)
trigger: none
pr: none
resources:
pipelines:
- pipeline: source
# project: Pipelining
source: source
trigger:
branches:
include:
- refs/tags/*
tags:
- ABuildTag
steps:
- checkout: none
- script: echo 'triggered depends'
根据上面的管道yaml,
depends pipeline
在source pipeline
之后没有执行,而当我从另一个存储库(source pipeline
)触发demoRepo
时,它应该执行。
在上面的
Figure 1
中,UI显示source pipeline
在main
分支上被触发。但是,我按下了一个标签并将触发器设置为 refs/tags/*
,如前所述。
您需要了解以下几点:
在管道中,如果定义的资源触发器来自另一个存储库,则当前管道将始终在当前管道所在的
self
存储库的默认分支上触发(运行)。这就是为什么您的 源管道在main
分支上触发,该分支是self
存储库的默认分支,而不是demoRepo
存储库。
在Depends pipeline中,它直接由Source pipeline触发,而不是由
demoRepo
存储库触发,因此,管道资源上设置的过滤器将仅评估Source pipeline所在的存储库.
您在管道资源上定义的过滤器“
- refs/tags/*
”是从源管道所在的存储库(而不是demoRepo
存储库)检测标签。
类似,标签“
- ABuildTag
”也应该是添加在源管道上的构建标签。这不是 git 标签。您可以手动或在运行当前构建期间使用“addbuildtag
”命令将构建标签添加到构建中。
对于您的情况,您可以尝试更改如下配置:
addbuildtag
' 命令来创建构建标记(例如,resRepoTagTriggered
)。. . .
steps:
- bash: echo "##vso[build.addbuildtag]resRepoTagTriggered"
displayName: 'Add Build Tag'
resources:
pipelines:
- pipeline: source
# project: Pipelining
source: source
trigger:
tags:
- resRepoTagTriggered
- refs/heads/main
”。resources:
pipelines:
- pipeline: source
# project: Pipelining
source: source
trigger:
branches:
include:
- refs/heads/main
tags:
- resRepoTagTriggered