Jenkins - 在构建步骤中检索完整的控制台输出

Inb*_*ose 18 continuous-integration hudson jenkins jenkins-plugins

我一直在淘天的互联网,我也有类似的一个问题这个.

我需要以原始(纯文本)文本检索控制台输出.但是,如果我能用HTML获得它也很好,我总是可以解析它.唯一的问题是我需要在构建步骤中获取它,这是一个问题,因为它应该可用的位置被截断...

我尝试从以下URL(相对于作业)检索控制台输出:

  • /consoleText
  • /logText/progressiveText
  • /logText/progressiveHTML

这两个文本是纯文本,如果不是截断,将是完美的,HTML也是如此...正是我需要的 - 只是它被截断....

我确信有可能以某种方式检索此信息,因为在查看时/consoleFull会有控制台的实时更新,而不会截断或缓冲.

然而,在检查该网页时,我没有找到我想要的内容,而是找到了它应该存在的代码(我没有包含完整的页面代码,因为它几乎是不相关的,我相信那些回答的人能够找出并知道自己应该有什么)

      new Ajax.Request(href,{
          method: "post",
          parameters: {"start":e.fetchedBytes},
        requestHeaders: headers,
          onComplete: function(rsp,_) {

          var stickToBottom = scroller.isSticking();
          var text = rsp.responseText;
          if(text!="") {
            var p = document.createElement("DIV");
            e.appendChild(p); // Needs to be first for IE
            // Use "outerHTML" for IE; workaround for:
            // http://www.quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
            if (p.outerHTML) {
              p.outerHTML = '<pre>'+text+'</pre>';
              p = e.lastChild;
            }
            else p.innerHTML = text;
            Behaviour.applySubtree(p);
            if(stickToBottom) scroller.scrollToBottom();
          }

          e.fetchedBytes     = rsp.getResponseHeader("X-Text-Size");
          e.consoleAnnotator = rsp.getResponseHeader("X-ConsoleAnnotator");
            if(rsp.getResponseHeader("X-More-Data")=="true")
              setTimeout(function(){fetchNext(e,href);},1000);
          else
              $("spinner").style.display = "none";
          }
      });
Run Code Online (Sandbox Code Playgroud)

具体来说,我希望有一种方法可以让我从text任何可能的内容中获取内容.我不熟悉这种语言,所以我不确定如何能够获得我想要的内容.插件无济于事,因为我想在构建步骤中将此内容作为脚本的一部分进行检索

Ren*_*nov 20

你已经做了很好的调查.我只能添加以下内容:我知道所有与控制台相关的插件都是作为后期构建操作设计的.

日志触发插件提供一个生成后的行动,让哈德森建立搜索其控制台日志对于一个给定的正则表达式,如果找到,触发额外的下游工作.

所以看起来你的问题没有直接的解决方案.我可以看到以下选项:

1.使用tee或类似的东西(仅适用于shell构建步骤)

此解决方案远非通用,但它可以快速访问由命令或命令集生成的最新控制台输出.

tee - 从标准输入读取并写入标准输出和文件

在系统级别使用同义词,可以修改其他Jenkins构建步骤以生成控制台输出.带有控制台输出的文件可以通过Jenkins或使用任何其他方式引用.

2.修改Jenkins代码

您可以快速修复内部使用,或提供引入特定系统范围设置的补丁.

3.模仿/控制台行为

示例中的代码用于从Jenkins服务器请求更新.正如您所料,服务器端可以从一些偏移开始返回一条信息.让我展示.


控制台页面定期向服务器发送请求:

在此输入图像描述


参数很简单:

在此输入图像描述


响应是要添加的一大块信息:

在此输入图像描述


具有更新的偏移(开始)值的另一个请求

在此输入图像描述


通过分析Content-Length,您可以轻松了解没有数据

在此输入图像描述


所以答案是:使用url/job-name/build-number/logText/progressiveHtml,指定起始偏移,发送请求和接收控制台更新.