如何向Jenkins添加页面?

时间:2013-01-29 16:46:44

标签: jenkins hudson

我正在寻找一个jenkins插件,它允许我添加一个链接到我创建的新页面的新链接。我已经确定了如何通过扩展RootAction来创建新链接,我可以将它链接到webapp目录中的静态资源。我的问题很多。我想我需要使用果冻页面,因为我想在我的这个新页面上做的动作的性质,即使我能用静态网页内容做我想做的事情,链接弹出我的jenkins界面到仅包含我的静态网页内容的网页。

我需要知道的是,您如何创建一个全新的页面?我一直在寻找JavaDoc寻找接口和互联网,以获取有关如何编写插件的更多文档。但是互联网似乎遗憾地缺乏有关Jenkins插件开发的信息。

我想要做的是能够点击我的新链接并将它带到我的新页面,仍然使用所有Jenkins导航等等,在这个新页面上,我将有一个用于执行某些操作的表单对文件的操作。

我非常感谢任何帮助或对我未找到的文档的指示。

1 个答案:

答案 0 :(得分:0)

如您所见,第一步是扩展RootAction或Action,具体取决于您希望页面位于何处:分别是全局或每个项目。

一个简单的RootAction:

package my.package;

@Extension
public class MyNewPage implements hudson.model.RootAction
{

    @Override
    public String getDisplayName()
    {
        return "My Custom Page";
    }

    @Override
    public String getIconFileName()
    {
        return (Jenkins.RESOURCE_PATH + "/images/48x48/terminal.png").replaceFirst("^/", "");
    }

    @Override
    public String getUrlName()
    {
        return "my-url"; // the url path
    }
}

接下来,添加一个关联的果冻文件,位于src/main/resources/my/package/MyNewPage/index.jelly

<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
    xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
    <l:layout norefresh="true">
        <l:header title="My New Page" />
        <l:main-panel>
            <h1>Put content here</h1>
        </l:main-panel>
    </l:layout>
</j:jelly>

有关更多标签,请参见jenkins jelly tag reference。请注意,l:layout标签是完全可选的,您完全不必使用jenkins标签,而可以在果冻中转储静态HTML内容

然后这两个文件将用于呈现对http://localhost:8080/jenkins/my-url的请求

或者,对于完全动态的内容,请使用jenkins中内置的stapler library来呈现任意URL。这是一个愚蠢的小示例,它打印出url:

public void doDynamic(StaplerRequest req, StaplerResponse resp) throws IOException
{
    resp.setStatus(418);
    resp.getOutputStream().print("I'm a teapot! You requested this path: " + req.getRestOfPath());
}

只需将该方法或any of the stapler methods添加到MyNewPage(或任何支持该方法的扩展名)即可。它将响应http://localhost:8080/jenkins/my-url/*

下的所有网址

我发现了一些其他好的参考文献: