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,提问作者Кривошеев Сергей
相关产品推荐
相关产品推荐

