Jenkins Pipeline'daki son başarılı yapımdan bu yana tüm değişiklik günlüklerini alın


11

Jenkins boru hattımda, şu anki derlemenin değişiklik günlüklerini alabilirim.

def changeLogSets = currentBuild.changeSets

Son başarılı derlemeden bu yana tüm değişiklik günlüklerini almanın bir yolu var mı?

Yanıtlar:


9

Böyle bir şey deneyebilirsiniz:

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

Ayrıca, "Son Başarı Eklentisinden Beri Değişiklikler" i deneyebilirsiniz: https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

Ancak boru hattı ile birlikte çalışmaz, bu ayrı bir yaklaşımdır.


Görünüşe göre bu çözüm, son başarılı yapıların değişiklik günlüklerini veriyor. Aslında aradığım şey, son başarılı derlemeden bu yana günlük kayıtları (son başarısız derlemelerin) idi. Ama cevabınız kesinlikle faydalı. Build.getpreviousebuuld () ve özyineleme özlediğim şeydi. Cevabınız için çok teşekkür ederim.
Arı

1
Her zaman hoş geldiniz ;-)
user54 14:17

Ben özyinelemeli çözüm bir sürü yapı geçmesi durumunda yığın tükenmekte sorunlarla karşılaşabileceğinden şüpheleniyorum. Yine de yinelemeli bir sürece geçmek çok zor olmaz.
46 drewish

1

Bulduğum gibi bu size yardımcı olacaktır. Bu şekilde Jenkins ile herhangi bir proje derlemesinin en son başarılı derleme değişiklik günlük dosyasını alabilirsiniz.

$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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.