自上次成功构建后,如何使用Groovy获取有关Jenkins的提交信息? [英] How to get commits information on Jenkins using Groovy since last successful build?

查看:1250
本文介绍了自上次成功构建后,如何使用Groovy获取有关Jenkins的提交信息?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何编写自定义groovy脚本来轻松操作自上次成功构建以来所有提交的数据? 解决方案

添加新构建步骤在gradle / maven步之后 - >执行系统groovy脚本。



可修改的代码:

  import com.tikal.jenkins.plugins.multijob。* 
import hudson。*
import hudson.model。*
import hudson.plugins.git。*
导入hudson.slaves。*
导入hudson.tasks。*

def ln = System.getProperty('line.separator')
println------- -------- Groovy Changelog脚本已启动--------------- $ ln

def lastSuccesfulBuild = build.previousNotFailedBuild
def失败= build.result!= hudson.model.Result.SUCCESS
$ b println最后成功构建:$ {lastSuccesfulBuild}
println当前构建结果,失败?:$ {failed}


def currResult = build.result
def prevResult = build.previousBuild?.result?:null

def consecutiv eSuccess = currResult == hudson.model.Result.SUCCESS&& prevResult == hudson.model.Result.SUCCESS

def builds = []
def changes = []
def count = 0



if(consecutiveSuccess){
printlnLast Build成功,获得最新的变化$ ln

builds<< build
def changeItems = build.changeSet.items
printlnChange Items:$ {changeItems} $ ln

count + = changeItems.length
changes + = changeItems as List
} else {
println上一次编译没有成功,从所有失败的编译中获得更改以及$ ln

printlnBUILD:$ build $ ln

printlnHudson version:$ build.hudsonVersion $ ln

println更改集:$ build.changeSet $ ln

println更改设置项目:$ build.changeSet.items $ ln

while(lastSuccesfulBuild){
builds<< lastSuccesfulBuild $ b $ def def changeSet = lastSuccesfulBuild.changeSet
if(!changeSet.emptySet){
def changeItems = lastSuccesfulBuild.changeSet.items
count + = changeItems.length
changes + = changeItems as List
}
lastSuccesfulBuild = lastSuccesfulBuild.nextBuild


$ b def file = new File(build.getEnvVars()[ WORKSPACE] +'\\changelog')
file.delete()
file = new File(build.getEnvVars()[WORKSPACE] +'\\changelog')

if(count == 0){
file<< 没有变化。$ ln
}

changes.each {item - >
printlnitem:$ item $ ln
printlnauthor:$ item.authorName $ ln
printlnmsg:$ item.msg $ ln
printlnid :$ item.id $ ln
println修订版:$ item.revision $ ln
println评论:$ item.comment $ ln
printlncommentAnnated:$ item.commentAnnotated $ ln
printlnaffectedFiles:$ item.affectedFiles $ ln
printlnaffectedPaths:$ item.affectedPaths $ ln
printlncommitId:$ item.commitId $ ln
printlntimestamp:$ item.timestamp $ ln
printlndate:$ item.date $ ln

file<< 提交ID:$ item.id,由$ item.date上的$ item.author,时间戳:$ item.timestamp $ ln
文件<< $ item.comment $ ln

item.affectedFiles.each {cl - >
printlneditType:$ cl.editType.description $ ln
printlnchangeSet:$ cl.changeSet $ ln
println路径:$ cl.path $ ln
printlnsrc:$ cl.src $ ln
printlndst:$ cl.dst $ ln

文件<< $ cl.editType.description:$ cl.path $ ln
}
文件<< $ ln
}

println--------------- Groovy Changelog脚本已完成------------ --- $ ln


How to write custom groovy script to easily manipulate data from all commits since last successful build?

解决方案

Add new build step after gradle/maven step -> Execute system groovy script.

Adaptable code:

import com.tikal.jenkins.plugins.multijob.*
import hudson.*
import hudson.model.*
import hudson.plugins.git.*
import hudson.slaves.*
import hudson.tasks.*

def ln = System.getProperty('line.separator')
println "---------------Groovy Changelog script Started---------------$ln"

def lastSuccesfulBuild = build.previousNotFailedBuild
def failed = build.result != hudson.model.Result.SUCCESS

println "Last Succesful Build: ${lastSuccesfulBuild}"
println "Current Build Result, is failed?: ${failed}"


def currResult = build.result
def prevResult = build.previousBuild?.result ?: null

def consecutiveSuccess = currResult == hudson.model.Result.SUCCESS && prevResult == hudson.model.Result.SUCCESS

def builds = []
def changes = []
def count = 0



if (consecutiveSuccess) {
    println "Last Build was sucessful, getting latest changes$ln"

    builds << build
    def changeItems = build.changeSet.items
    println "Change Items: ${changeItems}$ln"

    count += changeItems.length
    changes += changeItems as List
} else {
    println "Last Build was not sucessful, getting changes from all failed build as well$ln"

    println "BUILD: $build$ln"

    println "Hudson version: $build.hudsonVersion$ln"

    println "Change set: $build.changeSet$ln"

    println "Change set items: $build.changeSet.items$ln"

    while (lastSuccesfulBuild) {
        builds << lastSuccesfulBuild
        def changeSet = lastSuccesfulBuild.changeSet
        if (!changeSet.emptySet) {
            def changeItems = lastSuccesfulBuild.changeSet.items
            count += changeItems.length
            changes += changeItems as List
        }
        lastSuccesfulBuild = lastSuccesfulBuild.nextBuild
    }
}

def file = new File(build.getEnvVars()["WORKSPACE"] + '\\changelog')
file.delete()
file = new File(build.getEnvVars()["WORKSPACE"] + '\\changelog')

if (count ==0){
    file << "No changes.$ln"
}

changes.each { item ->
    println "item: $item$ln"
    println "author: $item.authorName$ln"
    println "msg: $item.msg$ln"
    println "id: $item.id$ln"
    println "revision: $item.revision$ln"
    println "comment: $item.comment$ln"
    println "commentAnnotated: $item.commentAnnotated$ln"
    println "affectedFiles: $item.affectedFiles$ln"
    println "affectedPaths: $item.affectedPaths$ln"
    println "commitId: $item.commitId$ln"
    println "timestamp: $item.timestamp$ln"
    println "date: $item.date$ln"

    file << "Commit ID: $item.id, by $item.author on $item.date, timestamp: $item.timestamp$ln"
    file << "$item.comment$ln"

    item.affectedFiles.each { cl -> 
        println "editType: $cl.editType.description$ln"
        println "changeSet: $cl.changeSet$ln"
        println "path: $cl.path$ln"
        println "src: $cl.src$ln"
        println "dst: $cl.dst$ln"

        file << "$cl.editType.description: $cl.path$ln"
    }
    file << "$ln"
}

println "---------------Groovy Changelog script Finished---------------$ln"

这篇关于自上次成功构建后,如何使用Groovy获取有关Jenkins的提交信息?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