如何在Azure Pipeline的PowerShell命令中获取流水线name变量的值
问题解答
结论
可以在PowerShell脚本中获取你在YAML根级别定义的name属性值,无需额外定义同名变量也能实现。
具体实现方式
方案1(推荐):使用系统预定义变量Build.BuildNumber
Azure DevOps管道的YAML根节点name属性的作用是定义流水线运行编号,它的取值会默认映射到官方预定义变量Build.BuildNumber,你可以直接在PowerShell脚本中调用该变量获取值:
variables: System.Debug: true versionNumber: '0.0.0' namePrefix: 'yml_$(versionNumber).' buildConfiguration: 'Release' tag: '-yml-$(versionNumber)' publishBuildArtifactsSubfolder: 'yml\$(Build.Repository.Name)_yml_$(versionNumber).' # 此处定义的name会自动赋值给预定义变量Build.BuildNumber name: ${{ variables['namePrefix']}}$(Build.BuildId) steps: - task: PowerShell@2 displayName: 读取流水线运行名称 inputs: targetType: 'inline' script: | # 直接调用管道预定义变量取值 Write-Host "当前流水线运行名称:$(Build.BuildNumber)" # 也可以通过环境变量读取,Azure DevOps注入的环境变量名默认全大写 Write-Host "环境变量读取结果:$($env:BUILD_BUILDNUMBER)"
这个方案不需要额外配置,符合Azure Pipeline的设计规范。
方案2:自定义变量声明法
就是你当前使用的临时方案,把name声明到variables块中,此时它会被作为普通自定义管道变量注入到任务环境中,可以直接在PowerShell中读取,适合需要在多个YAML配置节点复用该值的场景。
原报错原因说明
你最初测试无法直接获取name的原因是:YAML根级的name是流水线的运行属性,不属于默认注入任务环境的自定义变量集合,只有声明在variables块中的变量,或者通过官方预定义变量的映射关系,才能在任务脚本中读取。
内容的提问来源于stack exchange,提问作者Richard Barraclough
相关产品推荐
相关产品推荐

