Jenkins Pipelineで最後に成功したビルド以降のすべての変更ログを取得します


11

Jenkinsパイプラインでは、これによって現在のビルドの変更ログを取得できます。

def changeLogSets = currentBuild.changeSets

最後に成功したビルド以降のすべての変更ログを取得する方法はありますか?

回答:


9

あなたはこのようなものを試すかもしれません:

node('my_kubernetes_pod') {
    passedBuilds = []

    lastSuccessfulBuild(passedBuilds, currentBuild);

    def changeLog = getChangeLog(passedBuilds)
    echo "changeLog ${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;
}

さらに、「最後の成功プラグイン以降の変更」を試すこともできます:https : //wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

しかし、それはパイプラインと一緒に機能しません、これは別のアプローチです。


このソリューションは、最後の成功したビルドの変更ログを提供するようです。私が実際に探していたのは、前回の成功したビルド以降の(最後の失敗したビルドの)変更ログです。しかし、あなたの回答は間違いなく役に立ちます。Build.getpreviousebuuld()と再帰は、私が見逃していたものでした。回答ありがとうございます。
Bee

1
いつでも歓迎;-)
user54 '10 / 10/14

再帰的な解決策では、多くのビルドを実行した場合、スタックが不足する問題が発生する可能性があると思います。ただし、反復プロセスに切り替えるのはそれほど難しくありません。
2017年

1

私が見つけたようにこれはあなたを助けるでしょう。これにより、Jenkinsでビルドしたプロジェクトの最新の成功したビルド変更ログファイルを取得できます。

$DirectoryA = "D:\Jenkins\jobs\projectName\builds"  ####Jenkind directory
$firstfolder = Get-ChildItem -Path $DirectoryA | Where-Object {$_.PSIsContainer} | Sort-Object LastWriteTime -Descending | Select-Object -First 1
$DirectoryB = $DirectoryA + "\" + $firstfolder

$sVnLoGfIle = $DirectoryB + "\" + "changelog.xml" 

write-host $sVnLoGfIle
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.