欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jenkins中如何集成commander應(yīng)用的完整步驟

 更新時(shí)間:2018年05月14日 09:40:59   作者:貝克田莊  
jenkins是一個(gè)用java編寫的開源的持續(xù)集成工具,在與oracle發(fā)生爭(zhēng)執(zhí)后,項(xiàng)目從hudson項(xiàng)目獨(dú)立出來,下面這篇文章主要給大家介紹了關(guān)于jenkins中如何集成commander應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

Jenkins 是一款流行的開源持續(xù)集成(Continuous Integration)工具,廣泛用于項(xiàng)目開發(fā),具有自動(dòng)化構(gòu)建、測(cè)試和部署等功能。

最近參加公司的集成測(cè)試平臺(tái)的開發(fā),在開發(fā)中遇到了不少問題,兩個(gè)星期的迭代也即將完成,在這也用這篇博客記錄下開發(fā)中的問題,供讀者參考

公司的應(yīng)用較多,所以需要了解這幾種應(yīng)用在jenkins中如何做構(gòu)建,我自己參與的有兩種commander的應(yīng)用,一種是大數(shù)據(jù)類的,一個(gè)是我們服務(wù)端架構(gòu)組的scala應(yīng)用

1、大數(shù)據(jù)應(yīng)用BigData

配置如下:

 

配置文件對(duì)應(yīng)的xml文件:通過crul獲取xml配置文件:http://host/job/tar_py_dwx_dev/config.xml

<project>
<actions/>
<description/>
<keepDependencies>false</keepDependencies>
<properties>
<com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty plugin="gitlab-plugin@1.5.5">
<gitLabConnection/>
</com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty>
<hudson.plugins.promoted__builds.JobPropertyImpl plugin="promoted-builds@3.1">
<activeProcessNames>
<string>Deploy DEV</string>
</activeProcessNames>
</hudson.plugins.promoted__builds.JobPropertyImpl>
</properties>
<scm class="hudson.plugins.git.GitSCM" plugin="git@3.8.0">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<url>ssh://git@172.0.10.182:10022/bigdata/dwx.git</url>
<credentialsId>84f4be19-ea8d-4271-8cfb-42af8f507285</credentialsId>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>*/develop</name>
</hudson.plugins.git.BranchSpec>
</branches>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<submoduleCfg class="list"/>
<extensions/>
</scm>
<assignedNode>!macmini</assignedNode>
<canRoam>false</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers>
<hudson.triggers.SCMTrigger>
<spec>H/5 * * * *</spec>
<ignorePostCommitHooks>false</ignorePostCommitHooks>
</hudson.triggers.SCMTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders>
<hudson.tasks.Shell>
<command>
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
</command>
</hudson.tasks.Shell>
</builders>
<publishers/>
<buildWrappers/>
</project>

從xml中獲取的信息有點(diǎn)和圖中的配置文件有點(diǎn)對(duì)應(yīng)不上

對(duì)于promotion的腳本在xml配置文件中是無法獲取的,這時(shí)候就有一個(gè)問題,這種api是無法獲取到promotion的的腳本,同時(shí)這也給我們的工作帶來了極大的挑戰(zhàn),那也意味著單純的通過這種方法是無法實(shí)現(xiàn)commander應(yīng)用的部署,和通過平臺(tái)的方式去直接操作jenkins的配置

但經(jīng)過查詢相關(guān)的api并不能找到相關(guān)的內(nèi)容,經(jīng)過不懈的努力,終于找到了和promote build 插件相關(guān)的api

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

這個(gè)接口能獲取到它的xml文件,但是并不能對(duì)該配置文件進(jìn)行增加和修改

對(duì)此我自己封裝了一些方法:

/**
 * @author chenlang
 * date 2018/5/7
 */
@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<String, String> 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("初創(chuàng)promotion時(shí)失敗" + 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;
 
/**
 * @author chenlang
 * date 2018/5/4
 */
@Component
public class JenkinsPromotionClient {
 
 @Autowired
 private JenkinsHttpClient jenkinsHttpClient;
 
 public JenkinsPromotionClient() {
 }
 
 /**
 * 獲取job的promotion配置文件
 *
 * @param jobName job名稱
 * @param promotionName promotion名稱
 * @return
 * @throws IOException
 */
 public Document getJobPromotionXml(String jobName, String promotionName) throws IOException, DocumentException {
 return DocumentHelper.parseText(this.getJobXml(jobName, promotionName));
 }
 
 
 /**
 * 更新job
 *
 * @param jobName
 * @param promotionName
 * @param jobXml
 * @throws IOException
 */
 public void updateJob(String jobName, String promotionName, String jobXml) throws IOException {
 this.jenkinsHttpClient.post_xml(this.toJobBaseUrl(jobName, promotionName) + "/config.xml", jobXml, true);
 }
 
 /**
 * 添加job腳本
 *
 * @param jobName
 * @param jobXml
 * @throws IOException
 */
 public void createJob(String jobName, String promotionName, String jobXml) throws IOException {
 this.jenkinsHttpClient.post_xml(this.toJobBaseUrl(jobName, promotionName) + "/config.xml", jobXml, true);
 }
 
 /**
 * 添加promotion的job
 *
 * @param jobName
 * @param map
 * @throws IOException
 */
 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;
 }
 
 /**
 * promotion腳本的構(gòu)建
 * @param jobName
 * @param promotionName
 * @param version
 * @param isFirstBuild
 * @throws IOException
 */
 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");
 }
 }
}

