Jenkins插件开发和调用接口

一.HelloWorldPlugin插件开发

1.配置环境

jdk1.8:https://www.oracle.com/java/technologies/downloads/#java8

maven3.8.3:https://maven.apache.org/download.cgi

使用命令查看环境是否配置成功

jdk:Java -version

maven:mvn -version

2.创建一个插件

选择存储到具有Jenkins插件的目录

mvn -U archetype:generate -Dfilter="io.jenkins.archetypes:"

这里的io.jenkins.archetypes是项目的三层目录 

$ mvn -U archetype:generate -Dfilter="io.jenkins.archetypes:"
…
Choose archetype:
1: local -> io.jenkins.archetypes:empty-plugin (Skeleton of a Jenkins plugin with a POM and an empty source tree.)
2: local -> io.jenkins.archetypes:global-configuration-plugin (Skeleton of a Jenkins plugin with a POM and an example piece of global configuration.)
3: local -> io.jenkins.archetypes:global-shared-library (Uses the Jenkins Pipeline Unit mock library to test the usage of a Global Shared Library)
4: local -> io.jenkins.archetypes:hello-world-plugin (Skeleton of a Jenkins plugin with a POM and an example build step.)
5: local -> io.jenkins.archetypes:scripted-pipeline (Uses the Jenkins Pipeline Unit mock library to test the logic inside a Pipeline script.)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 4
Choose io.jenkins.archetypes:hello-world-plugin version:
1: 1.1
2: 1.2
3: 1.3
4: 1.4
5: 1.5
6: 1.6
7: 1.7
8: 1.8
Choose a number: 8: 8  
[INFO] Using property: groupId = unused
[INFO] Using property: package = io.jenkins.plugins.sample
[INFO] Using property: hostOnJenkinsGitHub = true
Define value for property 'artifactId': HelloWorldPlugin -----项目名称
Define value for property 'version' 1.0-SNAPSHOT: :
Confirm properties configuration:
groupId: unused
package: io.jenkins.plugins.sample
hostOnJenkinsGitHub: true
artifactId: HelloWorldPlugin
version: 1.0-SNAPSHOT
 Y: : y

当出现 success时,创建成功

BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:28 min
[INFO] Finished at: 2022-03-04T16:45:23+08:00
[INFO] ------------------------------------------------------------------------

中间可能会出现报错,试试config文件下的setting文件配置







  
  D:\apache-maven-3.8.4\repo

  
    org.jenkins-ci.tools 
  

  

  

  
  
  
    
  

  
  
    

    
  
  

  
  
    
    
      m.g.o-public
      http://repo.jenkins-ci.org/public
      jenkins-ci.org
      Jenkins CI Public
    
    
    
      alimaven
      central
      aliyun maven
      http://maven.aliyun.com/nexus/content/repositories/central/
    
 



  
   
    
      jenkins
      
        true 
      
       
        
          repo.jenkins-ci.org
          https://repo.jenkins-ci.org/public/
        
      
      
        
          repo.jenkins-ci.org
          https://repo.jenkins-ci.org/public/
        
      
    
   
    

    
  

还有一种,就是可能出现下载失败的问题

添加archetype-catalog.xml文件到存储jar包的repo项目下或者maven项目下

archetype-catalog.xml下载 - 软件E线下载站

3.使用idea打开项目(这是个maven项目) 

打开项目,Java目录下的io,jenkins.plugin.sample.HelloWorldBuild对应着resources目录下的io,jenkins.plugin.sample.HelloWorldBuild

先打开maven,在Lifecycle中clean一下,然后package

会在文件夹下生成target文件,在有pom文件的目录下输入cmd指令

mvn hpi:run

记住hpi:run中间不要有空格

运行完成后,进去网站http://localhost:8080/jenkins/(默认的都是这个)

4.HelloWorldPlugin

新建item,创建Freestyle project

Jenkins插件开发和调用接口_第1张图片

进去到里面,点击构建选项

Jenkins插件开发和调用接口_第2张图片

Jenkins插件开发和调用接口_第3张图片

 应用,保存,Build Now

Jenkins插件开发和调用接口_第4张图片

点击Build History里面刚才创建的项目

Jenkins插件开发和调用接口_第5张图片

在编辑信息里可以查看到,即为输出成功

Jenkins插件开发和调用接口_第6张图片

二:访问Url 

在原先HelloWorldPlugin项目上更改

找到resource目录下的Resource Bundle ‘Messages’,该目录作用为封面做准备

多个properties文件是多个国家之间的语言

Builder.DescriptorImpl.DisplayName:-----是指的构建项目下的名称,例如Say hello world

Resource Bundle ‘config’文件对应的是输出路径配置,HelloworldBuilder目录下的config.jelly中的

被public HelloWorldBuilder中的name属性映射,记得换参数时,不要忘了更改
public String getName() {
    return name;
}
//(*代表泛指)标签中的field通过类中属性的get方法进行绑定

