如何使用Jenkins共享库收集构建历史记录 [英] How to collect build history by using Jenkins Shared Libraries

查看:55
本文介绍了如何使用Jenkins共享库收集构建历史记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们想分析Jenkins工作中的构建历史.我们不想批准任何危险的签名,因此应在Jenkins共享库中将此逻辑实现为一个步骤.我们使用文件夹和多分支作业,因此该机制必须递归地分析项目.

We would like to analyze the build history in a Jenkins job. We don't want to approve any dangerous signatures, so the logic should be implemented as a step in a Jenkins Shared Library. We use folders and multibranch jobs, so the mechanism has to analyze items recursively.

如何实施?

推荐答案

要收集所有内部版本,可以使用以下代码.

To collect all builds the following code could be used.

import hudson.model.Job
import hudson.model.Run
import jenkins.model.Jenkins

List<Map<String, Object>> call() {
    def builds = []
    for (def job in findAllJobs()) {
        for (def build in job.builds) {
            builds << [
                name: build.parent.name,
                fullName: build.parent.fullName,
                result: build.result?.toString(),
                number: build.number as String,
                date: build.time,
                timestamp: build.timeInMillis,
                url: "${build.parent.absoluteUrl}${build.number}/"
            ]
        }
    }
    return builds
}

List<Job> findAllJobs() {
    def jobs = []
    jobs.addAll(jenkins.getItems(Job))
    def folderClass = loadClass('com.cloudbees.hudson.plugins.folder.AbstractFolder')
    for (def folder in jenkins.getItems(folderClass)) {
        jobs.addAll(findNestedJobs(folder, folderClass))
    }
    return jobs
}

List<Job> findNestedJobs(def folder, Class<?> folderClass) {
    def jobs = []
    for (def item in folder.items) {
        if (folderClass.isAssignableFrom(item.class)) {
            jobs.addAll(findNestedJobs(item, folderClass))
        } else if (item instanceof Job) {
            jobs << item
        }
    }
    return jobs
}

Class<?> loadClass(String className) {
    return Class.forName(className, true, jenkins.pluginManager.uberClassLoader)
}

Jenkins getJenkins() {
    return Jenkins.get()
}

每次构建都会返回

  • 全名(例如< folder>/< job>/<分支名称| PR号> ))
  • 名称(例如分支名称| PR编号)
  • 结果( SUCCESS FAILURE 等)
  • 号码
  • date-执行日期( java.util.Date )
  • 时间戳-执行日期()
  • url-构建页面的绝对URL

例如,如果仅必须执行在24小时内执行的构建,则可以使用两种方法:

If for example only builds executed within 24 hours must be executed, two approach could be used:

  1. 执行步骤和下一个过滤器结果
  2. 修改Jenkins共享库步骤,以在日期较早时停止收集作业

第二种方法更好,因为它不会强制逻辑遍历旧版本.

The second option is better because it doesn't force the logic to iterate through old builds.

这篇关于如何使用Jenkins共享库收集构建历史记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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