如何在VSTS中使用Git标签或package.json版本作为发布名称
没问题!我帮你梳理下怎么把Azure DevOps(原VSTS)的发布名称改成和应用版本绑定的格式,不管是从package.json读取还是用Git标签,都能搞定,分两种场景给你详细说:
这种适合你的版本号维护在package.json里的情况:
第一步:在构建定义中添加版本提取任务
打开你的CI构建定义,在构建流程的早期阶段(比如代码拉取后、测试/打包前)添加一个PowerShell任务(如果是Linux代理就用Bash任务),用来读取package.json的version字段并设置为构建输出变量:
PowerShell脚本示例:# 假设package.json在代码根目录,路径不对的话自行调整 $packageJsonContent = Get-Content -Path "./package.json" -Raw | ConvertFrom-Json # 设置名为AppVersion的构建变量,isOutput=true确保能传递到发布环节 Write-Host "##vso[task.setvariable variable=AppVersion;isOutput=true]$($packageJsonContent.version)"保存构建定义,先手动跑一次构建验证这个任务是否成功输出了
AppVersion变量(可以在构建日志里搜索这个关键词)。第二步:修改发布定义的名称格式
打开你的自动发布定义,切换到「选项」标签页,找到「发布名称格式」设置项,把默认的$(rev:r)替换成$(Build.AppVersion)。这样每次触发发布时,就会自动使用构建环节提取到的package.json版本号作为发布名称了。
如果你的版本是通过yarn打标签(比如v1.2.3这种格式)维护的,就用这个方案:
第一步:确保构建能拉取Git标签
先打开构建定义的「获取源代码」步骤,勾选「获取标签」选项,这样构建代理会拉取仓库里的所有标签。第二步:在构建定义中添加标签提取任务
同样在构建流程早期添加PowerShell/Bash任务,提取当前构建对应的最新Git标签:
PowerShell脚本示例(如果标签带v前缀,想去掉的话可以加注释里的替换逻辑):# 获取当前提交对应的最新标签 $latestTag = git describe --tags --abbrev=0 # 如果标签是v开头(比如v1.2.3),需要去掉v的话取消下面这行注释 # $latestTag = $latestTag -replace '^v', '' # 设置构建变量 Write-Host "##vso[task.setvariable variable=AppVersion;isOutput=true]$latestTag"同样先跑一次构建验证变量是否正确输出。
第三步:修改发布定义的名称格式
和方案一一样,在发布定义的「选项」里把发布名称改成$(Build.AppVersion)即可。
- 如果你用的是多阶段构建,需要确保变量在阶段间正确传递(不过单阶段构建直接用
$(Build.AppVersion)就没问题); - 手动触发发布时,要选择带有正确版本标签/对应package.json版本的构建版本,不然发布名称可能为空或不符合预期;
- 可以在发布定义的「选项」里给名称格式加额外后缀,比如
$(Build.AppVersion)-$(rev:r),这样如果同一个版本需要多次发布,也能区分开。
内容的提问来源于stack exchange,提问作者Th3S4mur41

