머리말
Jenkins는 프로젝트 개발에 널리 사용되는 인기있는 오픈 소스 연속 통합 도구로 자동화, 테스트 및 배포와 같은 기능이 있습니다.
최근에 저는 회사의 통합 테스트 플랫폼 개발에 참여했으며 개발에 많은 문제가 발생했습니다. 2 주 반복이 완료 될 예정입니다. 이 블로그를 사용하여 독자의 참조 개발 문제를 기록 할 것입니다.
회사에는 많은 응용 프로그램이 있으므로 Jenkins에서 이러한 응용 프로그램을 구축하는 방법을 이해해야합니다. 저는 두 가지 유형의 사령관 응용 프로그램에 참여했습니다. 하나는 빅 데이터 클래스이고 다른 하나는 서버 아키텍처 그룹의 Scala 응용 프로그램입니다.
1. 빅 데이터 응용 프로그램
구성은 다음과 같습니다.
구성 파일에 해당하는 XML 파일 : crul을 통해 XML 구성 파일을 얻습니다 : http : //host/job/tar_dwx_dev/config.xml
<project> <actions/> <description/> <cepdependencies> false </recepdependencies> <properties> <com.dabsquared.gitlabjenkins.connection.gitlabConnectionProperty 플러그인 = "[email protected]"> <gitlabConnection/</com.dabsquared.gitlabjenkins.connection.gitlabConnectionProperty> <hudson.plugins.promoted_builds.jobpropertyimplpin = "<[email protected] dev </string> </activeProcessNames> </hudson.plugins.promoted__builds.jobpropertyimpl> </properties> <scm 플러그인 = "[email protected]"> <configversion> 2 </configversion> <userremoteconfigs> <hudson.plugins.git.userrem oteconfig> <url> ssh : //[email protected] : 10022/bigdata/dwx.git </url> <credentialsid> 84f4be19-EA8D-4271 -8CFB-42AF8F507285 </credentialsid> </hudson.plugins.git.userremoteconfig> </userremoteconfigs> <hudson.plugins.git.branchspec>*/develop </name> </hudson.plugins.git.git.git.branchspecpec> es> <dogeneratesubmoduleconfigurations> false </dogeneratesubmoduleconfigurations> <submodulecfg/> <확장자/</scm> <할당 된node>! macmini </antadialednode> <canroam> false </canroam> disabled> false </disa BLED> <BlockBuildWhendownStreamBuilding> false </blockbuildwhendownstreambuilding> <blockbuildwhenupstreambuilding> false </blockbuildwhenupstreambuilding> <triggers> <hudson.triggers.scmtrigger> <spec> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</spec> <ingorepostcommithooks> false </ingorepostcommithooks> </hudson.triggers.scmtrigger> </triggers> <concurrentBuild> false </concurrentBuild> <builders> <hudson.tasks.shell> <command> project = dwx1 cd $} $ {project} .tar.gz * aws s3 cp $ {project} .tar.gz s3 : // lattebank-jenkins-build-dev/$ {job_base_name}/$ {build_number}/-영역 CN-North-1 Rm -rf $ {project} .tar.gz </command> </hudson.tasks.shell> </builders> <publishers/> <buildWrappers/> <project>
XML에서 얻은 정보는 그림의 구성 파일에 해당하지 않습니다.
XML 구성 파일에서 프로모션 스크립트를 얻을 수 없습니다. 현재 문제가 있습니다. 이 API는 프로모션 스크립트를 얻을 수 없습니다. 동시에 이것은 또한 우리의 일에 큰 도전을 가져옵니다. 또한이 방법을 통해 사령관 애플리케이션의 배포를 실현할 수 없으며 플랫폼 방법을 통한 Jenkins 구성을 직접 작동 할 수 있음을 의미합니다.
그러나 관련 API를 쿼리 한 후 관련 컨텐츠를 찾을 수 없습니다. 끊임없는 노력을 마친 후 마침내 API가 프로모션 빌드 플러그인과 관련된 것을 발견했습니다.
쿼리 : http : //host/job/jobname/promotion/process/promotionname/config.xml
이 인터페이스는 XML 파일을 얻을 수 있지만 구성 파일을 추가하거나 수정할 수는 없습니다.
나는 이것에 대한 몇 가지 방법을 캡슐화했다.
/** * @Author chenlang * 날짜 2018/5/7 */ @slf4jpublic class jenkinspromotionutils {private static final string sub_path_promotion_coommand = "/hudson.plugins.promoted__builds.promotionProcess"; 개인 정적 최종 문자열 sub_path_build = "/buildsteps"; 개인 정적 최종 문자열 sub_path_builder_shell_command = "/hudson.tasks.shell/command"; 개인 정적 최종 문자열 path_promotion_command = sub_path_promotion_coommand + sub_path_build + sub_path_builder_shell_command; 비공개 정적 문자열 create_promotion_json = "{ 'properties': { 'Stapler-class-bag': 'true', 'Hudson-Plugins-Promoted_builds-jobpropertyimpl': { 'promotions': { 'activeitems': { 'name': '%s ','isvisible ':' ','icon ':'star-gold ','hassassignedLabel ': false,'할당 된 labelstring ':' ','조건 ': {'Stapler-class-bag ':'true '}}}} "; 개인 정적 최종 문자열 content_type = "Application/x-www-form-urlencoded"; public static void updatepromotionShell (문서 jobConfigDocument, String jobName, JenkinsPromotionClient JenkinsPromotionClient, String PromotionShell, String Path) IoException, DocumentException {if (stringUtils.isblank (promotionShell)) {return; } string promotionName = getPromotionName (jobConfigDocument, Path); 문서 문서 = jenkinspromotionClient.getJobpromotionExml (jobname, promotionName); document.selectsinglenode (path_promotion_command) .settext (promotionShell); JenkinspromotionClient.updateJob (jobName, promotionName, document.asxml ()); } public static void createPromotionShell (문서 jobConfigDocument, String tmpjobName, String JobName, String PromotionShell, String Path, JenkinsPromotionClient JenkinsPromotionClient) IoException, DocumentException {if (stringUtils.isblank (returnesHell)) {return; } string promotionName = getPromotionName (jobConfigDocument, Path); 문서 문서 = jenkinspromotionClient.getJobpromotionExml (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)); {jenkinspromotionclient.createjob (jobname, map); } catch (예외 e) {log.error ( "프로모션을 시작할 때 실패" + e); } jenkinspromotionClient.createJob (jobName, promotionName, document.asxml ()); } public static string getPromotionName (문서 jobConfigDocument, String Path) {return jobConfigDocument.SelectSingLenode (path) .getText (); }} 패키지 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.documentelemence; import org.dom4j.documenthelper; import org.springframework.bean.beans.beans.annotation.autowired; import org.spramework.stereotyp.component; import java.io.ioexception; import java.util.map; /** * @Author chenlang * 날짜 2018/5/4 */ @componentPublic 클래스 JenkinsPromotionClient {@autowired private jenkinshttpclient jenkinshttpclient; public jenkinspromotionclient () {} / *** 작업의 프로모션 구성 파일** @param jobname 작업 이름* @param promotionName Promotion 이름* @return* @throws ioexception* / public document getJobpromotionExml (String jobname, String PromotionName) IoException, return {return retocception g getJobpromousexml (문자열 jobname, 문자열 promotionName) DocumentHelper.parsetext (this.getJobxml (jobname, promotionName)); } / ** * 업데이트 작업 * * @param jobname * @param promotionName * @param jobxml * @throws ioexception * / public void updatejob (문자열 jobName, String PromotionName, String JobXml) IoException {this.jenkinshttpclient.post_xml (jobjobbase, jobjobbaseurl). "/config.xml", jobxml, true); } / ** * 작업 스크립트 추가 * * @param jobname * @param jobxml * @throws ioexception * / public void createJob (String jobName, String PromotionName, String JobXml)는 ioException {this.jenkinshttpclient.post_xml (this.tojobbaseurl (promounname) + "/config.xml", jobxml, true); }/** * 프로모션 작업 추가 * * @param jobname * @param map * @throws ioexception */public void createJob (String jobName, Map Map)는 ioException {this.jenkinshttpclient.post_form ( "/job/" + encodingUtils.encode (jobname) + "/configsubment?"; } private String getJobxml (String jobName, String PromotionName)은 ioException {return this.jenkinshttpclient.get (this.tojobbaseurl (jobname, promotionName) + "/config.xml"); } private String tojobbaseurl (문자열 jobName, String PromotionName) {return "/job/" + encodingUtils.encode (jobName) + "/promotion/process/" + promotionName; } / ** * 프로모션 스크립트 구성 * @param jobname * @param promotionName * @param 버전 * @param isfirstBuild * @throws ioexception * / public void build (String jobname, String PromotionName, Integer 버전, 부울 isfirstbuild) ioexception {ifirstbuild) {ifirstbuild). this.jenkinshttpclient.post ( "/job/"+encodingUtils.encode (jobName)+"/"+버전+"/promotion/forcePromotion? name ="+promotionName+"& json =%7b%7d & 제출 = 힘 프로모션"); } else {this. }}}이 방법은 프로모션 스크립트의 구성뿐만 아니라 홍보 빌드 플러그인의 구성 첨가, 삭제, 수정 및 쿼리를 캡슐화합니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.