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猜结构 :happy:
currentBuild.changeSets{
items[{
msg //提交注释
commitId //提交hash值
author{ //提交⽤户相关信息
id
fullName
}
timestamp
affectedFiles[{ //受影响的⽂件列表
editType{
name
}
truncated命令不记录日志path: "path"
}]
affectedPaths[// 受影响的⽬录,是个Collection<String>  "path-a","path-b"
]
}]
}
参考⽂章:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。