Jenkins Pipeline获取自上次成功构建以来的所有变更日志

111次阅读
没有评论

问题描述

在Jenkins Pipeline中,你已经能够通过以下方式获取当前构建的变更日志:

def changeLogSets = currentBuild.changeSets

但你是否能够获取自上次成功构建以来的所有变更日志呢?

解决方案

请注意以下操作可能涉及版本差异,请根据实际情况做好备份。

方案1 – 使用Jenkins Pipeline脚本

以下是一个使用Jenkins Pipeline脚本的示例,可以获取自上次成功构建以来的所有变更日志。

node {
    def passedBuilds = []
    lastSuccessfulBuild(passedBuilds, currentBuild)
    def changeLog = getChangeLog(passedBuilds)
    echo "Change Log since last successful build:\n${changeLog}"
}

def lastSuccessfulBuild(passedBuilds, build) {
    if ((build != null) && (build.result != 'SUCCESS')) {
        passedBuilds.add(build)
        lastSuccessfulBuild(passedBuilds, build.getPreviousBuild())
    }
}

@NonCPS
def getChangeLog(passedBuilds) {
    def log = ""
    for (int x = 0; x < passedBuilds.size(); x++) {
        def currentBuild = passedBuilds[x];
        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]
                log += "* ${entry.msg} by ${entry.author} \n"
            }
        }
    }
    return log
}

上述脚本会获取自上次成功构建以来的所有变更日志,并以Markdown格式显示。

方案2 – 使用”Changes Since Last Success Plugin”

另外,你也可以尝试使用”Changes Since Last Success Plugin”,但需要注意这是一个独立的插件,可能无法直接与Pipeline一起使用。插件详情请参考:Changes Since Last Success Plugin

以上两种方案都能帮助你获取自上次成功构建以来的变更日志,你可以根据实际需求选择其中之一。

正文完