【问题标题】:How to collect build history by using Jenkins Shared Libraries [closed]如何使用 Jenkins 共享库收集构建历史记录 [关闭]
【发布时间】:2021-07-25 22:36:31
【问题描述】:

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

如何实现?

【问题讨论】:

    标签: jenkins jenkins-shared-libraries


    【解决方案1】:

    要收集所有构建,可以使用以下代码。

    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()
    }
    

    每次构建都会返回:

    • 全名(例如&lt;folder&gt;/&lt;job&gt;/&lt;branch name|PR number&gt;
    • 姓名(例如branch name|PR number
    • 结果(SUCCESSFAILURE 等)
    • 号码
    • date - 执行日期 (java.util.Date)
    • 时间戳 - 执行日期 (long)
    • url - 构建页面的绝对 URL

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

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

    第二个选项更好,因为它不会强制逻辑遍历旧版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多