【问题标题】:IFraming remote content into project page (from URL in consoleoutput)?将远程内容放入项目页面(来自控制台输出中的 URL)?
【发布时间】:2023-11-04 02:13:01
【问题描述】:

全部,

我们有一个测试应用程序,它在 Web 仪表板中创建自己的报告,我们希望将其添加到 Hudson 项目页面以进行构建。目前,该应用程序将该构建的页面的 URL 输出到控制台日志中。

我想做的是将 URL 从控制台日志中拉出,然后将 URL 端点处的内容添加到该构建的项目页面(也许是 IFrame?)。

有没有简单的方法来做到这一点?可能是现有插件?可能是我忽略的配置?我从 Cruisecontrol 来到 Hudson,但我仍然在处理差异。

谢谢。

【问题讨论】:

    标签: continuous-integration hudson jenkins hudson-plugins


    【解决方案1】:

    应该可以通过 HTTP POST 编写构建描述的编辑脚本:在${BUILD_URL}/submitDescription 发送表单:

    curl --data description="<a href=\"http://foo.bar.com\">foo</a>" ${BUILD_URL}/submitDescription
    

    构建描述将显示在左侧构建历史记录中,因此您可能希望保持简短。

    【讨论】:

    • 抱歉,我可能没有充分描述问题。我正在寻找将内容添加到页面的主体,而不仅仅是标记构建(这实际上是添加到构建历史的作用)。一些插件在资产/更改部分下贡献了图表等。我想在该位置提供内容,但来自外部网站 - 我从控制台输出中检索到的 URL。据我所知,这必须是一个java插件,对吗?这类东西有现有的插件吗?这对我来说似乎是一个常见的要求..
    【解决方案2】:

    最后,我采用的解决方案是创建一个自定义插件,它解析控制台日志,构建一个 URL 的 ArrayList,并在左上角的列中贡献一个“动作”。从那里我可以从我的“bean”(有效的 ArrayList 包装器)中提取每个 URL。之后,在 Jenkins 页面中创建每个 iFrame 只是一块 Jelly。 我确实在 Jelly 页面中添加了一些 Javascript,但是 iFrame 的默认高度对我没有用。

    果冻:

    <script type="text/javascript">
     function resizeFrame(f) {
      var i = document.getElementById(f);
      var s;
      s = 100;
      i.style.height = s;
      s = i.document.body.clientHeight;
      //Some odd Javascript re-sizing here, works fine in the debugger..
      var ss = s/2.5;
      i.style.height = ss+"px";
    }
    </script>
    
    <table width='100%'>
       <j:forEach items="${it.result.getHtmlLogPath()}" var="i" indexVar="index">
        <tr>
           <td width='100%'>    
             <iframe id="myFrame${index}" src="${i}" width="100%" frameborder="0" onload="resizeFrame('myFrame${index}');"/>
           </td>
        </tr>
      </j:forEach>
    </table>    
    

    目前这符合我的基本要求,如果有机会我会通用化插件以供其他人使用。

    【讨论】: