当repository resource trigger触发管道时,我需要能够确定有关触发存储库的元数据(例如回购名称和分支)。
听起来these variables应该在由存储库资源触发的管道运行期间设置;但是,当我在由存储库资源触发的管道运行中执行echo $(resources.triggeringAlias)
或env | sort
时,它们的值为空白。
更新:Build.Repository.Name
和Build.SourceBranchName
的预定义变量现在与存储库触发器一起使用时可以按预期工作。因此,虽然我不再需要resources.triggeringAlias
和resources.triggeringCategory
,但它们仍然无法工作。
答案 0 :(得分:1)
我需要能够确定有关触发的元数据 存储库(例如回购名称和分支)
我们可以使用$(Build.Repository.Name)
和$(Build.Repository.Uri)
来获取存储库名称和存储库uri。
$(Build.SourceVersion)
可用于获取CommitId,$(Build.SourceBranch)
或$(Build.SourceBranchName)
可用于获取分支信息。
只需注意,我们还必须签出触发回购协议,以使上述变量能够获取触发回购协议的信息,否则这些变量将始终代表触发回购协议的值:
steps:
- checkout: self
- checkout: TheTriggeringRepo
一些详细信息:
我有一个触发存储库PipelineA
和触发存储库PipelineB
。 PipelineB
的{{1}}文件:
azure-pipelines.yml
因此,该管道将同时由resources:
repositories:
- repository: PipelineA
type: git
name: PipelineA
trigger:
- master
steps:
- checkout: self
- checkout: PipelineA
- task: Bash@3
inputs:
targetType: 'inline'
script: |
echo $(Build.Repository.Name)
echo $(Build.SourceBranch)
回购和PipelineA
回购触发。
PipelineB
仓库有更改时:
PipelineB
仓库有更改时:
很明显,如果我们同时检查这两个仓库,则PipelineA
变量可以很好地输出实际的触发器仓库。因此,只需确保签出那些触发回购协议,那么上面的变量将对您有用。