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

Jenkins流水线如何获取完整的多行提交信息?

解决Jenkins流水线获取完整提交消息的问题

这个问题我之前也遇到过!Jenkins默认只提取提交消息第一行的行为确实挺头疼的,不过有两个靠谱的解决办法:

方法1:用Jenkins内置的rawMessage属性直接获取

其实currentBuild.changeSets返回的提交对象里,除了大家常用的message(会截断到第一行),还有个rawMessage属性——它保存了完整的原始提交消息,包括所有自动换行后的内容。

直接用这个属性就行,示例流水线代码:

currentBuild.changeSets.each { changeSet ->
    changeSet.each { commit ->
        // 输出带换行的完整消息
        echo "完整提交消息:\n${commit.rawMessage}"
        
        // 如果需要把换行合并成单行(和git log显示的单行效果一致),可以加个处理
        def singleLineFullMessage = commit.rawMessage.replaceAll('\n', ' ').trim()
        echo "单行完整消息:${singleLineFullMessage}"
    }
}

方法2:通过git log命令兜底获取

如果你的Jenkins版本或者Git插件版本比较旧,rawMessage属性不生效的话,直接在流水线里执行git log命令也是个稳办法。用%B格式符就能拉取到完整的提交消息:

示例代码:

currentBuild.changeSets.each { changeSet ->
    changeSet.each { commit ->
        def commitHash = commit.id
        // 执行git log拿到完整消息,returnStdout设为true返回输出内容
        def fullMessage = sh(
            script: "git log --pretty=format:'%B' -n 1 ${commitHash}",
            returnStdout: true
        ).trim()
        
        echo "完整提交消息:\n${fullMessage}"
    }
}

为什么会出现这个问题?

其实这是Git的默认行为:为了可读性,Git会自动把超过72字符的提交消息换行,但完整的消息内容还是存在仓库里的。Jenkins的message属性默认只提取第一行作为简短描述,而rawMessage则保留了原始的未截断内容。

内容的提问来源于stack exchange,提问作者Кривошеев Сергей

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:57:04