Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 詹金斯:查看最后的X版本_Jenkins_Jenkins Plugins - Fatal编程技术网

Jenkins 詹金斯:查看最后的X版本

Jenkins 詹金斯:查看最后的X版本,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我想查看几个Jenkins作业最近的X版本 因此,如果我想展示jobs 1-5的最后5个构建,它看起来是这样的: status build time ------------------------- pass job1#3 13:54 fail job1#2 13:05 fail job1#1 13:01 pass job5#1 12:17 pass job3#1 11:03 我怎样才能做到这一点

我想查看几个Jenkins作业最近的X版本

因此,如果我想展示jobs 1-5的最后5个构建,它看起来是这样的:

status    build     time
-------------------------
pass      job1#3    13:54
fail      job1#2    13:05
fail      job1#1    13:01
pass      job5#1    12:17
pass      job3#1    11:03
我怎样才能做到这一点


请注意,作业的生成是交织在一起的,因此如果一个作业最近运行了多个生成,它将显示比其他没有运行那么多的作业更多的内容。

在脚本控制台(Manage Jenkins->script Console)中执行以下脚本:


您可能需要更改
numHoursBack
常量,它控制返回以查找构建的小时数。以及决定构建列列宽的
buildNameWidth
(如果您有很长的作业和构建名称,您可能需要扩展它)。

这里是Jon Groovy脚本的一个清理版本。还显示最差的构建信息

import hudson.model.*;
import java.text.SimpleDateFormat;

//
// Settings
//
def numHoursBack = 24;
def dateFormat = new SimpleDateFormat("HH:mm");

def cutOfTime = System.currentTimeMillis() - numHoursBack * 3600 * 1000;

/**
 * Basic build information.
 */
def printBuildInfo(finalizedBuild) {
    String level = "INFO";
    String result = finalizedBuild.getResult().toString();
    switch (result) {
        case "UNSTABLE":
            level = "WARNING";
        break;
        case "FAILURE":
            level = "ERROR";
        break;
    }
    // basic info and URL
    println(String.format(
        "[%s] Build %s result is: %s.",
        level,
        finalizedBuild.getFullDisplayName(),
        result
    ));
    // pipe description from downstream
    def description = finalizedBuild.getDescription();
    if (description != null && !description.isEmpty()) {
        println(description.replaceAll("<br>", ""));
    }

    return finalizedBuild;
}

/**
 * Get recent build items.
 */
def getRencentBuilds(cutOfTime) {
    SortedMap res = new TreeMap();

    for (job in Jenkins.instance.getAllItems(BuildableItem.class)) {
        for (build in job.getBuilds()) {
            if (build.getTimeInMillis() < cutOfTime) {
                break;
            }
            res.put(build.getTimeInMillis(), build);
        }
    }

    return res;
}
/**
 * Print build items.
 *
 * minResult - minimum to print
 */
def printBuilds(builds, minResult, dateFormat) {
    def format = "%-10s %-8s %s";
    Result worstResult = Result.SUCCESS;
    def worstBuild = null;
    // header
    println(String.format(format, "status", "Time", "build"));
    // list
    for (entry in builds.descendingMap().entrySet()) {
        def build = entry.getValue();
        Result result = build.getResult();
        if (result.isWorseThan(worstResult)) {
            worstResult = result;
            worstBuild = build;
        }
        if (result.isWorseOrEqualTo(minResult)) {
            println(String.format(
                format, build.getResult(), dateFormat.format(build.getTime()), build.getFullDisplayName()
            ));
        }
    }

    return worstBuild;
}

