jenkins插件开发,在任何的一个类中获取当前Job

现在有这样一个需求,我需要获取当前Job的配置参数,该配置参数config.xml 文件 的路径是 JENKINS_HOME/jobs/${Job name}/config.xml。也就是说我要去获取这个config.xml 文件值。

第一步我就先要去获取到当前job 。直接放代码

    public Job getParentJob() {
        Job context = null;
        List<Job> jobs = Jenkins.getInstance().getAllItems(Job.class);

        for (Job job : jobs) {
            if (!(job instanceof TopLevelItem)) continue;

            ParametersDefinitionProperty property = (ParametersDefinitionProperty) job.getProperty(ParametersDefinitionProperty.class);

            if (property != null) {
                List<ParameterDefinition> parameterDefinitions = property.getParameterDefinitions();

                if (parameterDefinitions != null) {
                    for (ParameterDefinition pd : parameterDefinitions) {
                        if (pd instanceof SVNParameterDefinition && ((SVNParameterDefinition) pd).compareTo(this) == 0) {
                            context = job;
                            break;
                        }
                    }
                }
            }
        }

        return context;
    }

  代码中SVNParameterDefinition  是我自己的实现类  

拿到这个Job后,你就可以为所欲为了  哈哈  我这里是要通过这个Job获取到一些svn的地址还有用户名和密码。

    public List<String> getDirNameTips() throws IOException {
        Job job = getParentJob();
//        job.writeConfigDotXml(new FileOutputStream("D:/1.xml"));
        XmlFile xmlFile = Items.getConfigFile(job);
//        String s = xmlFile.asString();
        XStream xStream = xmlFile.getXStream();
        Object o = xStream.fromXML(xmlFile.getFile());
        if(o != null && o instanceof Project) {
            Project p = (Project) o;
            DescribableList list = p.getPublishersList();
            for (Object o1 : list) {
                if(o1 instanceof SVNPublisher) {
                    SVNPublisher sp = (SVNPublisher) o1;
                    String svn_url = sp.getUrl();
                    String accessId = sp.getAccessId();
                    String secretKey = sp.getSecretKey();
                    SVNUtil su = new SVNUtil(svn_url, accessId, secretKey);
                    try {
                        List<SVNDirEntry> svnDirEntries = new ArrayList<>();
                        SvnOption.listEntries(su.getSVNRepository(),"",svnDirEntries,"", SvnGetFileTypeEnum.DIR,false);
                        return svnDirEntries.stream().map(e -> e.getName()).collect(Collectors.toList());
                    } catch (SVNException e) {
                        e.printStackTrace();
                        break;
                    }

                }
            }
        }
        return new ArrayList<>();
    }

附上jenkins api  https://javadoc.jenkins.io/index.html?hudson/XmlFile.html

 https://github.com/zxavier94/svn-publisher  这是我自己开发的jenkins 插件 跟git publisher 类似

posted @ 2019-05-24 16:35  margo  阅读(742)  评论(0编辑  收藏  举报