其中的方法封裝了對(duì)promote build插件中關(guān)于配置的增刪改查,以及promotion腳本的構(gòu)建

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
 

相關(guān)文章

  • 微服務(wù)?Spring?Boot?整合?Redis?BitMap?實(shí)現(xiàn)?簽到與統(tǒng)計(jì)功能

    微服務(wù)?Spring?Boot?整合?Redis?BitMap?實(shí)現(xiàn)?簽到與統(tǒng)計(jì)功能

    這篇文章主要介紹了微服務(wù)?Spring?Boot?整合?Redis?BitMap?實(shí)現(xiàn)?簽到與統(tǒng)計(jì)功能,文章簡(jiǎn)單介紹了Redis BitMap 基本用法結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • SpringBoot常用計(jì)量與bean屬性校驗(yàn)和進(jìn)制數(shù)據(jù)轉(zhuǎn)換規(guī)則全面分析

    SpringBoot常用計(jì)量與bean屬性校驗(yàn)和進(jìn)制數(shù)據(jù)轉(zhuǎn)換規(guī)則全面分析

    這篇文章主要介紹了SpringBoot常用計(jì)量、bean屬性校驗(yàn)與進(jìn)制數(shù)據(jù)轉(zhuǎn)換規(guī)則,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • J2EE基礎(chǔ)之EJB全面了解

    J2EE基礎(chǔ)之EJB全面了解

    下面小編就為大家?guī)硪黄狫2EE基礎(chǔ)之EJB全面了解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • java中ArrayList和LinkedList的區(qū)別詳解

    java中ArrayList和LinkedList的區(qū)別詳解

    這篇文章主要介紹了java中ArrayList和LinkedList的區(qū)別詳解,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • 基于Java中的StringTokenizer類詳解(推薦)

    基于Java中的StringTokenizer類詳解(推薦)

    下面小編就為大家?guī)硪黄贘ava中的StringTokenizer類詳解(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 淺析Java中String與StringBuffer拼接的區(qū)別

    淺析Java中String與StringBuffer拼接的區(qū)別

    String拼接會(huì)創(chuàng)建一個(gè)新的String對(duì)象,存儲(chǔ)拼接后的字符串,StringBuffer拼接是直接在本身拼接,會(huì)即時(shí)刷新。下面通過本文給大家介紹Java中String與StringBuffer拼接的區(qū)別,感興趣的朋友一起看看吧
    2017-06-06
  • Java Stream中的Spliterator類概念及原理解析

    Java Stream中的Spliterator類概念及原理解析

    Spliterator是Java 8引入的一個(gè)接口,位于java.util包中,它結(jié)合了迭代器(Iterator)的遍歷能力和分割器(Splitter)的分割能力,本文將詳細(xì)介紹Spliterator的概念、原理、作用、類中定義的關(guān)鍵方法,以及它在Stream API中的實(shí)際應(yīng)用,感興趣的朋友一起看看吧
    2024-08-08
  • 淺談servlet與jsp的關(guān)系

    淺談servlet與jsp的關(guān)系

    本文主要介紹了servlet與jsp的相關(guān)知識(shí),并總結(jié)出servlet與jsp之間的關(guān)系,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Java代碼讀取文件緩存問題解決

    Java代碼讀取文件緩存問題解決

    最近遇到了一個(gè)Java文件讀取的緩存問題,打遠(yuǎn)程斷點(diǎn)出現(xiàn)的也是原來的老代碼參數(shù),本文就介紹一下解決方法,感興趣的可以了解一下
    2021-05-05
  • Spring中如何使用Comparator接口

    Spring中如何使用Comparator接口

    Comparator比較器接口可以將自身傳遞給排序方法(比如Collections.sort或Arrays.sort),以便對(duì)排序順序進(jìn)行精確控制。本文講述Spring中如何使用Comparator接口
    2021-06-06

最新評(píng)論