https://wiki.jenkins.io/display/JENKINS/Extend+Jenkins

http://commons.apache.org/proper/commons-jelly/index.html

文档阅读笔记:

  1. Scm:代表源码管理的一个步骤,如源码管理中的Git,Subversion就是扩展的Scm
  2. Builder : 代表构建的一个步骤,如增加构建步骤中,我们可以增加一个构建步骤,而每一个选项都是对应一个Builder,在每一个Builder中都有自己不同的功能
  3. Trigger:代表一个构建的触发,当满足一个什么样的条件时触发这个项目开始构建。比较常用的触发就是当代码变更时触发,如果我们需要实现一些比较复杂的触发逻辑,就需要扩展Trigger这个扩展点
  4. Publisher:Publisher代表一个项目构建完成后需要执行的步骤,如选项中的E-Mail Notifaction就是一个Publisher插件,选择这个选项后,当项目构建完成,就会使用email来通知用户,假如想要在项目构建完成后将构建目标产物发送到服务器上,则可以扩展此扩展点

  在Say Hello World的例子中:

public class HelloWorldBuilder extends Builder implements SimpleBuildStep {

}

  继承自builder,所以这代表了构建的一个步骤,属于一个构建插件。每一个插件类中都必须要有一个Descriptor内部静态类,它代表一个类的’描述者‘,用于指明这是一个扩展点的实现,Jenkins是通过这个描述者才能知道我们自己写的插件,每一个‘描述者’静态类都需要被@Extension注解,Jenkins内部会扫描@Extenstion注解来知道注册了有哪些插件。

    @Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Builder> {
private boolean useFrench;
public DescriptorImpl() {
load();
}
// 代表我们的插件是否可用
public boolean isApplicable(Class<? extends AbstractProject> aClass) {
return true;
}
// 返回的是一个String类型的值,这个名称会用在web界面上显示的名称(如构建下拉选项中可以看到Say hello world)
public String getDisplayName() {
return "Say hello world";
}
@Override
public boolean configure(StaplerRequest req, JSONObject formData) throws FormException {
save();
return super.configure(req,formData);
}
public boolean getUseFrench() {
return useFrench;
}
}

  在我们的HelloWorldBuilder中构造函数上有一个注解:

    @DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}

  这个注解的作用是用于参数注入(反射),jenkins将界面上获取的值,传递给这个构造函数。这样插件就能获取到在界面上配置的值了。

视图

global.jelly 全局的配置视图

  与config.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">
<f:section title="Hello World Builder">
<f:entry title="French" field="useFrench"
description="Check if we should say hello in French">
<f:checkbox />
</f:entry>
</f:section>
</j:jelly>

config.jelly Job的配置视图

<?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">
<f:entry title="Name" field="name">
<f:textbox />
</f:entry>
</j:jelly>

  在定义一个属性时,使用<f:entry>标签代表这是一个属性,其中title是指在界面上显示的字段名,而field是指这个属性在HelloWorldBuilder中对应的属性名,jenkins通过这个名称来与HelloWorldBuilder中的属性相对应,从而使用@DataBoundConstructor标注的构造函数将这些变量注入到HelloWorldBuilder类中。

help-属性名.html 帮助视图 html片段

  当在配置中点击输入框的右边的问号时,下面展开的视图就会显示这个html片段的界面。

最新文章

  1. RFID工作流程
  2. Python 模块学习:os模块
  3. sicily vector有序插入
  4. 深入理解Java之泛型
  5. 关于在DataGrid.RowDetailsTemplate中的控件查找不到的问题
  6. Mini projects #4 ---- Pong
  7. websocket总结
  8. USACO2016Splitting the Field分割牧场
  9. EF 自测例子
  10. 《微信小程序七日谈》- 第一天:人生若只如初见
  11. 第1章 游戏之乐——NIM(3)两堆石头的游戏
  12. php在apache中运行模式
  13. php编译错误:Cannot find OpenSSL&#39;s &lt;evp.h&gt;
  14. MongoDB学习教程(1)
  15. 自己收集的工作js库---2018-02-07
  16. cryptojs的使用
  17. MySQL往表里插入千条数据 存储过程
  18. Django应用:学习日志网站
  19. 如何应用ML的建议-下
  20. 网页图表Highcharts实践教程之图表代码构成

热门文章

  1. 数据库 | 远程连接centos7上数据库
  2. Jquery | 外部插入节点
  3. C8051系列
  4. Python相对导入导致SystemError的解决方案(译)
  5. [android][windows][使用HAXM加速模拟器][不使用SDK manager]
  6. [转]nopcommerce之权限模块
  7. 《高性能MySQL》读书笔记之 MySQL锁、事务、多版本并发控制的基础知识
  8. 【javascript】2017-9-12 腾讯笔试小Q升序算法
  9. Android Studio 遇到的java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessExce问题
  10. uvm_reg_field——寄存器模型(二)