build.triggeredby.definitionId 在 Azure DevOps Server 20222 中不起作用

问题描述 投票:0回答:1

作为夜间构建的一部分,我们从一个父构建触发了一些构建。我们有一个构建 A,它有 30 多个“构建触发器”任务来触发另一个构建。

所有子构建都有将包推送到 Octopus 的任务。如果构建是由构建定义 A 触发的,我们会尝试不运行 Octopus 任务。

我尝试在子构建中使用

build.triggeredby.definitionId
来检查并在子构建B中添加条件以停止运行Octopus Task。

我遇到的问题是

build.triggeredby.definitionId
不返回任何值。也尝试在子构建的 powershell 步骤中编写主机。

知道为什么它不起作用或有任何其他建议。

azure-devops azure-pipelines devops azure-pipelines-yaml
1个回答
0
投票

使用
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'))
© www.soinside.com 2019 - 2024. All rights reserved.