栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

jenkins中如何集成commander应用的完整步骤

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

jenkins中如何集成commander应用的完整步骤

前言

Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。

最近参加公司的集成测试平台的开发,在开发中遇到了不少问题,两个星期的迭代也即将完成,在这也用这篇博客记录下开发中的问题,供读者参考

公司的应用较多,所以需要了解这几种应用在jenkins中如何做构建,我自己参与的有两种commander的应用,一种是大数据类的,一个是我们服务端架构组的scala应用

1、大数据应用BigData

配置如下:

 

配置文件对应的xml文件:通过crul获取xml配置文件:http://host/job/tar_py_dwx_dev/config.xml




false






Deploy DEV




2


ssh://git@172.0.10.182:10022/bigdata/dwx.git
84f4be19-ea8d-4271-8cfb-42af8f507285




*/develop


false



!macmini
false
false
false
false


H/5 * * * *
false


false



project=dwx1 cd ${WORKSPACE} tar zcvf ${project}.tar.gz * aws s3 cp ${project}.tar.gz s3://lattebank-jenkins-build-dev/${JOB_base_NAME}/${BUILD_NUMBER}/ --region cn-north-1 rm -rf ${project}.tar.gz





从xml中获取的信息有点和图中的配置文件有点对应不上

对于promotion的脚本在xml配置文件中是无法获取的,这时候就有一个问题,这种api是无法获取到promotion的的脚本,同时这也给我们的工作带来了极大的挑战,那也意味着单纯的通过这种方法是无法实现commander应用的部署,和通过平台的方式去直接操作jenkins的配置

但经过查询相关的api并不能找到相关的内容,经过不懈的努力,终于找到了和promote build 插件相关的api

查询:http://host/job/jobName/promotion/process/promotionName/config.xml

这个接口能获取到它的xml文件,但是并不能对该配置文件进行增加和修改

对此我自己封装了一些方法:


@Slf4j
public class JenkinsPromotionUtils {
 
 
 private static final String SUB_PATH_PROMOTION_COOMMAND = "/hudson.plugins.promoted__builds.PromotionProcess";
 private static final String SUB_PATH_BUILD = "/buildSteps";
 private static final String SUB_PATH_BUILDER_SHELL_COMMAND = "/hudson.tasks.Shell/command";
 private static final String PATH_PROMOTION_COMMAND = SUB_PATH_PROMOTION_COOMMAND + SUB_PATH_BUILD + SUB_PATH_BUILDER_SHELL_COMMAND;
 private static String CREATE_PROMOTION_JSON = "{'properties':{'stapler-class-bag':'true','hudson-plugins-promoted_builds-JobPropertyImpl':{'promotions':{'activeItems':{'name':'%s','isVisible':'','icon':'star-gold','hasAssignedLabel':false,'assignedLabelString':'','conditions':{'stapler-class-bag':'true'}}}}}}";
 private static final String CONTENT_TYPE = "application/x-www-form-urlencoded";
 
 
 public static void updatePromotionShell(document jobConfigdocument, String jobName, JenkinsPromotionClient jenkinsPromotionClient, String promotionShell, String path) throws IOException, documentException {
 if (StringUtils.isBlank(promotionShell)) {
  return;
 }
 String promotionName = getPromotionName(jobConfigdocument, path);
 document document = jenkinsPromotionClient.getJobPromotionXml(jobName, promotionName);
 document.selectSingleNode(PATH_PROMOTION_COMMAND).setText(promotionShell);
 jenkinsPromotionClient.updateJob(jobName, promotionName, document.asXML());
 }
 
 public static void createPromotionShell(document jobConfigdocument, String tmpJobName, String jobName, String promotionShell, String path, JenkinsPromotionClient jenkinsPromotionClient) throws IOException, documentException {
 if (StringUtils.isBlank(promotionShell)) {
  return;
 }
 String promotionName = getPromotionName(jobConfigdocument, path);
 document document = jenkinsPromotionClient.getJobPromotionXml(tmpJobName, promotionName);
 document.selectSingleNode(PATH_PROMOTION_COMMAND).setText(promotionShell);
 Map map = Maps.newHashMap();
 map.put("Content-Type", CONTENT_TYPE);
 map.put("json", String.format(CREATE_PROMOTION_JSON, promotionName));
 try {
  jenkinsPromotionClient.createJob(jobName, map);
 } catch (Exception e) {
  log.error("初创promotion时失败" + e);
 }
 jenkinsPromotionClient.createJob(jobName, promotionName, document.asXML());
 }
 
 public static String getPromotionName(document jobConfigdocument, String path) {
 return jobConfigdocument.selectSingleNode(path).getText();
 }
}
package cn.caijiajia.phoenix.service.jenkins;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.client.util.EncodingUtils;
import org.dom4j.document;
import org.dom4j.documentException;
import org.dom4j.documentHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Map;
 

@Component
public class JenkinsPromotionClient {
 
 @Autowired
 private JenkinsHttpClient jenkinsHttpClient;
 
 public JenkinsPromotionClient() {
 }
 
 
 public document getJobPromotionXml(String jobName, String promotionName) throws IOException, documentException {
 return documentHelper.parseText(this.getJobXml(jobName, promotionName));
 }
 
 
 
 public void updateJob(String jobName, String promotionName, String jobXml) throws IOException {
 this.jenkinsHttpClient.post_xml(this.toJobbaseUrl(jobName, promotionName) + "/config.xml", jobXml, true);
 }
 
 
 public void createJob(String jobName, String promotionName, String jobXml) throws IOException {
 this.jenkinsHttpClient.post_xml(this.toJobbaseUrl(jobName, promotionName) + "/config.xml", jobXml, true);
 }
 
 
 public void createJob(String jobName, Map map) throws IOException {
 this.jenkinsHttpClient.post_form("/job/" + EncodingUtils.encode(jobName) + "/configSubmit?", map, false);
 }
 
 private String getJobXml(String jobName, String promotionName) throws IOException {
 return this.jenkinsHttpClient.get(this.toJobbaseUrl(jobName, promotionName) + "/config.xml");
 }
 
 private String toJobbaseUrl(String jobName, String promotionName) {
 return "/job/" + EncodingUtils.encode(jobName) + "/promotion/process/" + promotionName;
 }
 
 
 public void build(String jobName,String promotionName,Integer version,boolean isFirstBuild) throws IOException{
 if (isFirstBuild) {
  this.jenkinsHttpClient.post("/job/"+ EncodingUtils.encode(jobName) + "/"+version+"/promotion/forcePromotion?name="+promotionName+"&json=%7B%7D&Submit=Force promotion");
 } else {
  this.jenkinsHttpClient.post("/job/"+ EncodingUtils.encode(jobName) + "/"+version+"/promotion/"+promotionName+"/build?json=%7B%7D&Submit=Re-execute promotion");
 }
 }
}

其中的方法封装了对promote build插件中关于配置的增删改查,以及promotion脚本的构建

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对考高分网的支持。
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/140937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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