我有这个错误:
java.io.NotSerializableException: hudson.plugins.git.GitChangeSetList
当 ChangeSet!=null
但奇怪的是更新这个插件时出现了错误:Pipeline Shared Groovy Libraries,在这个工作正常之前,我使用 jenkins v 2.21 和 pipeline 2.4 我的代码是下一个:
def changeLogSets = currentBuild.rawBuild.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]
echo "${entry.commitId} by ${entry.author} on ${new Date(entry.timestamp)}: ${entry.msg}"
def files = new ArrayList(entry.affectedFiles)
for (int k = 0; k < files.size(); k++) {
def file = files[k]
echo " ${file.editType.name} ${file.path}"
}
}
}
changeLogSets= null
最佳答案
Jenkins 作业可以在执行过程中保存,这需要将它们序列化。 rawBuild 的内容无法序列化,因此如果您访问它,您需要在以 @NonCPS
开头的函数内执行此操作。例如:
showChangeLogs()
@NonCPS
def showChangeLogs() {
def changeLogSets = currentBuild.rawBuild.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]
echo "${entry.commitId} by ${entry.author} on ${new Date(entry.timestamp)}: ${entry.msg}"
def files = new ArrayList(entry.affectedFiles)
for (int k = 0; k < files.size(); k++) {
def file = files[k]
echo " ${file.editType.name} ${file.path}"
}
}
}
}
关于git - Jenkins 管道中的 changeSet 错误(错误 :java. io.NotSerializableException : hudson. plugins.git.GitChangeSetList),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39795652/