如何在GitHub Action中获取Node.js脚本输出的版本号
在GitHub Action中提取Node脚本输出的版本号
方法一:让Node脚本输出纯净版本号(推荐)
修改你的Node脚本patch-file.ts,确保它仅输出版本号,把非版本号的日志重定向到stderr避免干扰:
// patch-file.ts // 其他业务逻辑... console.error("脚本执行日志等非版本号内容"); // 这类输出会被npm的日志捕获,不会混入版本号 console.log(version); // 仅将版本号输出到stdout
然后在GitHub Action步骤中,通过--silent去掉npm的前缀日志,直接捕获版本号并设置为Action输出变量:
- name: Update File id: update_file run: | VERSION=$(npm run patch-file --silent) echo "version=$VERSION" >> $GITHUB_OUTPUT
后续步骤可以直接通过${{ steps.update_file.outputs.version }}引用这个版本号:
- name: Use Generated Version run: echo "新版本号是 ${{ steps.update_file.outputs.version }}"
方法二:从现有输出中提取版本号
如果不想修改Node脚本,可通过命令行工具从现有输出里提取版本号。比如用awk直接取输出的最后一个字段:
- name: Update File id: update_file run: | VERSION=$(npm run patch-file | awk '{print $NF}') echo "version=$VERSION" >> $GITHUB_OUTPUT
也可以用grep匹配版本号的格式(如x.x.x)来精准提取:
- name: Update File id: update_file run: | VERSION=$(npm run patch-file | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') echo "version=$VERSION" >> $GITHUB_OUTPUT
后续步骤同样通过${{ steps.update_file.outputs.version }}调用版本号。如果输出有多行,可搭配tail -n 1取最后一行再处理,确保只捕获到版本号所在行。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

