Kata pengantar
Jenkins adalah alat integrasi kontinu open source populer yang banyak digunakan dalam pengembangan proyek dan memiliki fungsi seperti konstruksi otomatis, pengujian dan penyebaran.
Baru -baru ini, saya berpartisipasi dalam pengembangan platform pengujian terintegrasi perusahaan dan menghadapi banyak masalah dalam pengembangan. Iterasi dua minggu akan selesai. Saya akan menggunakan blog ini untuk merekam masalah dalam pengembangan untuk referensi pembaca.
Perusahaan memiliki banyak aplikasi, jadi kami perlu memahami cara membangun aplikasi ini di Jenkins. Saya telah berpartisipasi dalam dua jenis aplikasi komandan, satu adalah kelas data besar, dan yang lainnya adalah aplikasi Scala dari grup arsitektur server kami.
1. Aplikasi Big Data
Konfigurasinya adalah sebagai berikut:
File XML yang sesuai dengan file konfigurasi: dapatkan file konfigurasi xml melalui cul: http: //host/job/tar_py_dwx_dev/config.xml
<poject> <action/> <description/> <eperdependencies> false </iaddependencies> <soperties> <com.dabsquared.gitlabjenkins.connection.gitlabConnectionProperty Plugin = "[email protected]"> <gitlabconnection/</com.dabsquared.gitlabjenkins.connection.gitlabconnectionProperty> <hudson.plugins.promoted__builds.jobproperty> <hudson.plugins.promoted__builds.jobproperty> <hudson.plugins.promoted__builds.jobproperty> <hudson.promoted Dev </string> </activeProcessNames> </hudson.plugins.promoted__builds.jobpropertyImpl> </Properties> <scm plugin = "[email protected]"> <configVersion> 2 </configVersion> <userremoteConfigs> <hudson.plugins.git.userrem OTEConfig> <Url> ssh: //[email protected]: 10022/bigdata/dwx.git </rerl> <credentialsid> 84f4be19-ea8d-4271 -8cfb-42af8f507285 </credentialsid> </hudson.plugins.git.userremoteConfig> </userremoteconfigs> <danches> <hudson.plugins.git.branchspec> <name>*/kembangkan </name> </hudson.pl ES> <DogenerateSubModuleConfigurations> false </ageneratesUbmoduleConfigurations> <muboduleCfg/> <extensions/</cm> <ugricednode>! MacMini </ditugaskan> <Canroam> false </canroam> <conabled> false </false bled> <blockbuildwhendownstreamBuilding> false </lockbuildwhendownstreamBuilding> <lockbuildwhenupstreamBuilding> false </blockbuildwhenupstreamBuilding> <triggers> <hudson.triggers.scmtrigger> <sec> h/h/h/h/5 * *</spec> <degnorePostCommithooks> false </ ignorepostCommithooks> </hudson.triggers.scmtrigger> </driggers> <concurrentBuild> false </concurrentBuild> <duilders> <hudson.taksk $ {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> </duilders> <publishers/> <buildwrappers/> <poject>
Informasi yang diperoleh dari XML tidak sesuai dengan file konfigurasi pada gambar.
Skrip promosi tidak dapat diperoleh dalam file konfigurasi XML. Saat ini, ada masalah. API ini tidak dapat memperoleh skrip promosi. Pada saat yang sama, ini juga membawa tantangan besar bagi pekerjaan kami. Ini juga berarti bahwa penyebaran aplikasi Komandan tidak dapat diwujudkan melalui metode ini dan konfigurasi Jenkins melalui metode platform dapat dioperasikan secara langsung.
Namun, setelah menanyakan API yang relevan, kami tidak dapat menemukan konten yang relevan. Setelah upaya yang tak henti-hentinya, kami akhirnya menemukan API terkait dengan promote build plug-in
Kueri: http: //host/job/jobname/promotion/process/promotionname/config.xml
Antarmuka ini dapat memperoleh file XML -nya, tetapi tidak dapat menambah atau memodifikasi file konfigurasi.
Saya telah merangkum beberapa metode untuk ini:
/** * @author chenlang * tanggal 2018/5/7 */ @slf4jpublic kelas 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': {'Promosi': {'ActiveItems': {'nama': '%s ',' isvisible ':' ',' ikon ':' star-gold ',' hasassignedlabel ': false,' ditugaskan label ':' ',' kondisi ': {' stapler-class-bag ':' true '}}}}} "; Private Static Final String Content_Type = "Application/X-WWW-Form-Urlencoded"; public static void updatePromotionshell (dokumen jobconfigdocument, string jobname, jenkinspromotionclient jenkinspromotionclient, string promtionshell, string path) melempar ioException, DocumentException {if (stringutils.isblank (promionshell)) {return; } String promotionname = getPromotionName (jobconfigDocument, path); Dokumen dokumen = jenkinspromotionclient.getjoBpromotionxml (jobname, promtionname); document.selectsingLenode (path_promotion_command) .setText (promotionshell); jenkinspromotionclient.updatejob (jobname, promosiname, 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); Dokumen dokumen = jenkinspromotionclient.getjobpromotionxml (tmpjobname, promosiName); document.selectsingLenode (path_promotion_command) .setText (promotionshell); Peta <string, string> peta = maps.newhashMap (); peta.put ("tipe konten", content_type); peta.put ("json", string.format (create_promotion_json, promosiName)); coba {jenkinspromotionclient.createJob (jobname, peta); } catch (Exception e) {log.error ("Gagal saat memulai promosi" + e); } JenkinspromotionClient.CreateJob (JobName, PromtionName, document.asxml ()); } public static String getPromotionName (dokumen jobconfigdocument, string path) {return jobconfigdocument.selectsinglenode (path) .getText (); }} Paket cn.caijiajia.phoenix.service.jenkins; impor com.offbytwo.jenkins.client.jenkinstpClient; impor com.offbytwo.jenkins.client.util.encodingutils; impor org.dom4j.document; impor.util.encodingutils; impor org.dom4j.document; impor.util. org.dom4j.documenthelper; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotipe.sponent; impor java.io.ioexception; impor java.util.map; /** * @Author Chenlang * Tanggal 2018/5/4 */ @ComponentPublic Kelas JenkinspromotionClient {@Autowired Private JeninshttpClient JenkinshttpClient; public JenkinsPromotionClient() { } /** * Get the job's promotion configuration file* * @param jobName job name* @param promotionName promotion name* @return * @throws IOException */ public Document getJobPromotionXml(String jobName, String promotionName) throws IOException, DocumentException { return Documenthelper.parsetext (this.getjobxml (jobname, promosiName)); } / ** * Perbarui pekerjaan * * @param jobname * @param promionname * @param jobxml * @throws ioException * / public void updateJob (string jobname, string promtionname, string jobxml) lemparan ioException {this.jenkinspclient.post_xml (this. "/config.xml", jobxml, true); } / ** * Tambahkan skrip pekerjaan * * @param jobname * @param jobxml * @throws ioException * / public void createJob (string jobname, string promotionname, string jobxml) melempar ioException {this.jenkinspclient.post_xml (this.toException {this.jenkinspclient.post_xml (this.toException {this.jenkinspclient.post_xml (this.tojobbase "/config.xml", jobxml, true); }/** * Tambahkan pekerjaan promosi * * @param jobname * @param peta * @throws ioException */public void createJob (string jobname, peta peta) melempar ioException {this.jenkinsode (jobname), "/job/" + {this.jenkinsode (jobname), "/job/" + ensodingutils.encode (jobname))? " } Private String getjobxml (string jobname, string promionname) melempar ioException {return this.jenkinshttpclient.get (this.toJobbaseUrl (jobname, promotionname) + "/config.xml"); } Private String ToJoBBaseUrl (String JobName, String PromionName) {return "/job/" + encodingutils.encode (JobName) + "/promosi/proses/" + promosiName; } /** * Construction of promotion scripts* @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)+"/"+versi+"/promosi/forcepromotion? name ="+promosiName+"& json =%7b%7d & submit = paksa promosi"); } else {this.jenkinshttpclient.post ("/job/"+encodingutils.encode (JobName)+"/"+Versi+"/Promosi/"+PromosiName+"/Build? JSON =%7B%7D & Kirim = Eksecute Promosi"); }}}Metode ini merangkum penambahan konfigurasi, penghapusan, modifikasi dan permintaan promote build plug-in, serta konstruksi skrip promosi.
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.