当前位置: 首页 > 面试题库 >

自上次成功构建以来,如何使用Groovy获取有关Jenkins的提交信息?

颜祖鹤
2023-03-14
问题内容

自上次成功构建以来,如何编写自定义的Groovy脚本以轻松地处理所有提交中的数据?


问题答案:

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

适应性代码:

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"


 类似资料:
  • 问题内容: 我已经设置了Jenkins,但是我想找出在当前版本和先前版本之间添加/更改了哪些文件。我想根据是否更改了源树的某些部分来运行一些长期运行的测试。 尽管有人建议使用SVN提交后钩子,但在Internet上搜寻时,我在Hudson / Jenkins中找不到任何提及此功能的地方。也许很简单,每个人(我除外)都知道该怎么做! 这可能吗? 问题答案: 如果您要轮询更改并使用SVN更新,CI服务

  • 问题内容: 有人拥有Jenkins Pipeline脚本,可以将自上一次成功构建以来的所有更改填充到变量中吗?我正在使用git和多分支管道作业。 问题答案: 好吧,我设法把一些东西凑在一起。我敢肯定,您可以更好地迭代数组,但这是我现在所拥有的:

  • 问题内容: 我有一个任务,可以隐瞒每次提交来运行jenkins作业。在电子邮件正文中,我需要提及上次将代码存储起来的用户名。 是否有任何Jenkins变量可获取上次隐式提交的用户名 问题答案: 您应该查看 Email-ext插件 。它提供了很多功能和对电子邮件的控制,包括您的要求。 特别是,要仅显示提交更改的用户的名称,请使用:

  • 问题内容: 通常,为了获得最新成功构建的工件,我对以下URL进行了处理: http://jenkins.com/job/job_name/lastSuccessfulBuild/artifact/artifact1/jenkins.txt 有没有办法,我可以继续下去并在下面得到一个像? 问题答案: 是的,有一种方法,它非常简单:

  • 问题内容: 当需要有关类型的信息时,可以使用: 得到: 要么: 得到: 现在,在Python文档中可以找到有关这些功能的信息,但是我想在终端/命令行中获取有关这些功能的信息。应该怎么做? 问题答案: 以python:为例,将为您提供函数的文档字符串。

  • 问题内容: 我在Jenkins中有一个管道作业,我想知道它在其上运行的节点的名称。有没有办法从作业的Groovy脚本中获取节点名称? 我尝试了以下代码: 错误是: 我也尝试过这个: 但结果是“”。 问题答案: 有一个环境变量“ NODE_NAME”具有此功能。 您可以像这样访问它: 在编辑管道作业时,可以转到“管道语法”帮助链接(页面左侧),然后找到“全局变量”部分,然后单击“全局变量参考”,以找