主要实现功能在perform方法中实现

这里只更改了参数,记得Resource Bundle ‘Messages’文件下的properties文件和Resource Bundle ‘config文件下的properties文件,最重要的时config.jelly文件,Name要改成Path,name要改成path

在这里为了区分,Messages文件下的改成了

Messages.properties: HelloWorldBuilder.DescriptorImpl.DisplayName=Please enter the address

Messages_zh_CN.properties:

HelloWorldBuilder.DescriptorImpl.DisplayName=\u8bf7\u8f93\u5165\u5730\u5740

package io.jenkins.plugins.sample;

import hudson.Launcher;
import hudson.Extension;
import hudson.FilePath;
import hudson.util.FormValidation;
import hudson.model.AbstractProject;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.tasks.Builder;
import hudson.tasks.BuildStepDescriptor;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;

import javax.servlet.ServletException;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import jenkins.tasks.SimpleBuildStep;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundSetter;

public class HelloWorldBuilder extends Builder implements SimpleBuildStep {

    private  String path;
    private boolean useFrench;
    //定义一个userFrench,默认为false
    @DataBoundConstructor
    public HelloWorldBuilder(String path) {
        this.path = path;
    }
        //path属性映射了config.jelly 中  的field属性
//这个项目的构建操作时在 HelloWorldBuilder.java 就会获得页面的path值,存在关联属性
    public String getPath() {
        return path;
    }
    //(*代表泛指)标签中的field通过类中属性的get方法进行绑定
    public boolean isUseFrench() {
        return useFrench;
    }

    @DataBoundSetter
    public void setUseFrench(boolean useFrench) {
        this.useFrench = useFrench;
    }
    /*perform 真正开始执行的地方 你所有构建时的任务都将在此内完成
     * 在此之内你可以执行 任意想执行的业务操作,Web Service等
     */
    @Override
    public void perform(Run run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
        listener.getLogger().println(path);
        StringBuilder result = new StringBuilder();
        //创建远程url连接对象
        URL url = new URL(path);
        //通过远程url连接对象打开一个连接,强转成HTTPURLConnection类
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        //设置连接超时时间和读取超时时间
        conn.setConnectTimeout(15000);
        conn.setReadTimeout(60000);
        conn.setRequestProperty("Accept", "application/json");
        //发送请求
        conn.connect();
        //通过conn取得输入流,并使用Reader读取
        if (200 == conn.getResponseCode()){
            InputStream is = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            String line;
            while ((line = br.readLine()) != null){
                result.append(line);
            }
            br.close();
            is.close();
        }
        conn.disconnect();
        listener.getLogger().println(result.toString());

        if (useFrench) {
            listener.getLogger().println("Bonjour");
        } else {
            listener.getLogger().println("Hello");
        }
    }

    @Symbol("greet")
    @Extension
    public static final class DescriptorImpl extends BuildStepDescriptor {

        public FormValidation doCheckName(@QueryParameter String value, @QueryParameter boolean useFrench)
                throws IOException, ServletException {
            if (value.length() == 0)
                return FormValidation.error(Messages.HelloWorldBuilder_DescriptorImpl_errors_missingName());
            return FormValidation.ok();
        }

        @Override
        public boolean isApplicable(Class aClass) {
            return true;
        }

        @Override
        public String getDisplayName() {
            return Messages.HelloWorldBuilder_DescriptorImpl_DisplayName();
        }

    }

}

然后clean,package,可能会出现问题,多操作几次就行了,这是idea的问题,如果打包时出现问题,可以刷新一下maven

继续在对应的文件夹下输入cmd指令

mvn hpi:run 

在此之前,可以下载个软件,模拟接口,我这里使用的时Apifox,生成连接,发送

进去 

 http://localhost:8080/jenkins/,创建一个自由项目,增加构建步骤,把连接复制进去,Build一下,就可以了。在控制台输出查看结果,如果对应的插件还是HelloWorldPlugin,重启下Jenkins

Jenkins插件开发和调用接口_第7张图片

 Jenkins插件开发和调用接口_第8张图片

访问seq文件

 HttpResponse response = Unirest.post("http:///")
                .header("Content-Type", "application/json")
                .body("{\r\n    \"path\":\"/testone/TestCases/body/sequence.seq\"\r\n}")
                .asString();

加入即可,另外修改jelly文件,显示可以访问的文件路径

测试报告

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                2.0.2
                
                    1.8
                    1.8
                
            
            
                maven-surefire-plugin
                
                    true
                    
                        **/*Test.java
                    
                    
                        
                    
                
            
        
    

运行完代码后导入build,运行maven命令

mvn test
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.131 s
[INFO] Finished at: 2022-03-23T11:34:08+08:00
[INFO] ------------------------------------------------------------------------

在**/target/surefire-reports文件下会生成xml和test文件,为测试报告

你可能感兴趣的:(java)