Отримайте всі журнали змін за останній успішний збір в трубопроводі Дженкінс


11

У своєму трубопроводі про Дженкінса я можу отримати журнали змін поточної збірки цим способом.

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

Але це не буде працювати разом з трубопроводом, це окремий підхід.


Здається, це рішення дає журнали змін останніх успішних побудов. Що я насправді шукав - це керування журналами (останніх невдалих збірок) з моменту останньої успішної збірки. Але ваш answr, безумовно, корисний. Build.getpreviousebuuld () і рекурсія - це те, що я пропустив. Дуже дякую за відповідь.
Бджола

1
Завжди ласкаво просимо ;-)
користувач54

Я підозрюю, що рекурсивне рішення може зіткнутися з проблемами, що закінчуються стеком, якби у вас це було через багато складових. Не було б занадто важко, щоб перейти до ітераційного процесу.
мальовничий

1

Як я виявив, це може допомогти вам. За допомогою цього ви можете отримати найновіший файл журналу успішних змін будь-якого проекту, створений за допомогою Дженкінса.

$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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.