作为夜间构建的一部分,我们从一个父构建触发了一些构建。我们有一个构建 A,它有 30 多个“构建触发器”任务来触发另一个构建。
所有子构建都有将包推送到 Octopus 的任务。如果构建是由构建定义 A 触发的,我们会尝试不运行 Octopus 任务。
我尝试在子构建中使用
build.triggeredby.definitionId
来检查并在子构建B中添加条件以停止运行Octopus Task。
我遇到的问题是
build.triggeredby.definitionId
不返回任何值。也尝试在子构建的 powershell 步骤中编写主机。
知道为什么它不起作用或有任何其他建议。
Build.Reason
变量如果您不需要知道哪个确切构建触发了构建,请尝试使用使用
Build.Reason
变量的条件:
condition: and(succeeded(), eq(variables['Build.Reason'], 'ResourceTrigger'))
Build.Reason=ResourceTrigger
表示构建是由资源触发器触发的,或者是由另一个构建触发的。
考虑到您没有使用管道资源触发器,并且如果您需要确切地知道哪个构建触发了子构建,请尝试向子管道添加一个参数,该参数将由父管道使用您需要的信息进行设置。
父管道(
source
):
steps:
# ...
- script: >-
az pipelines run
--name 'triggered'
--org $(System.CollectionUri)
--project $(System.TeamProject)
--branch $(Build.SourceBranch)
--parameters "triggeredBy=$(Build.DefinitionName)"
displayName: 'Queue pipeline'
env:
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
子管道 (
triggered
):
parameters:
- name: triggeredBy
type: string
default: 'dummy'
steps:
# ...
- script: |
echo "Build reason: $(Build.Reason)"
echo "Triggered by: ${{ parameters.triggeredBy }}"
displayName: 'Display trigger information'
condition: and(succeeded(), eq('${{ lower(parameters.triggeredBy) }}', 'source'))