• 宁陵县:法院家事的实践与创新 2019-03-24
  • 日照:前5个月日照税收比重居山东省第二位 2019-03-22
  • 武警部队“长城-2018”反恐国际论坛在京开幕 2019-03-22
  • 税费“红包”助推高质量发展 2019-03-21
  • 电影人共聚“微博电影之夜” 张艺谋:如果不当导演就当守门员 2019-03-21
  • 陕西拍摄到野化放归林麝活动影像 放归林麝已度过危险期 2019-03-15
  • 国宝级黄腹角雉住进三清山 2019-03-15
  • 王石田朴珺罕见亲密写真曝光 女方喂男方冰淇淋娇羞甜蜜 2018-11-22
  • 世界很多国家想拥有核弹,但迫于种种原因而没能实现。 2018-11-21
  • 人事 江西两设区市任免一批领导干部 2018-11-20
  • 自由的生活_软路由论坛

     找回密码
     注册

    QQ登录

    只需一步,快速开始

    搜索
    查看: 528|回复: 0
    打印 上一主题 下一主题

    3d带连线走势图专业版: 从0到1开启Jenkins插件开发之路-Wise2C

    [复制链接]
    跳转到指定楼层
    1#
    发表于 2018-11-14 18:27:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    广西11选5历史 www.jqel.net 您需要 登录 才可以下载或查看,没有帐号?注册

    x
    最近项目中有这样一个需求:CI部分用jenkins实现拉取代码、编译等,CD需要实现自动部署到睿云智合的Pass平台WiseCloud中,需要CI和CD联动实现自动化,因此需定制开发部署到Pass平台的jenkins插件。本文用一个简单的Demo记录下jenkins插件开发流程,以扩展jenkins构建阶段为例进行介绍。


    主要内容包括

    1. 创建jenkins插件项目

    2. 项目源码分析

    3. jelly界面开发

    4. 插件运行、打包、离线安装

       

    环境准备

    - 创建jenkins插件项目
    - 项目源码分析
    - jelly界面开发
    - 插件运行、打包、离线安装


    create a jenkins Plugin

    - JDK8               //安装jdk8
    - mave3             //安装maven3以上的版本
    - javac -version   //确认jdk版本
    - mvn   -version  //确认maven版本
    mvn -U archetype:generate -Dfilter=io.jenkins.archetypes:

    $ mvn -U archetype:generate -Dfilter=io.jenkins.archetypes:
    Choose archetype:
    1: remote -> io.jenkins.archetypes:empty-plugin (Skeleton of a Jenkins plugin with a POM and an empty source tree.)
    2: remote -> io.jenkins.archetypes:global-configuration-plugin (Skeleton of a Jenkins plugin with a POM and an example piece of global configuration.)
    3: remote -> io.jenkins.archetypes:hello-world-plugin (Skeleton of a Jenkins plugin with a POM and an example build step.)
    Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 3  #选择hello-world-plugin
    Choose io.jenkins.archetypes:hello-world-plugin version:
    1: 1.1
    2: 1.2
    3: 1.3
    Choose a number: 3: 3  #选择最新version 1.3
    [INFO] Using property: groupId = unused
    Define value for property artifactId: demo # 取一个项目名
    Define value for property version 1.0-SNAPSHOT: : #版本
    [INFO] Using property: package = io.jenkins.plugins.sample
    Confirm properties configuration:
    groupId: unused
    artifactId: demo
    version: 1.0-SNAPSHOT
    package: io.jenkins.plugins.sample
    Y: : y #确定创建plugin

    make sure we can build plugin

    $ mv demo demo-plugin  #重命名为:demo-plugin
    $ cd demo-plugin
    $ mvn verify           # 验证是否能正常编译
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 06:11 min
    # SUCCESS 说明创建的Plugin能正常的编译

    use maven hpi Plugin

    mvn hpi:run
    # INFO: Jenkins is fully up and running 项目已正常启动
    # //localhost:8080/jenkins/ 访问项目
    Demo项目源码分析
    #Demo项目源码主要内容结构如下,下面将分析java以及resources包下的内容
    Demo
      -java
        -io.jenkins.plugins.sample
           -HelloWorldBuilder.java
      -resources
        -io.jenkins.plugins.sample
          -HelloWorldBuilder
            -config.jelly
            -index.jelly
            -help-name.html

    HelloWorldBuilder.java源码分析

    扩展构建阶段

    public class HelloWorldBuilder extends Builder implements SimpleBuildStep {
        private final String name;
    }
    #继承Builder扩展构建阶段
    数据绑定
    - DataBoundConstructor
        @DataBoundConstructor
        public HelloWorldBuilder(String name) {
            this.name = name;
            
        }
    # 构造函数初始化值,加上DataBoundConstructor注解进行数据绑定,对应jelly页面数据结构
    perform方法
    @Override
    public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
                listener.getLogger().println("Hello, " + name + "!");
                //逻辑处理
    }
       
    #重写perform函数,运行时会执行perform方法,因此在perform方法中实现插件逻辑处理
    #这里的逻辑是将界面传过来的name值写入到jenkins的log中,方便在运行日志中进行调试
    check and displayName
    @Symbol("greet")
    @Extension
    public static final class DescriptorImpl extends BuildStepDescriptor<Builder> {
       
        //检测界面填写的字段是否合法
       
        public FormValidation doCheckName(@QueryParameter String name)
                throws IOException, ServletException {
            
            if (name.length() == 0)
                return FormValidation.error("名称不能为空");
          
            return FormValidation.ok();
        }
        @Override
        public boolean isApplicable(Class<? extends AbstractProject> aClass) {
            return true;
        }
       
        //重写DisplayName方法,该名称会在界面的构建阶段下拉框中显示
        @Override
        public String getDisplayName() {
            return "Demo";
        }
    }
    resources内容分析
    创建HelloWorldBuilder文件夹
    在/resource/io.jenkins.plugins.sample包创建HelloWorldBuilder文件夹,与HelloWorldBuilder.java的类名对应,界面的数据字段才能通过HelloWorldBuilder.java构造函数进行绑定
    jelly界面开发

    #界面开发主要包括以下???/font>
    1. config.jelly             #插件主页面
    2. help-name.html           #jenkins界面点击问号出现的提示内容,命名规则:help-字段名.html
    3. index.jelly              #整体布局,扩展构建阶段不涉及index.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:entry title="名称" field="name">
            <f:textbox />
        </f:entry>
    </j:jelly>
    #这里是一个文本输入框,字段为name,name和HelloBuild.java构造函数传入的name对应,在HelloBuilder.java中即可获取到界面传过来的值

    打包 & 离线部署

    - 运行  mvn hpi:run
    - 打包  mvn package or mvn clean package -Dmaven.test.skip=true #生成插件的路径在target/demo.hpi
    - 部署  jenkins-系统管理-插件管理-高级  上传demo.hpi插件,重启jenkins
    Demo效果展示
    构建下拉框增加Demo选项

                                   
    登录/注册后可看大图
    设置名称为:demo

                                   
    登录/注册后可看大图
    执行日志

                                   
    登录/注册后可看大图

    参考文档

    jenkins插件入门:https://jenkins.io/doc/developer/tutorial/

    jenkins开发文档:https://jenkins.io/doc/developer/book/

    jenkins扩展点:https://jenkins.io/doc/developer/extensions/

    maven hpi插件:https://jenkinsci.github.io/maven-hpi-plugin/

    jelly://commons.apache.org/proper/commons-jelly/tutorial.html


    routeros
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|小黑屋|手机版|Archiver|广西11选5历史 ( 渝ICP备15001194号-1,渝公网安备 50011602500124号 )

    GMT+8, 2019-3-26 18:00 , Processed in 0.140366 second(s), 21 queries , Gzip On, MemCache On.

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

    快速回复 广西11选5历史 返回列表
  • 宁陵县:法院家事的实践与创新 2019-03-24
  • 日照:前5个月日照税收比重居山东省第二位 2019-03-22
  • 武警部队“长城-2018”反恐国际论坛在京开幕 2019-03-22
  • 税费“红包”助推高质量发展 2019-03-21
  • 电影人共聚“微博电影之夜” 张艺谋:如果不当导演就当守门员 2019-03-21
  • 陕西拍摄到野化放归林麝活动影像 放归林麝已度过危险期 2019-03-15
  • 国宝级黄腹角雉住进三清山 2019-03-15
  • 王石田朴珺罕见亲密写真曝光 女方喂男方冰淇淋娇羞甜蜜 2018-11-22
  • 世界很多国家想拥有核弹,但迫于种种原因而没能实现。 2018-11-21
  • 人事 江西两设区市任免一批领导干部 2018-11-20