如何在YAML构建流水线中动态使用脚本变量计算版本修订号?
解决办法
方案1:使用变量组存储基础版本号
把主、次、补丁版本号(如1.1.20-dev)存入Azure DevOps的变量组中,无需修改流水线YAML文件:
- 在Azure DevOps项目的「变量组」中新建组,添加变量
baseVersion,值设为你的基础版本号。 - 在流水线YAML中引用该变量组,直接在变量定义里使用counter:
variables: - group: 你的版本变量组名 - name: revision value: $[counter(variables['baseVersion'], 0)] - name: fullVersion value: $[replace(variables['baseVersion'], '-', '.')].$(revision)-dev # 按需调整格式
后续更新版本号时,仅修改变量组里的baseVersion即可,流水线YAML文件不会变更,不会出现在提交历史中。
方案2:阶段级变量+作业输出传递键值
如果必须用外部文件存储版本号,可通过作业输出变量把读取到的baseVersion传递到后续阶段,在阶段级变量中定义counter:
jobs: - job: ReadVersionFile steps: - powershell: | $baseVersion = Get-Content ./version.txt -Raw | Trim Write-Output "##vso[task.setvariable variable=squilversionkey;isOutput=true]$baseVersion" name: VersionStep - job: BuildWithCounter dependsOn: ReadVersionFile variables: squilversionkey: $[ dependencies.ReadVersionFile.outputs['VersionStep.squilversionkey'] ] revision: $[ counter(variables['squilversionkey'], 0) ] fullVersion: $(squilversionkey).$(revision) steps: # 执行构建、写入版本文件等任务
这种方式仅拆分两个关联作业,既保留外部文件存版本的需求,又能正常使用counter的动态语法。
方案3:预生成counter键并更新流水线变量
若不想拆分作业,可使用Azure DevOps CLI在流水线启动时读取外部文件版本号,更新专门的流水线变量作为counter的键:
steps: - powershell: | $baseVersion = Get-Content ./version.txt -Raw | Trim az pipelines variable update --name squilversionkey --value "$baseVersion" --org $(System.CollectionUri) --project $(System.TeamProject) --pipeline-id $(System.DefinitionId) env: AZURE_DEVOPS_EXT_PAT: $(System.AccessToken) # 后续在变量定义中使用counter variables: - name: revision value: $[ counter(variables['squilversionkey'], 0) ]
注意:此方法需要流水线具备编辑权限,变量更新后会对后续运行生效。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

