如何在Azure DevOps Pipeline Yaml中使用预定义的资源变量?

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

我有一个管道 yaml,它是根据另一个管道的完成而触发的。我想访问触发器资源的属性以获取 runName/buildNumber 并将其用作第二个管道中的变量。我该怎么做?

管道 yaml 具有以下格式:

resources:    
  pipelines:
  - pipeline: OfficialReleaseBuild
    source: Release-Official
    trigger: 
      branches:
       include:
         - release/*
      tags:
        - weeklyRelease

这工作正常,每当带有“weeklyRelease”标签的发布官方管道的构建完成时,它就会触发此管道

但是,由于该管道可以手动或自动触发,因此我想根据 ResourceTrigger 提供的属性设置一个变量:

https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/resources-pipelines-pipeline?view=azure-pipelines

variables:
    # package version to publish
  - name: version
    ${{ if eq( variables['resources.triggeringAlias'], 'OfficialReleaseBuild' ) }}: 
      value: variables['resources.pipeline.OfficialReleaseBuild.runName']
    ${{ else }}: 
      value: "${{ parameters.packageVersion }}"

但是,它不起作用。我有什么遗漏的吗?它始终默认为parameters.packageVersion。如何从资源触发器访问属性?

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

这是因为

${{ if eq( variables['resources.triggeringAlias'], 'OfficialReleaseBuild' ) }}:
表达式是在编译时处理的,但
resources.triggeringAlias
是运行时表达式。您可以使用日志记录命令:SetVariable:初始化或修改变量的值

variables:
    # package version to publish
  - name: version
    ${{ if eq( variables['resources.triggeringAlias'], 'OfficialReleaseBuild' ) }}: 
      value: variables['resources.pipeline.OfficialReleaseBuild.runName']
    ${{ else }}: 
      value: "${{ parameters.packageVersion }}"

JobsAndStepsSection:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      if ('OfficialReleaseBuild' -eq $(resources.triggeringAlias))
      {
            Write-Host "##vso[task.setvariable variable=version;]$(resources.pipeline.OfficialReleaseBuild.runName)"
      }
© www.soinside.com 2019 - 2024. All rights reserved.