Nhận tất cả nhật ký thay đổi kể từ lần xây dựng thành công cuối cùng trong Đường ống Jenkins


11

Trong đường ống Jenkins của tôi, tôi có thể nhận được nhật ký thay đổi của bản dựng hiện tại bằng cách này.

def changeLogSets = currentBuild.changeSets

Có cách nào để có được tất cả nhật ký thay đổi kể từ lần xây dựng thành công cuối cùng không?

Câu trả lời:


9

Bạn có thể thử một cái gì đó như thế này:

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

Ngoài ra, bạn có thể dùng thử "Thay đổi kể từ Plugin thành công cuối cùng": https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

Nhưng nó sẽ không hoạt động cùng với đường ống, đây là một cách tiếp cận riêng.


Có vẻ như giải pháp này cung cấp nhật ký thay đổi của các bản dựng thành công cuối cùng. Những gì tôi thực sự đang tìm kiếm là nhật ký chnage (của các bản dựng không thành công cuối cùng) kể từ lần xây dựng thành công cuối cùng. Nhưng câu trả lời của bạn chắc chắn là hữu ích. Build.getpreviousebuuld () và đệ quy là những gì tôi đã bỏ lỡ. Cảm ơn bạn rất nhiều cho câu trả lời.
Ong

1
Luôn được chào đón ;-)
user54

Tôi nghi ngờ rằng giải pháp đệ quy có thể gặp vấn đề khi hết stack nếu bạn đã trải qua rất nhiều bản dựng. Sẽ không quá khó để chuyển sang một quá trình lặp đi lặp lại.
thu hút

1

Như tôi tìm thấy có thể điều này sẽ giúp bạn. Với điều này, bạn có thể tìm nạp tệp nhật ký thay đổi bản dựng thành công mới nhất của bất kỳ bản dựng dự án nào với 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.