Jenkins中用Sed自动升级package.json版本号(修改第三位)
解决Jenkins中package.json第三位版本号自动升级的问题
我来帮你调整sed命令,精准修改package.json的第三位版本号!
你的现有命令之所以会修改第二位版本号,是因为正则只匹配到了第一个小数点后的内容。咱们换个思路,直接定位到第二个小数点之后的数字段来替换:
推荐的sed命令
sed -i "/version/s/\"version\": \"\([0-9]\+\.[0-9]\+\)\.[0-9]\+\"/\"version\": \"\1.${BUILD_NUMBER}\"/" package.json
命令解释
/version/:先定位到包含version关键字的行,避免误改其他字段"version": "\([0-9]\+\.[0-9]\+\)\.[0-9]\+":用括号捕获前两位版本号(比如你的0.0),然后匹配第三位数字"version": "\1.${BUILD_NUMBER}":把捕获到的前两位保留,替换第三位为Jenkins的${BUILD_NUMBER}
更简洁的写法
如果你的版本号格式固定是x.x.x,也可以用更简短的正则,直接替换最后一个小数点后的数字:
sed -i "/version/s/\(\.[0-9]\+\)\"/\.\${BUILD_NUMBER}\"/" package.json
这个命令会匹配版本号行里最后一个.数字"的部分,直接替换成.${BUILD_NUMBER}",效果完全一样。
测试验证
用你的示例package.json片段测试,执行后版本号会从"version": "0.0.0"变成"version": "0.0.${BUILD_NUMBER}"(比如BUILD_NUMBER为222时就是0.0.222),完全符合你的需求。
小提示
如果你的Jenkins节点用的是BSD sed(比如MacOS环境),需要把-i改成-i '',否则会生成备份文件。Linux节点的GNU sed直接用-i就没问题。
内容的提问来源于stack exchange,提问作者Vladimir Voitekhovski
相关产品推荐
相关产品推荐

