如何提取Jenkins运行bash脚本后末尾输出的版本值
提取Jenkins中长耗时bash脚本末尾版本号的最优方案
因为版本输出固定在脚本执行的末尾,最优方案需要兼顾不额外增加脚本执行耗时、低内存占用、可适配不同使用场景三个核心要求,具体实现分两种常用场景:
场景1:仅需要在Shell执行上下文内使用版本号
直接在执行脚本时通过管道匹配输出末尾的版本内容,无需缓存全量日志:# 执行脚本同时提取版本号,输出的其他内容依然会正常打印到控制台 VERSION=$(./test | tee /dev/tty | grep -oP 'Updated to version \K[\d.]+' | tail -n 1) # 直接使用变量即可 echo "提取到的版本号: $VERSION"说明:
tee /dev/tty保证脚本的实时输出依然能显示在Jenkins控制台,方便排查执行问题;tail -n 1确保即使脚本中间出现类似格式的输出,也只取末尾的最终版本值。场景2:需要把版本号传递到Jenkins Pipeline后续阶段使用
优先选择日志落盘的方式,避免大日志量导致Jenkins主节点内存溢出:pipeline { agent any stages { stage('执行测试脚本') { steps { script { // 执行脚本,同时输出到控制台和日志文件 sh './test | tee script_full.log' // 从日志文件提取版本号 env.RELEASE_VERSION = sh( script: 'grep -oP "Updated to version \\K[\\d.]+" script_full.log | tail -n 1', returnStdout: true ).trim() echo "获取到发布版本: ${env.RELEASE_VERSION}" } } } stage('后续部署/通知阶段') { steps { echo "使用上一步得到的版本号: ${env.RELEASE_VERSION}" } } } }
注意:如果你的脚本输出内容超过100M,建议提取版本后主动删除日志文件,避免Jenkins工作区占用过高。
内容的提问来源于stack exchange,提问作者jipot
相关产品推荐
相关产品推荐

