Obtenha todos os logs de alterações desde a última compilação bem-sucedida no Jenkins Pipeline

11

No meu pipeline Jenkins, posso obter registros de alterações da compilação atual com isso.

def changeLogSets = currentBuild.changeSets

Existe uma maneira de obter todos os logs de alterações desde a última compilação bem-sucedida?

Abelha
fonte

Respostas:

9

Você pode tentar algo como isto:

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;
}

Além disso, você pode experimentar "Alterações desde o último plug-in de sucesso": https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

Mas não funcionará junto com o pipeline, essa é uma abordagem separada.

user54
fonte
Parece que esta solução fornece os logs de alterações das últimas compilações com êxito. Na verdade, o que eu estava procurando era logs do chnage (das últimas compilações malsucedidas) desde a última compilação bem-sucedida. Mas sua resposta é definitivamente útil. Build.getpreviousebuuld () e recursão era o que eu tinha perdido. Muito obrigado pela resposta.
Bee
11
Sempre bem-vindos ;-)
user54
Suspeito que a solução recursiva possa ter problemas de ficar sem pilha se você tiver passado por várias compilações. Não seria muito difícil mudar para um processo iterativo.
Drewish #
1

Como eu descobri, isso pode ajudá-lo. Com isso, você pode buscar o arquivo de log de alterações de compilação mais recente e bem-sucedido de qualquer compilação de projeto com 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
Ashu
fonte