栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Jenkins API 自定义适配多配置类型任务

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jenkins API 自定义适配多配置类型任务

一、前言

这段时间参与的Devops平台需要对接Jenkins平台,以java方式调用Jenkins API达到对Jenkins平台上面的若干任务进行管理,官方Jenkins-client下面只提供了FreeStyle风格(也就是普通任务类型)和Maven风格的任务API,并未提供多配置类型的任务的API,所以就对比源码和API文档,仿照写了一份,也能够拿到任务的构建历史,任务配置信息,还有构建归档的文件等等。所以在此记录一下

二、API 1、AllMatrixBuilds
public class AllMatrixBuilds extends baseModel {
    private List allBuilds;

    public AllMatrixBuilds() {
    }

    public List getAllBuilds() {
        return this.allBuilds;
    }
}
2、HealthReport
public class HealthReport {
    private String description;
    private String iconClassName;
    private String iconUrl;
    private Integer score;

    public void setDescription(String description) {
        this.description = description;
    }

    public void setIconClassName(String iconClassName) {
        this.iconClassName = iconClassName;
    }

    public void setIconUrl(String iconUrl) {
        this.iconUrl = iconUrl;
    }

    public void setScore(Integer score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "HealthReport{" + "n" +
                "description='" + description + ''' + "n" +
                "iconClassName='" + iconClassName + ''' + "n" +
                "iconUrl='" + iconUrl + ''' + "n" +
                "score=" + score + "n" +
                '}';
    }
}
3、MatrixBuild
public class MatrixBuild extends Build {
    public static final MatrixBuild BUILD_HAS_NEVER_RUN = new MatrixBuild(-1, -1, "UNKNOWN");

    public MatrixBuild() {
    }

    public MatrixBuild(Build from) {
        super(from);
    }

    public MatrixBuild(int number, String url) {
        super(number, url);
    }

    public MatrixBuild(int number, int queueId, String url) {
        this.setNumber(number);
        this.setQueueId(queueId);
        this.setUrl(url);
    }

    @Override
    public MatrixBuildWithDetails details() throws IOException {
        MatrixBuildWithDetails detail = this.client.get(this.getUrl(), MatrixBuildWithDetails.class);
        detail.setClient(this.client);
        return detail;
    }

    @Override
    public String toString() {
        return "MatrixBuild{" + "n" +
                "number=" + super.getNumber() + "n" +
                "queueId='" + super.getQueueId() + ''' + "n" +
                "url='" + super.getUrl() + ''' + "n" +
                '}';
    }
}
4、MatrixBuildWithDetails
public class MatrixBuildWithDetails extends BuildWithDetails {
    private List runs;

    public List getRuns() {
        for (Build build : this.runs) {
            build.setClient(this.client);
        }
        return runs;
    }
}
5、MatrixConfiguration
public class MatrixConfiguration extends Job {
    private String name;
    private String url;
    private String color;

    public void setName(String name) {
        this.name = name;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getUrl() {
        return url;
    }

    public String getColor() {
        return color;
    }

    @Override
    public String toString() {
        return "MatrixConfiguration{" + "n" +
                "name='" + name + ''' + "n" +
                "url='" + url + ''' + "n" +
                "color='" + color + ''' + "n" +
                '}';
    }
}
6、MatrixJob
public class MatrixJob extends Job {
    public MatrixJob() {
    }

    public MatrixJob(String name, String url) {
        super(name, url);
    }

    public MatrixJob(String name, String url, String fullName) {
        super(name, url, fullName);
    }

    public MatrixJobWithDetail matrixJobDetail() throws IOException {
        return this.client.get(this.getUrl(), MatrixJobWithDetail.class);
    }
}
7、MatrixJobWithDetail
public class MatrixJobWithDetail extends MatrixJob {
    private String description;
    private String displayName;
    private String fullDisplayName;
    private String fullName;
    private String name;
    private String url;
    private boolean buildable;
    private List builds;
    private String color;
    private MatrixBuild firstBuild;
    private List healthReport;
    private boolean inQueue;
    private boolean keepDependencies;
    private MatrixBuild lastBuild;
    private MatrixBuild lastCompletedBuild;
    private MatrixBuild lastFailedBuild;
    private MatrixBuild lastStableBuild;
    private MatrixBuild lastSuccessfulBuild;
    private MatrixBuild lastUnstableBuild;
    private MatrixBuild lastUnsuccessfulBuild;
    private Integer nextBuildNumber;
    private QueueItem queueItem;
    private boolean concurrentBuild;
    private boolean disabled;
    private List downstreamProjects;
    private LabelWithDetails labelexpression;
    private List upstreamProjects;
    private List activeConfigurations;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public String getFullDisplayName() {
        return fullDisplayName;
    }

