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

如何提取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:06:05