jenkins - 无法在 Jenkins 插件中加载 sidepanel.jelly

标签 jenkins jenkins-plugins

当我尝试在 Jenkins 插件操作 jelly 文件中加载“sidepanel.jelly”时,出现下一个错误。

javax.servlet.ServletException: org.apache.commons.jelly.JellyTagException: file:/C:/Documents%20and%20Settings/Tecnoy/Escritorio/vats_eclipse/src/main/resources/org/jenkinsci/plugins/vats/VatsBuildAction/index.jelly:4:42: <st:include> No page found 'sidepanel.jelly' for class org.jenkinsci.plugins.vats.VatsBuildAction at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:117) at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:127) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:717) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858) at org.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:390) ... Caused by: org.apache.commons.jelly.JellyTagException: file:/C:/Documents%20and%20Settings/Tecnoy/Escritorio/vats_eclipse/src/main/resources/org/jenkinsci/plugins/vats/VatsBuildAction/index.jelly:4:42: <st:include> No page found 'sidepanel.jelly' for class org.jenkinsci.plugins.vats.VatsBuildAction at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:124) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) ...

我的果冻文件有以下几行

<?jelly escape-by-default='true'?> <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout" xmlns:t="/lib/hudson"> <l:layout norefresh="true"> <st:include page="sidepanel.jelly" /> <l:main-panel> <h1>Vats Summary:</h1> <div id="canvas-holder"> <p><canvas id="chart-area" width="300" height="300"/></p> </div> <script type="text/javascript" src="${resURL}/plugin/vats/scripts/chart.min.js"></script> <script type="text/javascript"> ... </script> <canvas id="myChart" width="400" height="400"></canvas> </l:main-panel> </l:layout> </j:jelly>

知道如何修复它吗?

谢谢!

最佳答案

添加 <l:main-panel>标签和 <l:layout norefresh="true">标记到index.jelly 文件。

并包括侧面板:

  • 将构建传递给 Action(通过构造函数的参数)
    • 可以从从 BuildStepCompatibilityLayer 类(由 Extending Publisher 继承)继承的执行方法的参数中检索构建。
  • 在 Action 类中创建 getBuild() 方法
  • 添加 <st:include it="${it.build}" page="sidepanel.jelly" />带有构建的标签

果冻示例(index.jelly):

<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" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
    <l:layout norefresh="true">
        <st:include it="${it.build}" page="sidepanel.jelly" />
        <l:main-panel>
            <f:validateButton title="${%Restart Jenkins}" progress="${%Restarting...}" method="JksRestart" with="" />
        </l:main-panel>
    </l:layout>
</j:jelly>

Java Action 类示例:

package tryPublisher.tryPublisher;

import hudson.model.Action;
import hudson.model.AbstractBuild;


public class ExampleAction implements Action {
    AbstractBuild<?,?> build;

    public ExampleAction(AbstractBuild<?,?> build) {
        this.build = build;
    }

    @Override
    public String getIconFileName() {
        return "/plugin/action.png";
    }

    @Override
    public String getDisplayName() {
        return "ExampleAction";
    }

    @Override
    public String getUrlName() {
        return "ExampleActionUrl";
    }

    public AbstractBuild<?,?> getBuild() {
        return this.build;
    }
}

Java Publisher 类示例:

package tryPublisher.tryPublisher;

import java.io.IOException;

import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Publisher;

public class ExamplePublisher extends Publisher {

    @Override
    public BuildStepMonitor getRequiredMonitorService() {
        return BuildStepMonitor.NONE;
    }

    @Override
    public boolean perform(AbstractBuild<?, ?> build, Launcher launcher,
            BuildListener listener) throws InterruptedException, IOException {

        build.getActions().add(new ExampleAction(build));

        return true;
    }

}

.jelly 文件必须位于插件项目的正确资源映射中。在与实现 Action 的 Java 类同名的映射中。 .jelly 的名称也很重要。

关于jenkins - 无法在 Jenkins 插件中加载 sidepanel.jelly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27129348/

相关文章:

jenkins - 编译 groovy 项目并通过 Jenkins 运行 JUnit 测试

java - 为什么从 Docker 镜像的 jar 文件已损坏?

jenkins - 更改 Hudson 通知电子邮件的 [email from]

jenkins-plugins - 在 Jenkins 成功构建后如何运行脚本

git/jenkins TLS 问题

docker - Kubernetes - Jenkins 集成

resources - Jenkins 中的资源管理外部节点以进行测试

jenkins - 如何在jenkins中使用静态分析收集器插件?

jenkins - 在 Windows 上备份 Jenkins 失败

Jenkins:如何将由于工作区问题而导致构建失败的颜色从红色变为灰色?