zoukankan      html  css  js  c++  java
  • jenkins插件开发(二)

    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片段的界面。

  • 相关阅读:
    初始面向对象
    python之路——迭代器和生成器
    函数进阶
    python之路——初识函数
    实现css两端对齐
    http
    background-size
    call和apply的区别
    js兼容性
    面试题
  • 原文地址:https://www.cnblogs.com/hellohello/p/8732810.html
Copyright © 2011-2022 走看看