我正在尝试开发我的第一个 Jenkins 插件,但我不确定几个问题:
到目前为止,我有一个创建新工作类型的类。它基本上看起来就像 Jenkins 的 FreeStyleProject 并且运行良好。
1)现在我希望插件在作业的配置页面上创建一个附加部分(新类型)。我尝试在资源包中添加一个 config.jelly,但没有奏效。然后我从 resources/hudson/model/Project 复制了 Jenkins 的 configure-entries.jelly 并在此处添加了我的信息。这样做可以吗?
2)此外,我想在项目页面中添加一些内容。我发现可以使用一个名为 jobMain.jelly 的文件,但仅在资源包中创建该文件并不会改变任何内容。因此,我从 resources/hudson/model/AbstractProject 复制了 Jenkins 的 main.jelly,并在此处添加了一些内容。那样行吗?它有效,但我不确定我以后是否会遇到麻烦。
提前致谢!
问问题
856 次
1 回答
2
配置页面
- 首先,您需要一个扩展 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 的类(覆盖必要的方法并给它们一个值(非空))
- 在创建的 Builder/Publisher 类中,重写
getProjectAction(AbstractProject<?, ?> project)
方法并返回上面创建的实现 Action 的类 - 覆盖 Builder/Publisher 类中的 `perform(AbstractBuild build, Launcher launcher, BuildListener listener)' 方法,让它返回 true
- 由于它的工作,项目页面的侧面板中有一个可见的链接
- 将 index.jelly 链接到此 Action 类(在与 Action 类同名的资源映射中)
- 如果您单击侧面板中的链接,您将看到此页面
- 要在项目页面本身上显示某些内容,您需要创建一个名为 floatingBox.jelly 的文件(也在资源映射中使用 Action 类的名称)
于 2014-12-10T13:52:22.143 回答