Jenkins流水线获取提交日志
写在前
之前使用Jenkins pipeline的时候发现拿不到日志,使用multiple scms插件对应是日志变量获取日志的方式失效了,
但是查看流水线Pipeline Syntax发现checkout竟然有包含提交日志的选项,这里一定有办法获取到日志,苦于之前时间紧任务重,就先当它不能获取日志😄
最近在搞点东西,顺便想到了点关键词终于google到了,没看到其它博客里有写,就记录一下
实现原理
在pipeline块外部声名一个使用@NonCPS
修饰的方法,从构建时变量currentBuild.changeSets
中获取日志对象,遍历对象得到更新日志
Groovy代码
在pipeline的stages/stage/script块中调用这个方法就能得到日志了,写个最简单的demo示意
#!groovy // Declarative // pipeline { agent any stages { stage('拉代码') { steps { //这里就不写了,用pipeline syntax生成一份checkout命令 } } stage('输出日志') { steps { script{ //调用方法得到日志 并 输出 def changeString = getChangeString() echo "$changeString" } } } } } @NonCPS def getChangeString() { MAX_MSG_LEN = 100 def changeString = "" echo "Gathering SCM changes" def changeLogSets = currentBuild.changeSets for (int i = 0; i < changeLogSets.size(); i++) { def entries = changeLogSets[i].items for (int j = 0; j < entries.length; j++) { def entry = entries[j] truncated_msg = entry.msg.take(MAX_MSG_LEN) changeString += " - ${truncated_msg} [${entry.author}]\n" } } if (!changeString) { changeString = " - No new changes" } return changeString }
currentBuild.changeSets数据结构伪代码
另外这里输出的部分不是changeSets的全部,下列伪代码
参考了一些,又查API文档写了些,差不多够用了,不够的请参考api猜结构 :happy:
currentBuild.changeSets{ items[{ msg //提交注释 commitId //提交hash值 author{ //提交用户相关信息 id fullName } timestamp affectedFiles[{ //受影响的文件列表 editType{ name } path: "path" }] affectedPaths[// 受影响的目录,是个Collection<String> "path-a","path-b" ] }] }
参考文章:
https://javadoc.jenkins.io/hudson/scm/ChangeLogSet.Entry.html#Entry--
本文作者:东北小狐狸
本文链接:https://www.cnblogs.com/hellxz/p/11807151.html
版权声明:本作品采用自由转载-非商用-非衍生-保持署名 (CC BY-NC-ND 3.0)许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步