def builds = getRencentBuilds(cutOfTime);
println ("\n\n----------------------\n Failed builds:\n");
def worstBuild = printBuilds(builds, Result.FAILURE, dateFormat);
println ("\n\n----------------------\n Worst build:\n");
if (worstBuild != null) {
    printBuildInfo(worstBuild);
}
println ("\n\n----------------------\n All builds:\n");
printBuilds(builds, Result.SUCCESS, dateFormat);
导入hudson.model.*;
导入java.text.simpleDataFormat;
//
//背景
//
def numHoursBack=24;
def dateFormat=新的SimpleDataFormat(“HH:mm”);
def cutOfTime=System.currentTimeMillis()-numHoursBack*3600*1000;
/**
*基本构建信息。
*/
def printBuildInfo(已完成构建){
String level=“INFO”;
字符串结果=finalizedBuild.getResult().toString();
开关(结果){
“不稳定”案例:
level=“警告”;
打破
案例“失败”:
level=“ERROR”;
打破
}
//基本信息和网址
println(String.format)(
“[%s]生成%s的结果是:%s.”,
水平,
finalizedBuild.getFullDisplayName(),
结果
));
//下游管道说明
def description=finalizedBuild.getDescription();
if(description!=null&!description.isEmpty()){
println(description.replaceAll(“
”,”); } 返回finalizedBuild; } /** *获取最近的生成项。 */ def getRencentBuilds(削减时间){ SortedMap res=新树映射(); for(Jenkins.instance.getAllItems(BuildableItem.class)中的作业){ for(内置作业。getBuilds()){ if(build.getTimeInMillis()
您是Jenkins实例的管理员吗?因为如果你是,那么在脚本控制台中编写脚本应该是相当容易的…我有管理员权限,但我对Jenkins是相当陌生的,从来没有使用过脚本控制台。我去看看。你能给我举几个例子说明我是如何做到这一点的吗?
status    build                         Time      
SUCCESS   xxx #107393                   17:53     
SUCCESS   xxx #107392                   17:48     
SUCCESS   xxx #107391                   17:43     
null      yyy #3030                     17:38     
SUCCESS   xxx #107390                   17:38     
FAILURE   zzz #3248                     17:37     
...
import hudson.model.*;
import java.text.SimpleDateFormat;

//
// Settings
//
def numHoursBack = 24;
def dateFormat = new SimpleDateFormat("HH:mm");

def cutOfTime = System.currentTimeMillis() - numHoursBack * 3600 * 1000;

/**
 * Basic build information.
 */
def printBuildInfo(finalizedBuild) {
    String level = "INFO";
    String result = finalizedBuild.getResult().toString();
    switch (result) {
        case "UNSTABLE":
            level = "WARNING";
        break;
        case "FAILURE":
            level = "ERROR";
        break;
    }
    // basic info and URL
    println(String.format(
        "[%s] Build %s result is: %s.",
        level,
        finalizedBuild.getFullDisplayName(),
        result
    ));
    // pipe description from downstream
    def description = finalizedBuild.getDescription();
    if (description != null && !description.isEmpty()) {
        println(description.replaceAll("<br>", ""));
    }

    return finalizedBuild;
}

/**
 * Get recent build items.
 */
def getRencentBuilds(cutOfTime) {
    SortedMap res = new TreeMap();

    for (job in Jenkins.instance.getAllItems(BuildableItem.class)) {
        for (build in job.getBuilds()) {
            if (build.getTimeInMillis() < cutOfTime) {
                break;
            }
            res.put(build.getTimeInMillis(), build);
        }
    }

    return res;
}
/**
 * Print build items.
 *
 * minResult - minimum to print
 */
def printBuilds(builds, minResult, dateFormat) {
    def format = "%-10s %-8s %s";
    Result worstResult = Result.SUCCESS;
    def worstBuild = null;
    // header
    println(String.format(format, "status", "Time", "build"));
    // list
    for (entry in builds.descendingMap().entrySet()) {
        def build = entry.getValue();
        Result result = build.getResult();
        if (result.isWorseThan(worstResult)) {
            worstResult = result;
            worstBuild = build;
        }
        if (result.isWorseOrEqualTo(minResult)) {
            println(String.format(
                format, build.getResult(), dateFormat.format(build.getTime()), build.getFullDisplayName()
            ));
        }
    }

    return worstBuild;
}

def builds = getRencentBuilds(cutOfTime);
println ("\n\n----------------------\n Failed builds:\n");
def worstBuild = printBuilds(builds, Result.FAILURE, dateFormat);
println ("\n\n----------------------\n Worst build:\n");
if (worstBuild != null) {
    printBuildInfo(worstBuild);
}
println ("\n\n----------------------\n All builds:\n");
printBuilds(builds, Result.SUCCESS, dateFormat);