Azure DevOps多阶段发布流水线重命名失败求助
问题描述
我在Azure DevOps中有一个YAML构建流水线,命名规则如下:
name: $(BuildDefinitionName)_$(Major).$(Minor).$(Build).$(Revision)_$(Date:yyyy-MM-dd)$(Rev:.r)$(branchName)
配置了一个由该构建流水线触发的发布流水线:
resources: pipelines: - pipeline: MyBuild # identifier for the resource used in pipeline resource variables source: MyBuild # name of the pipeline that produces an artifact trigger: branches: include: - main name: $(resources.pipeline.MyBuild.runName).$(Rev:r)
但发布流水线的名称无法正常生成。找到的单阶段流水线可用的解决方法在多阶段流水线中不生效:
name: Release-$(Rev:r) for Build # actual build number will be appended at runtime by logging command stages: - stage: BuildNumber jobs: - job: BuildNumber steps: - task: PowerShell@2 inputs: targetType: 'inline' script: Write-Host "##vso[build.updatebuildnumber]$(Build.BuildNumber) $(resources.pipeline.MyBuild.runName)"
请问如何实现多阶段发布流水线的重命名?
解决方案
在多阶段流水线中,要让##vso[build.updatebuildnumber]命令生效,按以下步骤调整即可:
设置临时初始编号
初始的name字段不能用编译阶段无法解析的变量(比如resources.pipeline.MyBuild.runName属于运行时变量,编译阶段拿不到值),先设置一个临时占位编号:name: Release-Temp-$(Rev:r)在首个阶段的作业里执行重命名命令
把更新编号的逻辑放在流水线启动后的第一个作业中,确保命令能优先执行并生效,调整后的完整示例:name: Release-Temp-$(Rev:r) # 临时初始编号,后续会被替换 resources: pipelines: - pipeline: MyBuild source: MyBuild trigger: branches: include: - main stages: - stage: UpdateReleaseName jobs: - job: SetFinalBuildNumber steps: - task: PowerShell@2 inputs: targetType: 'inline' script: | # 获取触发构建的运行名称 $sourceBuildName = "$(resources.pipeline.MyBuild.runName)" # 自定义最终发布编号格式,这里保留原需求的拼接逻辑 $finalNumber = "$sourceBuildName.$(Rev:r)" # 发送更新命令 Write-Host "##vso[build.updatebuildnumber]$finalNumber"验证变量可用性(可选)
如果还是不生效,可以先在脚本里加一行输出验证变量是否能正确获取:Write-Host "触发构建的名称:$(resources.pipeline.MyBuild.runName)"确认输出正常后再执行更新命令。
内容的提问来源于stack exchange,提问作者Yefka
相关产品推荐
相关产品推荐