    public void setFullDisplayName(String fullDisplayName) {
        this.fullDisplayName = fullDisplayName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public void setBuildable(boolean buildable) {
        this.buildable = buildable;
    }

    public void setBuilds(List builds) {
        this.builds = builds;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void setFirstBuild(MatrixBuild firstBuild) {
        this.firstBuild = firstBuild;
    }

    public void setHealthReport(List healthReport) {
        this.healthReport = healthReport;
    }

    public void setInQueue(boolean inQueue) {
        this.inQueue = inQueue;
    }

    public void setKeepDependencies(boolean keepDependencies) {
        this.keepDependencies = keepDependencies;
    }

    public void setLastBuild(MatrixBuild lastBuild) {
        this.lastBuild = lastBuild;
    }

    public void setLastCompletedBuild(MatrixBuild lastCompletedBuild) {
        this.lastCompletedBuild = lastCompletedBuild;
    }

    public void setLastFailedBuild(MatrixBuild lastFailedBuild) {
        this.lastFailedBuild = lastFailedBuild;
    }

    public void setLastStableBuild(MatrixBuild lastStableBuild) {
        this.lastStableBuild = lastStableBuild;
    }

    public void setLastSuccessfulBuild(MatrixBuild lastSuccessfulBuild) {
        this.lastSuccessfulBuild = lastSuccessfulBuild;
    }

    public void setLastUnstableBuild(MatrixBuild lastUnstableBuild) {
        this.lastUnstableBuild = lastUnstableBuild;
    }

    public void setLastUnsuccessfulBuild(MatrixBuild lastUnsuccessfulBuild) {
        this.lastUnsuccessfulBuild = lastUnsuccessfulBuild;
    }

    public void setNextBuildNumber(Integer nextBuildNumber) {
        this.nextBuildNumber = nextBuildNumber;
    }

    public void setQueueItem(QueueItem queueItem) {
        this.queueItem = queueItem;
    }

    public void setConcurrentBuild(boolean concurrentBuild) {
        this.concurrentBuild = concurrentBuild;
    }

    public void setDisabled(boolean disabled) {
        this.disabled = disabled;
    }

    public void setDownstreamProjects(List downstreamProjects) {
        this.downstreamProjects = downstreamProjects;
    }

    public void setLabelexpression(LabelWithDetails labelexpression) {
        this.labelexpression = labelexpression;
    }

    public void setUpstreamProjects(List upstreamProjects) {
        this.upstreamProjects = upstreamProjects;
    }

    public void setActiveConfigurations(List activeConfigurations) {
        this.activeConfigurations = activeConfigurations;
    }

    @Override
    public String getFullName() {
        return fullName;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getUrl() {
        return url;
    }

    public boolean isBuildable() {
        return buildable;
    }

    public String getColor() {
        return color;
    }

    public List getHealthReport() {
        return healthReport;
    }

    public boolean isInQueue() {
        return inQueue;
    }

    public boolean isKeepDependencies() {
        return keepDependencies;
    }

    public Integer getNextBuildNumber() {
        return nextBuildNumber;
    }

    public QueueItem getQueueItem() {
        return queueItem;
    }

    public boolean isConcurrentBuild() {
        return concurrentBuild;
    }

    public boolean isDisabled() {
        return disabled;
    }


    public LabelWithDetails getLabelexpression() {
        return labelexpression;
    }

    public List getActiveConfigurations() {
        return activeConfigurations;
    }

    public List getBuilds() {
        return this.builds == null ? Collections.emptyList() : this.builds.stream().map(MatrixJobWithDetail.this::buildWithClient).collect(Collectors.toList());
    }

    public List getAllBuilds() throws IOException {
        String path = "/";

        try {
            List builds = this.client.get(path + "job/" + EncodingUtils.encode(this.getName()) + "?tree=allBuilds[number[*],url[*],queueId[*]]", AllMatrixBuilds.class).getAllBuilds();
            return builds == null ? Collections.emptyList() : builds.stream().map(MatrixJobWithDetail.this::buildWithClient).collect(Collectors.toList());
        } catch (HttpResponseException var3) {
            if (var3.getStatusCode() == 404) {
                return null;
            } else {
                throw var3;
            }
        }
    }

    public List getAllBuilds(Range range) throws IOException {
        String path = "/job/" + EncodingUtils.encode(this.getName()) + "?tree=allBuilds[number[*],url[*],queueId[*]]";

        try {
            List builds = this.client.get(path + range.getRangeString(), AllMatrixBuilds.class).getAllBuilds();
            return builds == null ? Collections.emptyList() : builds.stream().map(MatrixJobWithDetail.this::buildWithClient).collect(Collectors.toList());
        } catch (HttpResponseException var4) {
            if (var4.getStatusCode() == 404) {
                return null;
            } else {
                throw var4;
            }
        }
    }

    public MatrixBuild getFirstBuild() {
        return this.firstBuild == null ? MatrixBuild.BUILD_HAS_NEVER_RUN : this.buildWithClient(this.firstBuild);
    }

    public MatrixBuild getLastStableBuild() {
        return this.lastStableBuild == null ? MatrixBuild.BUILD_HAS_NEVER_RUN : this.buildWithClient(this.lastStableBuild);
    }

    public MatrixBuild getLastBuild() {
        return this.lastBuild == null ? MatrixBuild.BUILD_HAS_NEVER_RUN : this.buildWithClient(this.lastBuild);
    }

    public MatrixBuild getLastCompletedBuild() {
        return this.lastCompletedBuild == null ? MatrixBuild.BUILD_HAS_NEVER_RUN : this.buildWithClient(this.lastCompletedBuild);
    }

    public MatrixBuild getLastFailedBuild() {
        return this.lastFailedBuild == null ? MatrixBuild.BUILD_HAS_NEVER_RUN : this.buildWithClient(this.lastFailedBuild);
    }

    public MatrixBuild getLastSuccessfulBuild() {
        return this.lastSuccessfulBuild == null ? MatrixBuild.BUILD_HAS_NEVER_RUN : this.buildWithClient(this.lastSuccessfulBuild);
    }

    public MatrixBuild getLastUnstableBuild() {
        return this.lastUnstableBuild == null ? MatrixBuild.BUILD_HAS_NEVER_RUN : this.buildWithClient(this.lastUnstableBuild);
    }

    public MatrixBuild getLastUnsuccessfulBuild() {
        return this.lastUnsuccessfulBuild == null ? MatrixBuild.BUILD_HAS_NEVER_RUN : this.buildWithClient(this.lastUnsuccessfulBuild);
    }


    private MatrixBuild buildWithClient(MatrixBuild from) {
        MatrixBuild ret = new MatrixBuild(from);
        ret.setClient(this.client);
        return ret;
    }

    public List getDownstreamProjects() {
        return this.downstreamProjects == null ? Collections.emptyList() : Lists.transform(this.downstreamProjects, new MatrixJobWithDetail.MatrixJobWithClient());
    }

    public List getUpstreamProjects() {
        return this.upstreamProjects == null ? Collections.emptyList() : Lists.transform(this.upstreamProjects, new MatrixJobWithDetail.MatrixJobWithClient());
    }


    @Override
    public String toString() {
        return "MatrixJobWithDetail{" + "n" +
                "description='" + description + ''' + "n" +
                "displayName='" + displayName + ''' + "n" +
                "fullDisplayName='" + fullDisplayName + ''' + "n" +
                "fullName='" + fullName + ''' + "n" +
                "fullName='" + fullName + ''' + "n" +
                "name='" + name + ''' + "n" +
                "url='" + url + ''' + "n" +
                "buildable=" + buildable + "n" +
                "builds=" + builds + "n" +
                "color='" + color + ''' + "n" +
                "firstBuild=" + firstBuild + "n" +
                "healthReport=" + healthReport + "n" +
                "inQueue=" + inQueue + "n" +
                "keepDependencies=" + keepDependencies + "n" +
                "lastBuild=" + lastBuild + "n" +
                "lastCompletedBuild=" + lastCompletedBuild + "n" +
                "lastFailedBuild=" + lastFailedBuild + "n" +
                "lastStableBuild=" + lastStableBuild + "n" +
                "lastSuccessfulBuild=" + lastSuccessfulBuild + "n" +
                "lastUnstableBuild=" + lastUnstableBuild + "n" +
                "lastUnsuccessfulBuild=" + lastUnsuccessfulBuild + "n" +
                "nextBuildNumber=" + nextBuildNumber + "n" +
                "queueItem=" + queueItem + "n" +
                "concurrentBuild=" + concurrentBuild + "n" +
                "disabled=" + disabled + "n" +
                "downstreamProjects=" + downstreamProjects + "n" +
                "labelexpression=" + labelexpression + "n" +
                "upstreamProjects=" + upstreamProjects + "n" +
                "activeConfigurations=" + activeConfigurations + "n" +
                '}';
    }

    private class MatrixJobWithClient implements Function {
        private MatrixJobWithClient() {
        }

        @Override
        public Job apply(Job job) {
            assert job != null;
            job.setClient(MatrixJobWithDetail.this.client);
            return job;
        }
    }
}
8、MatrixJobJenkinsServer
public class MatrixJobJenkinsServer extends JenkinsServer {
    private final Logger MATRIX_LOGGER;
    private final JenkinsHttpConnection MATRIX_CLIENT;

    public MatrixJobJenkinsServer(URI serverUri) {
        this(new JenkinsHttpClient(serverUri));
    }

    public MatrixJobJenkinsServer(URI serverUri, String username, String passwordOrToken) {
        this(new JenkinsHttpClient(serverUri, username, passwordOrToken));
    }

    public MatrixJobJenkinsServer(JenkinsHttpConnection client) {
        super(client);
        this.MATRIX_LOGGER = LoggerFactory.getLogger(this.getClass());
        this.MATRIX_CLIENT = client;
    }

    
    public MatrixJobWithDetail getMatrixJob(String jobName) throws IOException {
        return this.getMatrixJob((FolderJob) null, UrlUtils.toFullJobPath(jobName));
    }

    private MatrixJobWithDetail getMatrixJob(FolderJob folder, String jobName) throws IOException {
        try {
            MatrixJobWithDetail job = this.MATRIX_CLIENT.get(UrlUtils.toJobbaseUrl(folder, jobName), MatrixJobWithDetail.class);
            job.setClient(this.MATRIX_CLIENT);
            return job;
        } catch (HttpResponseException var4) {
            this.MATRIX_LOGGER.debug("getMatrixJob(jobName={}) status={}", jobName, var4.getStatusCode());
            if (var4.getStatusCode() == 404) {
                return null;
            } else {
                throw var4;
            }
        }
    }
}
三、测试

其他的直接调用测就可以了,主要是测了拿取归档文件

private void getMatrixJobBuildArtifact(String jobName, int buildNumber) {
    try {
        MatrixJobWithDetail matrixJobWithDetail = matrixJobServer.getMatrixJob(jobName);
        List matrixBuilds = matrixJobWithDetail.getAllBuilds().stream().filter(build -> build.getNumber() == buildNumber).collect(Collectors.toList());
        if (matrixBuilds.size() != 1) {
            throw new Exception("获取构建失败");
        }
        MatrixBuildWithDetails matrixBuild = matrixBuilds.get(0).details();
        List runs = matrixBuild.getRuns();
        BuildWithDetails details = runs.get(0).details();
        List artifacts = details.getArtifacts();
        for (Artifact artifact : artifacts) {
            String urlBuilder = details.getUrl() + "artifact/" +
                    artifact.getFileName();
            URI uri = new URI(urlBuilder);
            InputStream inputStream = client.getFile(uri);
            File file = new File("C:\Users\Administrator\Desktop\" + artifact.getFileName());
            FileOutputStream outputStream = new FileOutputStream(file, true);
            byte[] bytes = new byte[inputStream.available()];
            int ch;
            while ((ch = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, ch);
            }
            inputStream.close();
            outputStream.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号