You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkinsfile中自动提取package.json版本号重命名dist文件夹

解决方案

方法1:使用jq解析版本号(推荐,轻量高效)

绝大多数Linux构建环境默认预装jq(轻量JSON解析工具),如果环境未安装可提前执行apt install jq/yum install jq完成安装。
修改后的Jenkinsfile步骤如下:

steps {
   withEnv(["TOKEN=${NPM_REGISTRY_TOKEN}"]) {
       sh 'echo "//registry.npmjs.org/:_authToken=${TOKEN}" >> ~/.npmrc'
       sh 'npm publish'
       sh '''
           # 提取package.json中的version字段
           VERSION=$(jq -r '.version' package.json)
           # 重命名dist文件夹
           mv /var/lib/jenkins/workspace/sdk-js_master/dist /var/lib/jenkins/workspace/sdk-js_master/${VERSION}
       '''
   }
}

说明:jq -r '.version'命令会直接读取package.json的version字段,-r参数会输出原始字符串,自动去掉JSON字段自带的双引号。


方法2:使用Node.js自带能力提取版本号(无额外依赖,兼容性更强)

因为你的构建流程需要执行npm publish,必然已经安装Node.js环境,该方法不需要安装任何额外工具,稳定性更高:
修改后的Jenkinsfile步骤如下:

steps {
   withEnv(["TOKEN=${NPM_REGISTRY_TOKEN}"]) {
       sh 'echo "//registry.npmjs.org/:_authToken=${TOKEN}" >> ~/.npmrc'
       sh 'npm publish'
       sh '''
           # 调用Node.js执行JS代码直接读取version字段
           VERSION=$(node -p "require('./package.json').version")
           # 重命名dist文件夹
           mv /var/lib/jenkins/workspace/sdk-js_master/dist /var/lib/jenkins/workspace/sdk-js_master/${VERSION}
       '''
   }
}

说明:node -p 参数会执行后面的JS代码并打印输出结果,直接通过模块加载逻辑读取package.json的version字段,完全不需要处理复杂的正则匹配,不受package.json格式缩进、换行变化的影响。


优化建议

  • 可以把mv命令的全路径简化为相对路径,Jenkins执行步骤的默认工作目录就是任务的根目录,修改后命令更精简,就算工作区路径变更也不需要调整:
    mv dist ./${VERSION}
    
  • 如果你的package.json不在sh执行的当前目录,把命令中package.json的路径替换为对应文件的绝对/相对路径即可。

内容的提问来源于stack exchange,提问作者rumon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:15:01