zoukankan      html  css  js  c++  java
  • SpringBoot|自动创建job并且参数化构建

    一、前言

      在我们做测试平台的时候经常需要调用jenkins的api来创建job并且自动构建,那么,我们来看下面的解决方案

     二、环境准备

    1、maven引入依赖

            <dependency>
                <groupId>com.offbytwo.jenkins</groupId>
                <artifactId>jenkins-client</artifactId>
                <version>0.3.8</version>
            </dependency>

    2、本地jenkins环境

    三、具体步骤

    1、获取JenkinsJob的配置数据

    •   创建新job
    •   进入job配置
    •   将job/job名称/configure改为job/job名称/config.xml并回车
    <project>
    <actions/>
    <description>测试平台演示-jenkins调用</description>
    <keepDependencies>false</keepDependencies>
    <properties>
    <hudson.model.ParametersDefinitionProperty>
    <parameterDefinitions>
    <hudson.model.StringParameterDefinition>
    <name>userId</name>
    <description>用户Id</description>
    <defaultValue>123</defaultValue>
    <trim>true</trim>
    </hudson.model.StringParameterDefinition>
    </parameterDefinitions>
    </hudson.model.ParametersDefinitionProperty>
    </properties>
    <scm class="hudson.scm.NullSCM"/>
    <canRoam>true</canRoam>
    <disabled>false</disabled>
    <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
    <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
    <triggers/>
    <concurrentBuild>false</concurrentBuild>
    <builders/>
    <publishers/>
    <buildWrappers/>
    </project>

     2、把内容复制到工程中,目录src/main/resources下

     3、示例代码 

    package com.example.demo.util;
    
    import com.offbytwo.jenkins.JenkinsServer;
    import com.offbytwo.jenkins.client.JenkinsHttpClient;
    import com.offbytwo.jenkins.model.Job;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.core.io.ClassPathResource;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.HashMap;
    import java.util.Map;
    
    public class JenkinsUtil {
    
    
        private static final Logger logger = LoggerFactory.getLogger(JenkinsUtil.class);
    
    
        public static void main(String[] args) throws URISyntaxException, IOException {
    
            ClassPathResource classPathResource = new ClassPathResource("jenkinsConfigDir/weifang_test_jenkins_show.xml");
            InputStream inputStream = classPathResource.getInputStream();
            String jobConfigXml = FileUtil.getText(inputStream);
    
            String baseUrl = "http://localhost:8080/jenkins/";
            String userName = "durant";
            String password = "123456";
            String jobName = "durantTest2";
    
            JenkinsHttpClient jenkinsHttpClient = new JenkinsHttpClient(new URI(baseUrl),userName,password);
            String JenkinsVersion = jenkinsHttpClient.getJenkinsVersion();
            logger.info(JenkinsVersion);
            JenkinsServer jenkinsServer = new JenkinsServer(jenkinsHttpClient);
            jenkinsServer.createJob(jobName,jobConfigXml,true);
    
            Map<String, Job> jobMap= jenkinsServer.getJobs();
            Job job = jobMap.get(jobName);
            Map<String,String> map = new HashMap<>();
            map.put("userId","16");
    
            job.build(map,true);
    
    
        }
    }

    依赖的文件工具-FileUtil类

    package com.example.demo.util;
    
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.codec.digest.DigestUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.*;
    import java.time.LocalDate;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 文件工具类
     *
     */
    @Slf4j
    public class FileUtil {
    
        public static String saveFile(MultipartFile file, String pathname) {
            try {
                File targetFile = new File(pathname);
                if (targetFile.exists()) {
                    return pathname;
                }
    
                if (!targetFile.getParentFile().exists()) {
                    targetFile.getParentFile().mkdirs();
                }
                file.transferTo(targetFile);
    
                return pathname;
            } catch (Exception e) {
                log.error(""+e);;
            }
    
            return null;
        }
    
        public static boolean deleteFile(String pathname) {
            File file = new File(pathname);
            if (file.exists()) {
                boolean flag = file.delete();
    
                if (flag) {
                    File[] files = file.getParentFile().listFiles();
                    if (files == null || files.length == 0) {
                        file.getParentFile().delete();
                    }
                }
    
                return flag;
            }
    
            return false;
        }
    
        public static String fileMd5(InputStream inputStream) {
            try {
                return DigestUtils.md5Hex(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        public static String getPath() {
            return "/" + LocalDate.now().toString().replace("-", "/") + "/";
        }
    
        /**
         * 将文本写入文件
         *
         * @param value
         * @param path
         */
        public static void saveTextFile(String value, String path) {
            FileWriter writer = null;
            try {
                File file = new File(path);
                if (!file.getParentFile().exists()) {
                    file.getParentFile().mkdirs();
                }
    
                writer = new FileWriter(file);
                writer.write(value);
                writer.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (writer != null) {
                        writer.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static String getText(String path) {
            File file = new File(path);
            if (!file.exists()) {
                return null;
            }
    
            try {
                return getText(new FileInputStream(file));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        public static String getText(InputStream inputStream) {
            InputStreamReader isr = null;
            BufferedReader bufferedReader = null;
            try {
                isr = new InputStreamReader(inputStream, "utf-8");
                bufferedReader = new BufferedReader(isr);
                StringBuilder builder = new StringBuilder();
                String string;
                while ((string = bufferedReader.readLine()) != null) {
                    string = string + "
    ";
                    builder.append(string);
                }
    
                return builder.toString();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (bufferedReader != null) {
                    try {
                        bufferedReader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (isr != null) {
                    try {
                        isr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
            return null;
        }
    
    
        public static void main(String[] args) {
    
            String filePath = "G:\ceba\report\106_fc7ca2cde13ea69412573dba3220ded3 (1)\testdir_106_1225_8868";
            String pattern = "\-\d.html";
    
            List<String> resultList = getFileNamesByRegex(filePath, pattern);
    
            log.info("resultList== "+resultList.get(0));
    
            //File[] paths = file.listFiles(filter);
    
           /* if(Objects.isNull(fileList) || fileList.isEmpty()){
                return ResultDto.fail("根据展示文件的访问路径在压缩文件中未查到对应文件: " + "aitest_test");
            }*/
    
            /*log.info("size= "+paths.length);
            File tt = paths[0];
            log.info("getPath== "+tt.getPath());*/
    
            //listFile1(file);
            //listFile2(file);
            //listFile3(file);
            //listFile4(file);
            //listFile5(file);
        }
    
        /**
         *  查询特定目录下匹配正则表达式的目录地址,返回一个列表
         * @param filePath 特定目录完整路径
         * @param pattern 正则表达式
         * @return
         */
        public static List<String> getFileNamesByRegex(String filePath, String pattern) {
            return getFileNamesByRegex(filePath, pattern, true, true);
        }
    
        /**
         *  查询特定目录下匹配正则表达式的目录地址,返回一个列表
         * @param filePath 特定目录完整路径
         * @param pattern 正则表达式
         * @param recursionFlag 是否递归子目录 true 是 false 否
         * @param emptyRootFlag 是否将根目录置为空,即仅保留子目录 true 是 false 否
         * @return
         */
        public static List<String> getFileNamesByRegex(String filePath, String pattern, boolean recursionFlag, boolean emptyRootFlag) {
            File file = new File(filePath);
    
            Pattern r = Pattern.compile(pattern);
    
            List<String> fileNameList = new ArrayList<>();
    
            if(recursionFlag){
                listFileName1(file, fileNameList);
            }else {
                fileNameList = Arrays.asList(listFileName(file));
            }
    
            List<String> resultList = new ArrayList<>();
            for (String fileName : fileNameList) {
                Matcher m = r.matcher(fileName);
                log.info(fileName);
                if(m.find()){
                    log.info("m.find()==  "+fileName);
                    if(emptyRootFlag){
                        String newFileName = fileName.replace(file.getAbsolutePath(), "");
                        resultList.add(newFileName);
                    }else {
                        resultList.add(fileName);
                    }
    
                }
            }
            return resultList;
        }
    
        /**
         * 列出该目录下所有的目录名和文件名 不会列出整个目录名称,
         * 也不会遍历子目录
         * @param file
         */
        public static String[] listFileName(File file){
            String[] filenames = file.list();
            return filenames;
        }
    
        /**
         * 列出该目录下所有的目录名和文件名 不会列出整个目录,
         * 也不会遍历子目录
         * @param file
         */
        public static File[] listFile(File file){
            //直接列出目录下的,产生的是File对象,也不会遍历子目录
            File[] files = file.listFiles();
            return files;
        }
    
        /**
         * 能够遍历file和file子目录下的所有内容
         * @param file
         */
        public static void listFile1(File file, List<File> fileList){
            File[] files = file.listFiles();
            for (File file2 : files) {
                if(file2.isFile()){//如果是文件
                    fileList.add(file2);
                }else if(file2.isDirectory()){//如果是目录 进行递归调用
                    listFile1(file2, fileList);
                }
            }
        }
    
        /**
         * 能够遍历file和file子目录下所有的文件名称
         * @param file
         */
        public static void listFileName1(File file, List<String> fileList){
            File[] files = file.listFiles();
            for (File file2 : files) {
                if(file2.isFile()){//如果是文件
                    fileList.add(file2.getAbsolutePath());
                }else if(file2.isDirectory()){//如果是目录 进行递归调用
                    listFileName1(file2, fileList);
                }
            }
        }
    
    
        public static void listFile2(File file){
            //String[] filenames = file.list(new MyFileNameFilter());
            String[] filenames = file.list(new FilenameFilter() {
    
                @Override
                public boolean accept(File dir, String name) {
                    // TODO Auto-generated method stub
                    return name.endsWith(".java");
                }
            });
            for (String string : filenames) {
                log.info(file.getAbsolutePath()+"/"+string);
            }
        }
    
        public static void listFile3(File file){
            File[] files = file.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    // pathname 就是file下的每个文件or目录
                    // log.info(pathname);
                    return pathname.getAbsolutePath().endsWith(".java");
                }
            });
            log.info("=======================");
            for (File file2 : files) {
                log.info(file2.getAbsolutePath());
            }
        }
    
        //递归拿出.java文件,包括子目录下的
        public static void listFile4(File file){
            File[] files = file.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    if(pathname.isFile())
                        return pathname.getAbsolutePath().endsWith(".java");
                    else if(pathname.isDirectory())
                        listFile4(pathname);
                    return true;
    
                }
            });
            for (File file2 : files) {
                if(file2.isFile())
                    log.info(file2.getAbsolutePath());
            }
    
        }
    
        public static void listFile5(File file){
            File[] files = file.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    //log.info(dir.getAbsolutePath()+" ... "+name);
                    File file1 = new File(dir,name);
                    if(file1.isFile())
                        return name.endsWith(".java");
                    else if(file1.isDirectory())
                        listFile5(file1);
                    return true;
                }
            });
            for (File file2 : files) {
                if(file2.isFile())
                    log.info(file2.getAbsolutePath());
            }
        }
    
        static class MyFileNameFilter implements FilenameFilter{
            //file列出的每个文件都要调用accept方法,返回true留下,false被过滤
            @Override
            public boolean accept(File dir, String name) {
                //File dir 代表父目录 name代表直接子的名字是文件名or目录名
                //log.info(dir.getAbsolutePath()+" ... "+name);
                return name.endsWith(".java");
            }
    
        }
    
    
    }

    4、效果

     四、总结

      jenkins-client库还有很多api需要我们去研究,这里只是演示了其中一个小的功能

    知道、想到、做到、得到
  • 相关阅读:
    lightoj 1027 简单概率dp
    zoj 3329 One Person Game 概率dp
    光速输入法
    百度卫士+7654联盟
    MyCCL复合特征码定位系统3.0 build 23 中文绿色版
    右键管家MenuMgr-1.2单文件
    影子卫士中文注册版+系统保护的尚方宝剑、、
    Easyspy网络检测系统
    百度杀毒+7654联盟
    QQ浏览器+7654联盟
  • 原文地址:https://www.cnblogs.com/Durant0420/p/15142982.html
Copyright © 2011-2022 走看看