【问题标题】:Jenkins plugin development: Is it ok to copy jelly files and modify them?Jenkins插件开发:复制jelly文件并修改可以吗?
【发布时间】:2014-10-22 16:33:16
【问题描述】:

我正在尝试开发我的第一个 Jenkins 插件,但我不确定有几个问题:
到目前为止,我有一个创建新工作类型的类。它基本上看起来就像 Jenkins 的 FreeStyleProject 并且运行良好。

1)现在我希望插件在作业的配置页面上创建一个附加部分(新类型)。我尝试在资源包中添加一个 config.jelly,但没有奏效。然后我从 resources/hudson/model/Project 复制了 Jenkins 的 configure-entries.jelly 并在此处添加了我的信息。这样做可以吗?
2)此外,我想在项目页面中添加一些内容。我发现可以使用一个名为 jobMain.jelly 的文件,但仅在资源包中创建该文件并不会改变任何内容。因此,我从 resources/hudson/model/AbstractProject 复制了 Jenkins 的 main.jelly 并在此处添加了一些内容。那样可以么?它有效,但我不确定我以后是否会遇到麻烦。

提前致谢!

【问题讨论】:

  • 你认为你可以重新格式化这个问题,使它不是一个大段。这将有助于获得更多答案

标签: plugins jenkins hudson jenkins-plugins jelly


【解决方案1】:

配置页面

  • 首先,您需要一个扩展 BuildStepCompatibilityLayer 后代的类(如 Recorder 或 Builder 类)。
  • 为这个类创建一个@DataBoundConstructor
  • 为这个类创建一个描述符,作为内部类
  • 扩展 Builder 类的类示例:

    package tryBuilder.tryBuilder;
    
    import org.kohsuke.stapler.DataBoundConstructor;
    
    import hudson.Extension;
    import hudson.model.AbstractProject;
    import hudson.model.FreeStyleProject;
    import hudson.tasks.BuildStepDescriptor;
    import hudson.tasks.Builder;
    
    import org.kohsuke.stapler.DataBoundConstructor;
    
    public class BuilderExample extends Builder {
    
      @DataBoundConstructor
      public BuilderExample() {
      }
    
      @Extension
      public static class Descriptor extends BuildStepDescriptor<Builder> {
    
        @Override
        public boolean isApplicable(Class<? extends AbstractProject> jobType) {
            return FreeStyleProject.class.isAssignableFrom(jobType);
        }
    
        @Override
        public String getDisplayName() {
            return "BuildstepName";
        }
      }
    }
    

getDisplayName()(现为“BuildstepName”)方法中返回的字符串决定了 Jenkins 中构建步骤或操作的名称。

  • 现在您需要在资源目录中创建一个与上面创建的类同名的映射。
  • 将 config.jelly 放在该目录中
  • 在 Jenkins 中,开始工作,然后进行配置,接下来:
    • 如果您创建的类扩展了从 Builder 派生的类:添加构建步骤
    • 如果您创建的类扩展了类派生形式 Publisher:在构建步骤后添加操作
  • 并选择您在 getDisplayName() 方法中设置的名称
  • 现在您的 config.jelly 应该在此部分中可见

添加到项目页面

  • 创建一个实现 Action 的类(覆盖必要的方法并给它们一个值(非 null))
  • 在创建的Builder/Publisher类中,重写getProjectAction(AbstractProject&lt;?, ?&gt; project)方法,返回上面创建的实现Action的类
  • 重写 Builder/Publisher 类中的 `perform(AbstractBuild build, Launcher launcher, BuildListener listener)' 方法并让它返回 true
  • 在项目页面的侧面板中可以看到一个链接
  • 将 index.jelly 链接到此 Action 类(在与 Action 类同名的资源映射中)
  • 如果您单击侧面板中的链接,您将看到此页面
  • 要在项目页面本身上显示某些内容,您需要创建一个名为 floatingBox.jelly 的文件(也在资源映射中使用 Action 类的名称)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多