From 2fd55c56eb599fdfae40a455f7aaac0cee2291cf Mon Sep 17 00:00:00 2001 From: LiLi Date: Thu, 13 Apr 2017 19:44:04 +0800 Subject: [PATCH 1/3] lili --- jenkins-exec/bin/dependency-reduced-pom.xml | 105 +++++++++++ jenkins-exec/bin/pom.xml | 178 ++++++++++++++++++ .../com/educoder/jenkins/api/JenkinsApi.class | Bin 0 -> 8078 bytes .../com/educoder/jenkins/api/TrustieApi.class | Bin 0 -> 2238 bytes .../jenkins/controller/BaseController.class | Bin 0 -> 1999 bytes .../controller/JenkinsController.class | Bin 0 -> 7026 bytes .../controller/PipeLineController.class | Bin 0 -> 6420 bytes .../com/educoder/jenkins/model/Case.class | Bin 0 -> 2535 bytes .../educoder/jenkins/settings/AppConfig.class | Bin 0 -> 2838 bytes .../educoder/jenkins/utils/Base64Helper.class | Bin 0 -> 2249 bytes .../jenkins/utils/ExecuteShellCommand.class | Bin 0 -> 2530 bytes .../educoder/jenkins/utils/HttpHelper.class | Bin 0 -> 4659 bytes .../educoder/jenkins/utils/StringUtil.class | Bin 0 -> 1462 bytes .../src/main/resources/applicationContext.xml | 17 ++ .../bin/src/main/resources/config.properties | 16 ++ .../main/resources/in_out.template.pipeline | 22 +++ .../src/main/resources/java.template.pipeline | 20 ++ .../bin/src/main/resources/job.template.xml | 21 +++ .../bin/src/main/resources/log4j.properties | 11 ++ .../webapp/WEB-INF/mvc-dispatcher-servlet.xml | 22 +++ .../bin/src/main/webapp/WEB-INF/web.xml | 50 +++++ jenkins-exec/bin/src/main/webapp/index.html | 1 + .../guange/app/jenkins/SpringTestBase.class | Bin 0 -> 1007 bytes .../app/jenkins/api/JenkinsApiTest.class | Bin 0 -> 4001 bytes .../app/jenkins/api/TrustieApiTest.class | Bin 0 -> 1969 bytes .../app/jenkins/utils/StringUtilTest.class | Bin 0 -> 1398 bytes .../cn/wangwei/app/jenkins/CaclTime.class | Bin 0 -> 2449 bytes .../java/cn/wangwei/app/jenkins/Convert.class | Bin 0 -> 3088 bytes .../app/jenkins/DistributeConvert.class | Bin 0 -> 2532 bytes .../cn/wangwei/app/jenkins/JenkinsTest.class | Bin 0 -> 4919 bytes .../app/jenkins/PipeLineControllerTest.class | Bin 0 -> 1420 bytes .../cn/wangwei/app/jenkins/ReadFileUtil.class | Bin 0 -> 1861 bytes .../src/test/resources/applicationContext.xml | 17 ++ .../bin/src/test/resources/config.properties | 18 ++ .../bin/src/test/resources/job.template.xml | 21 +++ .../bin/src/test/resources/log4j.properties | 11 ++ jenkins-exec/bin/src/test/resources/pipeline | 3 + .../bin/src/test/resources/pipeline_copy | 26 +++ jenkins-exec/bin/sync_exclude.list | 1 + jenkins-exec/bin/upload.sh | 1 + .../com/educoder/jenkins/api/JenkinsApi.java | 11 ++ .../jenkins/controller/JenkinsController.java | 44 ++++- 42 files changed, 614 insertions(+), 2 deletions(-) create mode 100644 jenkins-exec/bin/dependency-reduced-pom.xml create mode 100644 jenkins-exec/bin/pom.xml create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/api/JenkinsApi.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/api/TrustieApi.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/controller/BaseController.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/controller/JenkinsController.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/controller/PipeLineController.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/model/Case.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/settings/AppConfig.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/Base64Helper.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/ExecuteShellCommand.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/HttpHelper.class create mode 100644 jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/StringUtil.class create mode 100644 jenkins-exec/bin/src/main/resources/applicationContext.xml create mode 100644 jenkins-exec/bin/src/main/resources/config.properties create mode 100644 jenkins-exec/bin/src/main/resources/in_out.template.pipeline create mode 100644 jenkins-exec/bin/src/main/resources/java.template.pipeline create mode 100644 jenkins-exec/bin/src/main/resources/job.template.xml create mode 100644 jenkins-exec/bin/src/main/resources/log4j.properties create mode 100644 jenkins-exec/bin/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml create mode 100644 jenkins-exec/bin/src/main/webapp/WEB-INF/web.xml create mode 100644 jenkins-exec/bin/src/main/webapp/index.html create mode 100644 jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/SpringTestBase.class create mode 100644 jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/api/JenkinsApiTest.class create mode 100644 jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/api/TrustieApiTest.class create mode 100644 jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/utils/StringUtilTest.class create mode 100644 jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/CaclTime.class create mode 100644 jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/Convert.class create mode 100644 jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/DistributeConvert.class create mode 100644 jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/JenkinsTest.class create mode 100644 jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/PipeLineControllerTest.class create mode 100644 jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/ReadFileUtil.class create mode 100644 jenkins-exec/bin/src/test/resources/applicationContext.xml create mode 100644 jenkins-exec/bin/src/test/resources/config.properties create mode 100644 jenkins-exec/bin/src/test/resources/job.template.xml create mode 100644 jenkins-exec/bin/src/test/resources/log4j.properties create mode 100644 jenkins-exec/bin/src/test/resources/pipeline create mode 100644 jenkins-exec/bin/src/test/resources/pipeline_copy create mode 100644 jenkins-exec/bin/sync_exclude.list create mode 100644 jenkins-exec/bin/upload.sh diff --git a/jenkins-exec/bin/dependency-reduced-pom.xml b/jenkins-exec/bin/dependency-reduced-pom.xml new file mode 100644 index 0000000..57d83bf --- /dev/null +++ b/jenkins-exec/bin/dependency-reduced-pom.xml @@ -0,0 +1,105 @@ + + + + jenkins + cn.guange.app + 1.0-SNAPSHOT + + 4.0.0 + jenkins-exec + war + jenkins-exec + + + + maven-shade-plugin + 3.0.0 + + + package + + shade + + + + + META-INF/spring.handlers + + + META-INF/spring.schemas + + + cn.guange.app.jenkins.App + + + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + +
0.0.0.0
+ 9001 + / + UTF-8 + jenkins-exec + tomcat7 +
+
+ + maven-compiler-plugin + 2.3.2 + + + compile + compile + + compile + + + + testCompile + test-compile + + testCompile + + + + + 1.7 + 1.7 + + +
+
+ + + javax + javaee-api + 7.0 + provided + + + javax.mail + com.sun.mail + + + + + junit + junit + 4.12 + test + + + hamcrest-core + org.hamcrest + + + + +
+ diff --git a/jenkins-exec/bin/pom.xml b/jenkins-exec/bin/pom.xml new file mode 100644 index 0000000..026a6dc --- /dev/null +++ b/jenkins-exec/bin/pom.xml @@ -0,0 +1,178 @@ + + 4.0.0 + + + cn.guange.app + jenkins + 1.0-SNAPSHOT + + + + jenkins-exec + war + jenkins-exec + + + + + cn.guange.app + jenkins-client + ${project.version} + + + + + commons-codec + commons-codec + + + + + io.springfox + springfox-swagger2 + + + io.springfox + springfox-swagger-ui + + + + org.springframework + spring-webmvc + + + + org.springframework + spring-context-support + + + + org.springframework + spring-test + + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-annotations + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.alibaba + fastjson + 1.2.20 + + + + org.slf4j + slf4j-log4j12 + + + + + log4j + log4j + 1.2.14 + + + javax + javaee-api + provided + + + + junit + junit + 4.12 + test + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + + package + + shade + + + + + META-INF/spring.handlers + + + META-INF/spring.schemas + + + + cn.guange.app.jenkins.App + + + + + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + +
0.0.0.0
+ 9001 + / + UTF-8 + jenkins-exec + tomcat7 +
+
+ + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + + compile + compile + + compile + + + + testCompile + test-compile + + testCompile + + + + + 1.7 + 1.7 + + + + +
+
+ + +
diff --git a/jenkins-exec/bin/src/main/java/com/educoder/jenkins/api/JenkinsApi.class b/jenkins-exec/bin/src/main/java/com/educoder/jenkins/api/JenkinsApi.class new file mode 100644 index 0000000000000000000000000000000000000000..5dc8a33b5f2db76c17da4c4712fcb7452ba50c84 GIT binary patch literal 8078 zcmeHM-E!MR6h7;?k?rP>K=~^_Y6>Nx#ilg;)gdKKlhzrBK%4});9@PW?M-A!NUM-M z1P{QIFatAi&x>%&6EK{WY)2li>-CJuw3A%e(n_DcbM~CGXV32b_3v+g0KhVA8IU4y zH}I`Oi*l!MNRMg3a$5yf3oW1LwwY=78;G65ap(A*Um7HT9 z@T$$$9LE(@aMuYUY$)8HxX)^md4)S%tP+@5Tsk0-UPsLhcmb6-({RK0T|Waal9^xj z9iIiReavbmcGcr{#AAeKVKcYcf-udd!prdD+E$+(px(QV+Ar%nnK3ED4hb zCUkH{oh4r3Ui0iAI-J|Yv29drx8Rmk>q1+uO%wg#KzQNgJ$w;cBDK-?`)*>7T zl$noPOhIA_*Q8N`$z>~+i+QGB^CYI!@@#H#VFsbce2j4?5PoP0*Ei#|w74WQQ0UZH zojWq?;2XTBp)E&57o9h^!$8P4h%%`o$6QRD0OhhhnR|$8aVpmWZBnW6sREnJu65G6 z;%(9r-6>)S?rS#?II+ZL8iF0AyQ5(DcS}Pg>-J{cxQ!Ewd2%WpqMw#?2ToZ@zl{&H zO}!ynk55)EkZ5OrNI)(c2IehjMZn;U?s;31v;EjRe_V#KdSCl+QEj! z`sz5wOKE2xC&WNOmCLR-sUHlOe&Z08-zqw)4f%&p)QTu@UT(;W})1t|7oqVr6^3opH(`mV!mZEy9sA2}* zBIIX{)pO5h<1^1lb?L<@zHkS{!Wls@9O(qUP{d4s6qRu>6_@&-6UcR|oxp&bxXY3l z3Mi?<8x9qrk1=OyOIqm{)c<5vrB4RlBjiLQ+_Z+__&^sU7oopHuhxmIJKFw^lGLs? zTsJ%pGH{2G%DG0vMR9blMUP|x`L1OXxUF*Cz>M+D0JN@K`%^&%?vm7{pL5yEdOupL zjj%L$dZmHq4%Lv`wP>dNK^3=s^;Um$>O5J(T=g*_|D0>C8sGG$#gr%vo^JK*#aV*j zjM-qKlSgkUB1}IzV1-$6L*HVXc>aa!i?c0?=!6FiSZ?o` z<08Z;M?2$qcjcJcAs*;`iGc1-r~wZNO!o*k;1Qk$#(S0qY~pbs&RYgN={c#4`$S-B zn+E|Nwe8_4UjR1%(Rd;{0V%iwlX&+!7?8m$Ko)ZN_A1^@;&lqI241IO2LETVwTxd8 zyykv~x$o!ae}$L+#8wJk!GHM$;O|xZpNdiN8gk2L*O4LB<$VL6^|QUHV7sYgdmBvD z;|8*%k$VB&!MhZ^+vQASJJ#@)f^%8Pxd=-N&i56Zw-ua41t-7CuvW3I14m$zeI zwYheWxjYflxGWNGQ^&>%-iSmQiUj6TbiicCecd|dz9mo!RHwr=fr{s)vrPh37DZc1 z9*GWtX|FL@;K|~CEUgInuIvdTS^;lJsVuWXNt0q@tKJFC+lVba7gE?41g6&34+#{v zkX;#S1Zrn2UTUp$1+I|dhc{AlqktwRI{Cjb)o335ou7geN#>ageyn5M8Hx7?H^dq9~JzLuP_U zKu$Fa#W9>R&^Ak0oaSJiYGV+NIj5uA4MThk?!amx^W1Gz*u{bNSTu&v4l~^eP}W8} zJV*_f6SWg+@4zfvoq=h%MqpvhJ4<4j!kbBwt9fYFS8>?ly2&ta5t#Rs&w@jyMY8U1 z7HwBxzI@{Sb{faLx`5dy6n38*^sT1qr+5NSb2y!6d46a8umX1op%WzFi!<#+k|wb1 zU$j2~=Rn2U=i4GNZ0)SJrlkYRrq|CUn`KzR<M4q2So;xsbL^gr~amOguY|o8GIL`rP*xrm2=S!nr?t@ zJJU88lnmNPD~k-~@`y}L5YM8uQY!{yJw&>so#9ofq+4S!R9)UA`sHaKM%hnWhD!YoyBwRu*2I}|R}X(Yut(WJM29fvJ6yMpSC!E{smBG?l~ zChMNE=nkc2u-5#YZbYr2V$&|OuG-s3d{3(R=8`t0MqbxzIEl0K+p%&o#7)(eR+4w? zN$sWWg2*PD`DAF6;2vYouFzicc7r@v>hK^21HAD6kwgs2J32N#zLZIJ%;Z0qv}t;< zL}_!rxIB132049peGeWn7|k|%e@JCZ(oA)Bsbg4J1o}Ma6C8pfT!Uen6~Tj2Do3D9 zvOtJYsL(h@s}({rlI2e@zCS(r0j9sCm^m7U(;WuaX`bK-1vlU(Nd~vzHZjfjP literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/main/java/com/educoder/jenkins/controller/JenkinsController.class b/jenkins-exec/bin/src/main/java/com/educoder/jenkins/controller/JenkinsController.class new file mode 100644 index 0000000000000000000000000000000000000000..eda9d241f0f95c8d539b3e66da1334dd42e83eda GIT binary patch literal 7026 zcmeHMTXWk)6h4ZbI96^Y&~oVmqGcfAViy_;G^I=^?U0PqFiGePk861wZ>n2YtI+;2 zn1LC1=SMMoE7_5Z6>EW%4ox0xt#&`1+wOjQj`aHf&w4C4Xzz3nxvMOi@xp@x zE-jkvbkf$kMfO18MkFkn?+j$&4r7;hlRycdZw5yq7F~~T1VN~n5@8TqG}qZkRQQ9C zya(*eEfENH+oIaa>H~}FcVKOUmMmJz?YJvtC}-&e^)%vkbC<^|-`thp#|iM;EQ&->HgQGCn||a8S12b=A}+DCgILML zRiSh;&RAJ>MC>F%k3SRvHqb+ipv@9bZ-irX%h^t1rAL5rSfF=YCb$5yn;Gd;IFNzv zF>S@u60F@krk#?}qIWr$RRA#sJMcfFpz*z3l)24&g6(5kP84~>q+lR1*ck~-U4$^5 zjLv3wYj5X%7Vs0r4wu5;nB85Tfw}63pxH6b%KXahHMRndeaj>(X`U1t< zM(1DFm?-(0uH;Pdt*~p+*Ckes+d1B|+R5h+A{RSF-b2Uq5%UuGV)vDbw$n@oGAhDqlr;?J zzCzXuqBh^375*9ntJBDdqR#WsiitSQlLrLaO@!A=NxuINNq(I6$9qN&f?2v|)vrB2 z#vDB-D#AT+v7Tqi714V^Sn@fY3C3&B82CTVl946ug^6_eJ)zUzOM_HBe|4I^?MF_j zvo|DeIv*^)SzT|?4amqt)u7MxefD_;&ot;Ja>Xn{4Z1b*jU~$*@CjvG#4+Aw>34)N zy+!ySf-gH$^af4S3|d4DnniCDtr=WxTx+<_(LDYaaJQD;6WPDe;`hrJexl{y&^tvJ z2Tu@im(bRDpy*Y44Ofd^hmKk*cM;di=z9~ttN6X6+ck)I7mfGuD{Bo^*D;={e!oQZ z)l$_TQfr{vhHR~RsP_7Fsj@Ny^1h)dI$oJ6?GjTqOH8TJN2z-sr*Y86T*v(yeqU%= NRHskqQ~I3N{{$0#49EZg literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/main/java/com/educoder/jenkins/controller/PipeLineController.class b/jenkins-exec/bin/src/main/java/com/educoder/jenkins/controller/PipeLineController.class new file mode 100644 index 0000000000000000000000000000000000000000..791da08f8fd505d1104dadb559ea9dac9b3f7c7a GIT binary patch literal 6420 zcmeHLTW=dh6h7m)vAs!}kWvaQNZS%Y0>$Q1ZcPYH(pDHbbyT}WNW6^KBYTqd?lLN17~#NZ z*7aL0p%~>Wm40s>W15EtP<#7t7}ggWp}Xf9KFJ5aVYeG zQohR56*l+t6HkfIcYC5~1F1l|eXe$(e2D3UcWtXsZwtFA9G63Y9dPG>w}gEQ)WsuQ zi-))thq&Ido4yEbsA+e&cG|WE7x63*j*fBx%0;tRMWY<1Pv$w$MRo#TX``;~a07(h z5cbh3rX`Vn5|h)Q@Kq~G%(*1#?|L%8(~x;%*uk!1w!qfD&29ZW5LV%_2=&klBohDF z1^q4$0@!Z?@xTS7B6`Rj?W^Z8v{qr@D`I{{S8?nM66l5wCV>#ZRRf_0eqq$$qOx~I zQ}Q~%9LuuDmE`a&2JI;TOtn1E!{AN$|~%%xe7%b_9-DPS06lcL|}qx zjDYCLxv+%E=0EX(M}eG3m~z`r?~tE`ZJmfn6uQ&)UT2+Os?eDlz0`!Mqhng%@r~9& zO{ktLH1do9iTn5<*$)>MEz#9^TAOO=!P0;XgGuG@@OUaXD!fn8{!P83O&k=Xxbrh2>s zVR?ld#FR}&p{OCO=V^`2+)hy&MVFBfJuZ@?7i+bsUz=!|FFhojUT`@t$q`KGq-V&} zZN~n-Fri6@KGiXsXc=eLgcvR0f~F&N-QT|dooFz+9}^r#W5ejkT4jg;9P@`P^XvcQ zR1Nh`2o2HLlR%p4$eeY4=QgQBf>ZOm$`KEx$=0rorda)pP~<}>F8NbUCUEpRuO<|QZ)m`zp&Om^Je_96ESfue_#TRwsM_Gog?C?Pw~ z2}}tY#dcK~o5ZQ{j}gXke|IoYjF{FO<0~C*?1wCCzS&Bn6*e%P63h^o8GUP0sZf<+ zjzI8MDz3xenEMp}O(X(lL?~&b!gj!W`WdZO`k7IWNf{d2=JYhegp^Tp67lgCRiOsg zrePiy@ZY@ zeeMNJ;SNR2J7OJ98@N@@u<)Eg;WQ8<6V zjkmLttC0zkwt7(@JYlGgBd)N#r8X+|OsHu8BsN=AXc|kOf52Mv9l8^1W5r6sf)gs_ zad^ZjLp8hS3DwHKrBCe4O;FGOIwu0}QyS65*7SEHwxLz`!dQ9ym9V|6V%v6d_)4&T z?vm)MOkjFPXpJ|*KDJj4t3V)+7ts{t@K;1H2c>~64{T*%tBIY)h$~>9SCb1Yj~+nv zE7acAXFo&zd%{@6XEB+n!FBZQdRzrJ;3irEOBo3DRKl$cgvC_C?F@vaRKlGMgymGi zGAy7PLnU)oqf3=+q!Ly#5Y|!&Gy`Ehm9UzD;G_~783<2O3G;CGjFO|8yq8jwlYeRXC43m literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/main/java/com/educoder/jenkins/settings/AppConfig.class b/jenkins-exec/bin/src/main/java/com/educoder/jenkins/settings/AppConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..10164a2881b95975fd39f74165a25bcd3d9f1a20 GIT binary patch literal 2838 zcmeHJTTc@~6h2c5rE9t46_o+Jw32im)R2fVAw&~QK_VC9<8(Wef!&$S%q)>#W}=C{ z`=g9!cU!uo8==PdV0h?Uzy121GiT@9A3wi*1Au3+T!I3D=SF*Oz=U*<*a>qz6}Y?= zd8);=d&K3jkj6FKS|QuUT?@l?B@aZq1VsXq$rC=4ZTDUCh5l2G`}3MFZ%RnzBzc|o1>?jffw?)gk3C}iF-Yje7Y=z2Hq zdPict8}}k@DQ>7#mIlmvhtwhm{}f`#Sq{u(JpkX(hs1(d-K?EnA( literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/Base64Helper.class b/jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/Base64Helper.class new file mode 100644 index 0000000000000000000000000000000000000000..bfd14471de4424a8f9b44a85844cddbaa18edeea GIT binary patch literal 2249 zcmeHI%We}f6unME^B|BmP#&d#$pW=3W;O*Ridaw;ft13c4~eDYaTB*Q_Q>``<&XFS zB#>awM%9fmAlkoQ!Swl3DR&^|gpoVQNq%Fqgj(Gc^d`_4fsL1ZJO0CEW`GGs`Qx z1gh)EQ-cP9_6c^w7;Wlsnaq6LQASuDk3>ZA!>Np!lUmW#=zc5``;0al+e1Mk!DD6+ zlrnz627-1G9gJlLM>2z4W|u}@ zRGR_iOnLIYpkwW)AUU7ZrC{n8xHm}}OD-L?8G4P@DCm_tar zamYoQ-|AW8Ci#o(nrhpYV=7`MS|2iFg|kyY1=ENb$uM(Ds=YYg5`JEkRV6u{Tp%@U32f7O(&M!YlZ;CN?sSR!QcpYZlV z$_!I=OJ|0QSJKzd{N%*V2UQK|sj*w+Ac5AVv=*D~HnwUD4*=&cj(EV8VA0OvTFXbi z-vcziK>dBE`3YLza94pgt{wyUo5QtLpkN+4xNE>QxQ?g=e6HfjjhyRI&OPS3HHB*- g=c?oki@#;KGlijh%us>5$WwuP7@OBxK^6CZ0yQ?pwg3PC literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/ExecuteShellCommand.class b/jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/ExecuteShellCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..bd20ff82e6bbaf4bee0cb4434219a78c575cd0e6 GIT binary patch literal 2530 zcmeHJO>fjN5FKxq&2Cs|DHKZisObT<95xqDwCaJXl`3rkwWShAujAcyo7j=G z)QToX_aYJ77u0X<4+RYckC;JF!uSyz2)cym&d7t#nFpQRgC!bjVX4xN#?0{{bx0si z5|lhnfC1@b0qJDAI+xHD3S^vUd2^UFTMlL@WRkqOwAEw*j z!3=@9<^7h5t*yZMsd zCBNQ1c!-@zk?$Tn{;8QM&L4sHjPf9CHiDMm~d80PS{xg4=Kh-&!ySch4A}A^$nUy%L6*oS~NU-p|Jc NSj1-owLE}FKLFlhJy`$% literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/HttpHelper.class b/jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/HttpHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..eebbebe597c7f38f66e48a1ea5970d2431155b1a GIT binary patch literal 4659 zcmeHLTW=IM6h7XB%~J~}hrU56Qausx9c zq`veOsYvk7k3t;Jy4tSNO{?{$DfZsAAiTk_Qy~Ez6XGNFdIOFz+I!`cE*Hk zZ?o5|9jmO(lOk3L*X?aCUkYj3g%zo3KeIM}#?zeZ0LBTNFYzgpz4pr1HjgcVu~hX4 zG&>#D>v6q6VB(>W!al;5x%uY=#uw3S0A~qI9d>@AwbD)afwaO+sku?Ai*twTiM*uSbBw*1FX~)~)bhe=m?1lg+ix5UyT`MI|Mw+ePTtfj7wf zanW@lm#lGyyUIy|mtTz&83xa|u=;E&ER4tjWm3wqo--4d9s{$IUJ~;HdFk*Z0)CWWA4#wyfsdzduf3si_XyA$nGdG^?oMlQMO?E#`0u^f(vjFYc040KkZq#U0U3? v@N7uAM|U$uZV2Gb-0E9P3(CCXZG7?&!7~_ literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/StringUtil.class b/jenkins-exec/bin/src/main/java/com/educoder/jenkins/utils/StringUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..990021029569cee33ad184d48cf9d47985835f75 GIT binary patch literal 1462 zcmd5+&u`N(6n+k6Z9-W`q5S?~c0e76FQa29kCOEo|*SbsW$aV_+Ws^XH zJAV}7Iayf|1tByc4sqi6d!N7e{P}(P`r#7*JcK(<2nal|h9^0bDw(nwOSsMxk(OMi z!X#6n4yCe5>11Y;U1y{k@8Ne78U)rVe8$u`c{Q2}?g*?rkxII!1kUs~_6aneBTExP z0-Y1=mNDA2;2a5hd&&r_vzbUKZd=HVIjI#bj2>kow~uKQ4kv=9f@jPis9^k%jRjpt zbUYUsAB&7Dk?SX1OZD^T7d0p=Y0oMW#m{taENK<0%uj%qWeoGDK} z5_GOT3SZ_$Cb@LfmW42wi?Ys?+-XDW%Jes=w6s*IIFJf;9N-Fmvodpw=$LMo*7+4g zQKr1`ns|XS3hQ%NqJ%n48FlXqar&Sw%UL1(;oBuUpW=QIwBURj&cZ5zUVm_6oI34I zZ>-J$3$#<_BVmRNy+WWn(41xa%t${!{@HL7X$d?U{Ds9g3524``E{NVxVKEn&*EBe znZVH>`1*f5L#!hDY$lA`5pR8khx!@b)N2H?f0+@1Xjhkpix<+LY^N@jcV2Z{n{exg z-cv6VXm3kvu|Eyb{ub^6HX-bCfFnUOt>D + + + + + + + + + + + \ No newline at end of file diff --git a/jenkins-exec/bin/src/main/resources/config.properties b/jenkins-exec/bin/src/main/resources/config.properties new file mode 100644 index 0000000..6d57498 --- /dev/null +++ b/jenkins-exec/bin/src/main/resources/config.properties @@ -0,0 +1,16 @@ +# trustieUrl=http://www.trustie.net/callback +# trustieUrl=http://ucloudtest.trustie.net/shixuns/training_task_status + +trustieUrl=http://192.168.0.238:8888/myshixuns/training_task_status + +#jenkinsUrl +#jenkinsUrl=http://localhost:8080/ +#jenkisUserName=admin +#jenkisPassWord=wang199637 +jenkinsUrl=http://123.59.135.74:9999/jenkins +jenkisUserName=guange +jenkisPassWord=123456 +#jenkinsUrl=http://192.168.0.238:9999 +#jenkisUserName=guange +#jenkisPassWord=123456 + diff --git a/jenkins-exec/bin/src/main/resources/in_out.template.pipeline b/jenkins-exec/bin/src/main/resources/in_out.template.pipeline new file mode 100644 index 0000000..16c9562 --- /dev/null +++ b/jenkins-exec/bin/src/main/resources/in_out.template.pipeline @@ -0,0 +1,22 @@ +if (nowStep == STEP) { + // 读取输入和预期输出 + def in = readFile '/home/pdl/.jenkins/workspace/testCases/SHIXUNID_STEP_In' + def expectedOut = readFile '/home/pdl/.jenkins/workspace/testCases/SHIXUNID_STEP_Out' + + // 编译程序 + sh script: 'echo "$(javac FILEPATH 2>&1)" > compile_result.txt' + compileResult = readFile ('compile_result.txt') + + // 如果编译错误 + if (compileResult.trim() == '') { + postResultToBDWeb(compileResult: compileResult, out: '', in:in, expectedOut:expectedOut) + return ; + } + + // 从in.txt读入,程序运行输出重定向到out.txt + sh script: 'echo "$(java SOURCECLASSNAME < /home/pdl/.jenkins/workspace/testCases/SHIXUNID_STEP_In 2>&1)" > out.txt' + def out = readFile "out.txt" + + // 由中间层判断结果之后发送给BDWeb + postResultToBDWeb(compileResult: compileResult, out: out, in:in, expectedOut:expectedOut) +} \ No newline at end of file diff --git a/jenkins-exec/bin/src/main/resources/java.template.pipeline b/jenkins-exec/bin/src/main/resources/java.template.pipeline new file mode 100644 index 0000000..d9d649f --- /dev/null +++ b/jenkins-exec/bin/src/main/resources/java.template.pipeline @@ -0,0 +1,20 @@ +node() { + git url: gitUrl + + withDockerContainer(language) { + def nowStep = Integer.parseInt(step) + + } +} + +// 传送运行结果到BDWeb +def postResultToBDWeb(def arg){ + def s = 'compileResult=' + arg.compileResult + '&out=' + arg.out + + '&in=' + arg.in + '&expectedOut=' + arg.expectedOut + def response = httpRequest acceptType: 'APPLICATION_JSON_UTF8', consoleLogResponseBody: true, contentType: 'APPLICATION_FORM', + httpMode: 'POST', requestBody: s, url: "http://123.59.135.74:9999/jenkins-exec/pipeline/call?taskId=${taskId}" + + if (response.status==299){ + error response.content + } +} \ No newline at end of file diff --git a/jenkins-exec/bin/src/main/resources/job.template.xml b/jenkins-exec/bin/src/main/resources/job.template.xml new file mode 100644 index 0000000..8edce92 --- /dev/null +++ b/jenkins-exec/bin/src/main/resources/job.template.xml @@ -0,0 +1,21 @@ + + + + + false + + + + PARAMS_CONTENT + + + + + + + + + false + + + \ No newline at end of file diff --git a/jenkins-exec/bin/src/main/resources/log4j.properties b/jenkins-exec/bin/src/main/resources/log4j.properties new file mode 100644 index 0000000..063df71 --- /dev/null +++ b/jenkins-exec/bin/src/main/resources/log4j.properties @@ -0,0 +1,11 @@ +### 设置### +log4j.rootLogger = debug,stdout + +### 输出信息到控制抬 ### +log4j.appender.stdout = org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target = System.out +log4j.appender.stdout.layout = org.apache.log4j.PatternLayout +#log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n +log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n + +log4j.logger.org.springframework=INFO \ No newline at end of file diff --git a/jenkins-exec/bin/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml b/jenkins-exec/bin/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml new file mode 100644 index 0000000..b2e7211 --- /dev/null +++ b/jenkins-exec/bin/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jenkins-exec/bin/src/main/webapp/WEB-INF/web.xml b/jenkins-exec/bin/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..2d34e12 --- /dev/null +++ b/jenkins-exec/bin/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,50 @@ + + + + SpringMVCDemo Web Application + + + + contextConfigLocation + classpath:applicationContext.xml + + + + + org.springframework.web.context.ContextLoaderListener + + + + + mvc-dispatcher + org.springframework.web.servlet.DispatcherServlet + 1 + + + + mvc-dispatcher + / + + + + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + encodingFilter + /* + + + \ No newline at end of file diff --git a/jenkins-exec/bin/src/main/webapp/index.html b/jenkins-exec/bin/src/main/webapp/index.html new file mode 100644 index 0000000..08e6734 --- /dev/null +++ b/jenkins-exec/bin/src/main/webapp/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/SpringTestBase.class b/jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/SpringTestBase.class new file mode 100644 index 0000000000000000000000000000000000000000..38afed32eb04aef28c83523ab6e9fecd60b9d61c GIT binary patch literal 1007 zcmb_bU279T6upzCO|nK)Q!An`W1rHOU64Fk5o%DVtO_Qr_&AwNHj~cIEHksA{<4CC zzWbxZJG+ra42a;%ov(Ax{W|mg$LFsAFocIKXb^bfEKj^}K3TFAOSn$5lIct&tSFMD z(3euXWL#LOvk9VJFeh5jB(Pt>6+)AD)1}~^z}_>drGHLfXK;K$pgA%##C8buZm=({ zHMR}6NQ0bfE1Xd)F{9k%g;dN-qiJEyREgX@rBP?H5OgNEVirLKUeN(TOe-^E@Dg}@_hxtF;((<|vD20jgvsCtTVJL!6mNVdCTszjdq>9zqN zprf#WAa&P#4ER~_GXk#Y343T;)#u#79YFL2+8_JTHFUq>sR2E-0Tb~1XuCBE?n1wM PKd9_IIK(yJ9sv9V5`j03 literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/api/JenkinsApiTest.class b/jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/api/JenkinsApiTest.class new file mode 100644 index 0000000000000000000000000000000000000000..68d2af64999d4d8c06271253708db4549597eb21 GIT binary patch literal 4001 zcmdT{-EI>{6h7mm@lVnu4W)&qgdw32D0rKaBGg1kE&`FrX{9(pa5-Kd>fId#uGfr%$?S@@bD{U`!cYeP4&Y5p!&YAu7_cuQSz$)C$Lyo~+ zYr?>xb-|w47eT0kW=E(d1|p7wJyb8GvQ(DA=25v4%N;`JVVuEicSuC=;D`DihK@mz zhCR^gxok3+tX6uJH3swB9pz*jH`KngvL0bYDeZ)lTG=kPTTO(CTO(8$8tQSVmooJT{tK zXxndjskqZZ-oP*tWSqw$d?A|17eiG(Qld;#Djz#UWx2>38Z9U1d0V)!#T|{umod%% z~$@Bx5}rp9od)dSR2Pf#Y5qB;dSIa$A?Aeb}Gq8Alfw342=fTRZt(2KLgfcBURJy^6!Mj1TOA07u+4jSSnU}+cpi?I|^yIjC_MLkwWO_kpih$i+=MZ zsM|lm3B4y}$YAB+%MfFK+*7D(&dZ+y+D6fMBqQ8CZMC;VoI>$f*j74flsacs;NP&B zN%hQ*)ef!0=T}x6@y;ps|&RAO#k`LNIxxG(prCuq)VcOD?q<1^wX82=L49aTAoV&Tc9sM5lVk)^L>*r zMeh%(f0afv`j+0p^s~9ypJ476s^#E3y*(1>`GnpcPbl~lE_B;2QcJFH>oaQmJKKB$ z+d?ASC1M+c1!5T|JC{>^4=icq;^EEA+BJBLTg#CJvpjEywcWLz~w z$kQ}D7V1PQi?s}^CbLe8wNzGtE>J$8sg6hjc(_|T7O@McTW9gX9QqPZUN0G!%8`iCwrDY~9%T!$)NrmJ( z!XK=8miScZqbqD173lu}#klg>*d;y(Di!-xG{llYX$}J-y@xQxhkM64P9g`9KwUf1K!c;lhK|s@yj(Kv(jr9B8Vcs<* z+R*Fh-x?x%)-39}CEcE|h+I|o9E_gWcaJU5gMf&(RBz4Tt58DyBZvC|=8eAFvXIBc}dlMKkY2=#QKtNq3sXTJdh C&0pdG literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/utils/StringUtilTest.class b/jenkins-exec/bin/src/test/java/cn/guange/app/jenkins/utils/StringUtilTest.class new file mode 100644 index 0000000000000000000000000000000000000000..121d0304026541dc45dd80f1290243e7c797e98e GIT binary patch literal 1398 zcmdT^O>Yx15FICJlPsYrDdnqxOi$@$_rd`+2&qCvs+534(+ZA`<0ejb?Un6~$}d9# z3GRsBgc$F(O;7?s+&HXv?0J5A^WpjSYIK5jAMsVF5ZKHw#dsllGnfeO2&_MsO1c*W%I&>V0+p9~ zD5_8=(41ipjnSqCH%O^>qKvRQo{AymI!R^BoYab@Mh{|<*nJw*`(r_eg2&7tC}sSd zjRf80DlC+Ss5HD(8s0^9BGtl^4l9p8}6F2?#gO9sO98TJ@~R#$Tt zpE4u;{_?Qm#?lhl@BZui=n$w2%ULSkB{6~EIzzS!chGmeC$RH2Q%)x0NKK`csNul( zR{juB!g|-|zf*$;1it^xbNOGYg-JQqnc?D<^kvwZ)z$}`ze)m)p0pOnP9NLM!V|!` zg3}A2gw`6Y<66z9Ss5*W;4{?Tw}Ow*_?lyyxOxoWw~1?`K*23&+3L_CPE0m;>R-J%{<|(aK+I>#D+z*&WP{jOw zw#(^?FPkUsHPOB1iF+%wtGJ<3SsF6y_o>Cr{3t@#MmJ-mO&4j?`PBRkRccv;k{!#wrzt z#W{{;v8FJfKT^b4*n?`E*Ax)pFw5L^=h{~CygJM82^td+8h!b2W zjB)NJm~>~(5OT$t3-pF*!*gc@RUYsc%<@g8v2ZeSGnT-~;I4MgVax%^8A}z)FjIpm zm?f~#XgOjpX;5j_)?8Dnw@_@a;;_SYn_-_JFyB%>3wD?mZhrEyX#2tt@LCf!#x-nu zArq3oV&g-${pv6lQ-Z4mPL*4R>jZw}Xo|TsFf?;c_Ww&k5SU6zjKGtOW6DU}*-s_7 zMPPPZ>19|ZNq+K z;BOAcT8e^8FpskeT!t%%TEO=rt}G^84-)PH*R>3;dcsvm7;eDL5r(B9gIi6#xt+nV WJY*;UMPvaZyNAy*+FpbuSosCO^#;!X literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/Convert.class b/jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/Convert.class new file mode 100644 index 0000000000000000000000000000000000000000..935884bae44b3cd0580918f06eb9555049a46448 GIT binary patch literal 3088 zcmeHJO>Yx15FMv!lWYSmg_dt{%Oyc5xp1Nt5>!R1lmeoq65`}+oW||0y|TUi_znCZ zB#_|1jUR;=@1|)`H*_Nf!GS}Z_4@6b@yz&nzW@021ppqygAx=7JTlsET5fD}pB=KM zFPle9?j3Q_WKq=I=kh>E(_B~bkZW6lB7yk?7$Bz^qV`Mq0H49-1fAtL*eR?QlO}8bJ~B z57-{3E52;>y=$O%jlOp)w4=D8Qdt@@>-VU|kNI(gt_^>T8*R9aHk?n55mc#V5k^W| zngE5OK9i2T&FQJ%{|GF$BFOY^GmHY^3rkHLag9-y#_HI&O4BrFwK^4s#8lP;_&@erj~*|u89y$nyNRg_VC5^=AxaqRObN%Z-64&z+v zLvDM@RYy{GH6d-CcC`wV)H*uauSm>Dmuus`cUcdGG0u|&GBB9m_Vc)lbiDJ1vyO|~ zxx^1UIu`ha2zV~mXIit9mcXe0-g>T>=OvpoZlccRBFhEJyUodxofyl*jBI+9*LZ9! z8sjW$eYnS29{!hc*yehNp+XZ_ zXeplsyG#o=@4qbCo-hO&t#NLYRlF@iCM1ES+WTzt-ryXY5?m*6CM0FJN#I+K+ay;$ z2WBpa^B>SB0;RsxVK{1=_1!YuB~xoTc9z%av9xL|@PA=TJDH)IZlW@it9B=9F*n(0 z!TI~bM!?%vvG%#EPXg6`zmPP4C0PEYjZH(0psloh*ue(Fz%pPzi=8syNKheXa4aRA zvzr5WpP~G2!TSi+uQ)5f9F7hH_?ySEnxfzeEa0pHSK%6>7V)`=D@zI2!-V^k>qZ9G jY{FGY7;eGs3mEQXFw74a3UCj33UD7*@P7uMmVo{Q!BOb= literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/DistributeConvert.class b/jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/DistributeConvert.class new file mode 100644 index 0000000000000000000000000000000000000000..aad24e46c7a0e92bbfb2d42f39456ac5c845da1f GIT binary patch literal 2532 zcmeHJOK%e~5FV##lPrOjLdzRWPbr7p3qpt@Bq&87r6AE#32}0ECym=(du4n3_!;~f zB#_|Fk3!7umL{mFSfU;{aEN2CKY#P`jOY80&tC!HKHO=3(Vj5bX;$Lb&7DT7wWdl>OhC#j5ulUniA=w6J8eZ;-i<^XwwVJr-R zQW5ToZRAU#@{jcNNl*Vs&m|sdv|MS&6XC)EcXSvJQc`X7Fq!Ppy=AlqIc@Oz7y(flcPR5n^P6fV7(pZMlahs)R$bpK2l!Z1BI;C+GS`+4sZw7(UYSsHT;&~J{$c8P+EFi)!% rT!PEQv_SJZ?JO2t_ejE!>*^RTui&cDsTy1_#v5>({%2^t2seKMyS+L4 literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/JenkinsTest.class b/jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/JenkinsTest.class new file mode 100644 index 0000000000000000000000000000000000000000..4128d0a4c83544bb6ccb94c792e416f2af9dfa45 GIT binary patch literal 4919 zcmeHLTW=gS6h7Xj-Q7t@N=mu4P&YuEaM>wUpJ;^?N>Nj7p~`LwJXPM=lU=7X_Q>N+ znt#K8-~kCFc;}HPehuPy_L2>n&3FZhij;>LuXjFwKIizeeeB==`uSG?xC6JVP+@Q@ zGf`+Uv*DiD7h$Br1EG2cC_|B^;U22zQf1+zVc8~J6&4s=%)v1s!*4o!7+D5&!r#|w zSN0ezHaEwWy9};u50sS&ZmE5l$xe)$N@**s)GEud1FH|D!7gEgQIDIcWU$m6^-DGS zcHy2>(tgh1-1^2-1`GFf7pt(sVCBe~2gYbqgI8JY&mCnj)A2rbd8Ct6#(9rCHJVIF zvd?%>Z}*XRF^UCs&QlRR7d_-_k!p-$&>){0Ba7B}S7XM>a-Ikq^|__S_#!3eryEl^ z8!ns;XH#Pa)v#xoq}o^>DIN(I5#B*QHu*S0Coc^|n_ihM9*{gZQkOC1FohJOlLM6F z23E%Z4%kYKR6Qs1FGPj~T-<6dxIIiUsBex{TZS9Ygfg5b-_evPA#7RaO$o@&fCOz{ zcS(Ap`$VP~ONHyh#v6RskoKI?ozr}qAYaKCcU-6q?xM+DNZj{CW|`|Q#|>Kt^~WMD z>EFvpFVI7g^-r@u?{RqWBEr-yb|ssx5{(UcfA z4|ZpJtAuT`Gn_K+k?wpeZU0NOLdIE1=U$3CZP4s-_mxh&?tB?L%uzg7>*zM-LNg!oo^@y}&k)~A*t}yn8N4n*uowFTjoV89R8(xv~o^_r= zqino~mIk;@$vagh&9W+7BLPh6HMq_yKX?dW(xPAqn%9Cz`aqieO zYl|br4(0q^64&5;20#9niuFmhy(j2w{WGXp6sD^WR1I!2cF)6yd3MKnu>bp=l-9JC z9+(K-nT9SkM$WqfV19h3{dG%4bW0&A<5u>eL?cYpKdi#XB&JCsTZINO9Sv?3ZZTLs zewd`ojK{+hQkxD^8C(at#-MAM3O(oH0@bSY%at`M0qPL^H0hO31PSBaql?-1Jpalcz& z4KLsd3%S-xx!x<_dREBw!3@uC6fpD(7|y{u`BZ@o_>f9~Pw5HB$B)RzPaymo?nf(Q literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/PipeLineControllerTest.class b/jenkins-exec/bin/src/test/java/cn/wangwei/app/jenkins/PipeLineControllerTest.class new file mode 100644 index 0000000000000000000000000000000000000000..3c2689cb7005666273ab393209d874cfa373dcf7 GIT binary patch literal 1420 zcmcgsO>Yx15FMwX`Dkd`(DKnjF*%h>_R!#Qox$$w zf%YoFBRy13wPQTg+IZoW(T>4d^KjtJNLlOo`c(HKOL*79d3o5`mVZqqJ!?VFTIi{E3DvZ+N>XDzmzqlvcFo(!f3$oN zVUlGKW4nI~X{A=_ZW!nj;cx*9_l67Z$0-&IKj*OoH$Utp2`wMGSOyw9kBhbV(}G1P z!Da~xP+_pW-#mBFw2^vnSUGt97qs}Jhr4&sXs>B=m|P&x{GmOj_%LH?c){qfcwrDL)QLqiyC;x6-!fp2ZArXQTLmY-SX;QZ#)=lE*I&SMOwIkcv#$Sd6 z65RJkA)b?>7Og;fLLA~a$;aP({rv2A_5Jf#0C)+Ht572F+!`J_VO=<8=PcwZykKg0 zA!NvsBpeHMCY24}3l{CkSe!T+SD`{+Eu&*Z!=wIKa7SSEwN%o*AyDpYof4?L)sd(| zoj_~G?i!;_4Q`O~(TOs`>iAqllm#i-~oslP-@DV z^5T6#fBODM*#0DmC6|ucG!X`ar>rw6ciPZ=DLPwJTAHdz45Y%z5AX~2SsJ@}I-m!s zb^Z%dlqnyrTzF2hQ9pJ@s^Nm^Q>Q7T?qedBf_73FN8b0fcwQGQ#_ptpfxr~;N%~je zrC^`(g;Wa#$*Ub|x2JJwb}zX|vV{M09QKb2k`1WA%_gkCEdm>z?rh8D*0%kYY;|#^ z57S9sm>$DjMxfo*oW-ZiNdG*2S#cw23B2eoeKc$nXc}CFcQO$%{)@oVMOLo6tHE7D zt_mCpg#x_DAg#so zriaIhg(ra31dA0w341HBifuJ3US;e7G`>LXL%Z<_n%^>}g{@}*uQhC&IR)#`#-}>m ihCBGiD?CHpnZm{bg=VHuLbe3=vi3ea!g~eBJ@^4n#Z&G8 literal 0 HcmV?d00001 diff --git a/jenkins-exec/bin/src/test/resources/applicationContext.xml b/jenkins-exec/bin/src/test/resources/applicationContext.xml new file mode 100644 index 0000000..4a9d585 --- /dev/null +++ b/jenkins-exec/bin/src/test/resources/applicationContext.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/jenkins-exec/bin/src/test/resources/config.properties b/jenkins-exec/bin/src/test/resources/config.properties new file mode 100644 index 0000000..81b7293 --- /dev/null +++ b/jenkins-exec/bin/src/test/resources/config.properties @@ -0,0 +1,18 @@ +# trustieUrl=http://www.trustie.net/callback +# trustieUrl=http://ucloudtest.trustie.net/shixuns/training_task_status + +trustieUrl=http://192.168.0.238:8888/myshixuns/training_task_status + +#jenkinsUrl +#jenkinsUrl=http://localhost:8080/ +#jenkisUserName=admin +#jenkisPassWord=wang199637 +#jenkinsUrl=http://106.75.33.219:30001 +#jenkisUserName=root +#jenkisPassWord=root +jenkinsUrl=http://123.59.135.74:9999/jenkins +jenkisUserName=guange +jenkisPassWord=123456 +#jenkinsUrl=http://106.75.78.183:8888 +#jenkisUserName=root +#jenkisPassWord=root \ No newline at end of file diff --git a/jenkins-exec/bin/src/test/resources/job.template.xml b/jenkins-exec/bin/src/test/resources/job.template.xml new file mode 100644 index 0000000..8edce92 --- /dev/null +++ b/jenkins-exec/bin/src/test/resources/job.template.xml @@ -0,0 +1,21 @@ + + + + + false + + + + PARAMS_CONTENT + + + + + + + + + false + + + \ No newline at end of file diff --git a/jenkins-exec/bin/src/test/resources/log4j.properties b/jenkins-exec/bin/src/test/resources/log4j.properties new file mode 100644 index 0000000..7a738f0 --- /dev/null +++ b/jenkins-exec/bin/src/test/resources/log4j.properties @@ -0,0 +1,11 @@ +### 设置### +log4j.rootLogger = stdout + +### 输出信息到控制抬 ### +log4j.appender.stdout = org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target = System.out +log4j.appender.stdout.layout = org.apache.log4j.PatternLayout +#log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n +log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n + +log4j.logger.org.springframework=INFO \ No newline at end of file diff --git a/jenkins-exec/bin/src/test/resources/pipeline b/jenkins-exec/bin/src/test/resources/pipeline new file mode 100644 index 0000000..719152f --- /dev/null +++ b/jenkins-exec/bin/src/test/resources/pipeline @@ -0,0 +1,3 @@ +node(){ + echo "helloworld" +} diff --git a/jenkins-exec/bin/src/test/resources/pipeline_copy b/jenkins-exec/bin/src/test/resources/pipeline_copy new file mode 100644 index 0000000..776e14b --- /dev/null +++ b/jenkins-exec/bin/src/test/resources/pipeline_copy @@ -0,0 +1,26 @@ +import com.fasterxml.jackson.databind.* +import java.io.* +import java.text.SimpleDateFormat; +import java.util.Date; + + node(){ + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); + println("jenkins start build time:" + df.format(new Date()) + " taskId:" + taskId); + Thread.sleep(10000); + executeCmd(commitType:'commitSuccess', + jsonTypeArg: '{"msg":"' + '1' + '", "outPut": "' + '1' + '"}') + + println("jenkins build finished time:" + df.format(new Date()) + " taskId:" + taskId); + } + + +def executeCmd(def arg){ + def s = 'commitType=' + arg.commitType + "&jsonTypeArg=" + arg.jsonTypeArg + println(s) + def response = httpRequest acceptType: 'APPLICATION_JSON_UTF8', consoleLogResponseBody: true, contentType: 'APPLICATION_FORM', + httpMode: 'POST', requestBody: s, url: "http://123.59.135.74:9999/jenkins-exec/pipeline/call?taskId=${taskId}" + + if (response.status==299){ + error response.content + } +} diff --git a/jenkins-exec/bin/sync_exclude.list b/jenkins-exec/bin/sync_exclude.list new file mode 100644 index 0000000..d74996f --- /dev/null +++ b/jenkins-exec/bin/sync_exclude.list @@ -0,0 +1 @@ +WEB-INF/classes/config.properties diff --git a/jenkins-exec/bin/upload.sh b/jenkins-exec/bin/upload.sh new file mode 100644 index 0000000..ecadafd --- /dev/null +++ b/jenkins-exec/bin/upload.sh @@ -0,0 +1 @@ +rsync --stats --exclude-from="`pwd`/sync_exclude.list" --rsh=ssh -P -r target/jenkins-exec-1.0-SNAPSHOT/ jenkins:/home/pdl/apache-tomcat-8.5.11/webapps/jenkins-exec/ diff --git a/jenkins-exec/src/main/java/com/educoder/jenkins/api/JenkinsApi.java b/jenkins-exec/src/main/java/com/educoder/jenkins/api/JenkinsApi.java index ec309c7..435f138 100644 --- a/jenkins-exec/src/main/java/com/educoder/jenkins/api/JenkinsApi.java +++ b/jenkins-exec/src/main/java/com/educoder/jenkins/api/JenkinsApi.java @@ -107,6 +107,17 @@ public class JenkinsApi { job.build(buildParams); } + public void buildJob(String jobName, String taskId, String step, String gitUrl) throws IOException { + JobWithDetails job = jenkins.getJob(jobName); + Map buildParams = new HashMap(); + buildParams.put("taskId", taskId); + buildParams.put("step", step); + buildParams.put("gitUrl", gitUrl); + + job.build(buildParams); + } + + /** * 获取job的xml配置文件 * @param jobName diff --git a/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java b/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java index a7e063b..0e583c9 100644 --- a/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java +++ b/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java @@ -32,9 +32,24 @@ public class JenkinsController { @Autowired JenkinsApi jenkinsApi; - @ApiOperation(value = "创建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @ApiOperation(value = "开始一个实训", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @ApiResponse(code = 200, message = "success", response = JSONObject.class) - @RequestMapping(path="/createJob",method = RequestMethod.POST) + @RequestMapping(path="/openGameTraining",method = RequestMethod.POST) + public JSONObject openTrainingInstance(String jobNameForInstance, String gamePipelineScript, String InstanceGitURL){ + JSONObject response = new JSONObject(); + return response; + } + + @ApiOperation(value = "保存输入输出到文件", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + public JSONObject saveTestCases (String shixunId, String cases){ + + JSONObject response = new JSONObject(); + return response; + } + +// @ApiOperation(value = "创建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) +// @ApiResponse(code = 200, message = "success", response = JSONObject.class) +// @RequestMapping(path="/createJob",method = RequestMethod.POST) public JSONObject createJob(@ApiParam(name = "jobName", required = true, value = "job的名字,不能重复") @RequestParam String jobName, @ApiParam(name = "pipeLine", required = true, value = "pipeLine脚本,用base64编码") @RequestParam String pipeLine, @ApiParam(name = "params", required = true, value = "job的参数,以json字符串的形式") @RequestParam String params){ @@ -70,6 +85,30 @@ public class JenkinsController { return response; } + @ApiOperation(value = "构建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @RequestMapping(path="/buildJob") + public JSONObject buildJob(@ApiParam(name = "jobName", required = true, value = "job的名字") @RequestParam String jobName, + @ApiParam(name = "gitUrl", required = true, value = "学员对应当前实训版本库地址") @RequestParam String gitUrl, + @ApiParam(name = "taskId", required = true, value = "本次评测ID") @RequestParam String taskId, + @ApiParam(name = "step", required = true, value = "当前处在第几关") @RequestParam String step + ){ + JSONObject response = new JSONObject(); + try { + logger.debug("调用[buildJob]: jobName=" + jobName + "taskId "+taskId+" step "+step+" gitUrl "+gitUrl); + gitUrl = Base64Helper.decode(gitUrl); + jenkinsApi.buildJob(jobName, taskId, step, gitUrl); + }catch (Exception e){ + logger.error("buildJob", e); + response.put("code", -1); + response.put("msg", e.getMessage()); + return response; + } + + response.put("code", 0); + response.put("msg", "run job success"); + return response; + } + /** @ApiOperation(value = "构建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @RequestMapping(path="/buildJob") public JSONObject buildJob(@ApiParam(name = "jobName", required = true, value = "job的名字") @RequestParam String jobName, @@ -93,4 +132,5 @@ public class JenkinsController { response.put("msg", "run job success"); return response; } + **/ } From 4c2d88d4539f0995ca952efece0372d1b137cea5 Mon Sep 17 00:00:00 2001 From: LiLi Date: Thu, 13 Apr 2017 20:32:22 +0800 Subject: [PATCH 2/3] lili --- .../src/main/java/test/FirstTest.java | 5 +- .../jenkins/controller/JenkinsController.java | 112 +++++++++++++++++- .../app/jenkins/api/JenkinsApiTest.java | 3 +- 3 files changed, 113 insertions(+), 7 deletions(-) diff --git a/jenkins-client/src/main/java/test/FirstTest.java b/jenkins-client/src/main/java/test/FirstTest.java index bb2b7dd..48c1c7e 100644 --- a/jenkins-client/src/main/java/test/FirstTest.java +++ b/jenkins-client/src/main/java/test/FirstTest.java @@ -32,8 +32,9 @@ import com.offbytwo.jenkins.model.JobWithDetails; public class FirstTest { public static void main(String[] args) { try { -// JenkinsServer jenkins = new JenkinsServer(new URI("http://106.75.33.219:30001"), "root", "root"); - JenkinsServer jenkins = new JenkinsServer(new URI("http://106.75.78.183:9999/jenkins"), "guange", "123456"); + JenkinsServer jenkins = new JenkinsServer(new URI("http://106.75.33.219:30001"), "root", "root"); +// JenkinsServer jenkins = new JenkinsServer(new URI("http://106.75.78.183:9999/jenkins"), "guange", "123456"); + System.out.println(jenkins.createJob("123", "")); Map jobs = jenkins.getJobs(); JobWithDetails job = jobs.get("3").details(); Map params = new HashMap(); diff --git a/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java b/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java index 0e583c9..2008d15 100644 --- a/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java +++ b/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java @@ -47,9 +47,113 @@ public class JenkinsController { return response; } -// @ApiOperation(value = "创建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) -// @ApiResponse(code = 200, message = "success", response = JSONObject.class) -// @RequestMapping(path="/createJob",method = RequestMethod.POST) + + @ApiOperation(value = "创建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @ApiResponse(code = 200, message = "success", response = JSONObject.class) + @RequestMapping(path="/createJob",method = RequestMethod.POST) + public JSONObject createJobForInstance(@ApiParam(name = "jobNameForInstance", required = true, value = "job的名字,不能重复") @RequestParam String jobNameForInstance, + @ApiParam(name = "gamePipelineScript", required = true, value = "pipeLine脚本,用base64编码") @RequestParam String gamePipelineScript, + @ApiParam(name = "jobParams", required = true, value = "job的参数,以json字符串的形式") @RequestParam String jobParams + ){ + + JSONObject response = new JSONObject(); + try { + Map jobParamsMap = JSONObject.parseObject(jobParams, Map.class); + for (Object key : jobParamsMap.keySet()) { + jobParamsMap.put(key, ""); + } + + logger.debug("调用[createJob]: jobName=" + jobNameForInstance + " pipeLine=" + gamePipelineScript + JSONObject.toJSONString(jobParams)); + + gamePipelineScript = Base64Helper.decode(gamePipelineScript); + + String result = jenkinsApi.createJob(jobNameForInstance, gamePipelineScript, jobParamsMap); + logger.debug(result); + }catch (Exception e){ + logger.error("createJob", e); + if (e.getMessage().startsWith("A job already exists")){ + // 这里后续考虑是不是也替换成status + response.put("code", -2); + response.put("msg", jobNameForInstance+" already exists"); + return response; + } + response.put("code", -1); + response.put("msg", e.getMessage()); + return response; + } + + response.put("code", 0); + response.put("msg", "create job success."); + return response; + } + + @ApiOperation(value = "构建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @RequestMapping(path="/buildJob") + public JSONObject buildJob(@ApiParam(name = "jobName", required = true, value = "job的名字") @RequestParam String jobName, + @ApiParam(name = "gitUrl", required = true, value = "学员对应当前实训版本库地址") @RequestParam String gitUrl, + @ApiParam(name = "taskId", required = true, value = "本次评测ID") @RequestParam String taskId, + @ApiParam(name = "step", required = true, value = "当前处在第几关") @RequestParam String step + ){ + JSONObject response = new JSONObject(); + try { + logger.debug("调用[buildJob]: jobName=" + jobName + "taskId "+taskId+" step "+step+" gitUrl "+gitUrl); + gitUrl = Base64Helper.decode(gitUrl); + jenkinsApi.buildJob(jobName, taskId, step, gitUrl); + }catch (Exception e){ + logger.error("buildJob", e); + response.put("code", -1); + response.put("msg", e.getMessage()); + return response; + } + + response.put("code", 0); + response.put("msg", "run job success"); + return response; + } + + @ApiOperation(value = "构建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @RequestMapping(path="/buildJob") + public JSONObject buildJob(@ApiParam(name = "jobName", required = true, value = "job的名字") @RequestParam String jobName, + @ApiParam(name = "gitUrl", required = true, value = "学员对应当前实训版本库地址") @RequestParam String gitUrl, + @ApiParam(name = "taskId", required = true, value = "本次评测ID") @RequestParam String taskId, + @ApiParam(name = "step", required = true, value = "当前处在第几关") @RequestParam String step, + @ApiParam(name = "stepParams", required = true, value = "本关构建的参数,以json字符串的形式") @RequestParam String stepParams){ + JSONObject response = new JSONObject(); + try { + logger.debug("调用[buildJob]: jobName=" + jobName + "taskId "+taskId+" step "+step+" gitUrl "+gitUrl+" stepParams "+ stepParams); + gitUrl = Base64Helper.decode(gitUrl); + jenkinsApi.buildJob(jobName, taskId, step, gitUrl, stepParams); + }catch (Exception e){ + logger.error("buildJob", e); + response.put("code", -1); + response.put("msg", e.getMessage()); + return response; + } + + response.put("code", 0); + response.put("msg", "run job success"); + return response; + } + + + + + + + + + + + + + + + + + /** + @ApiOperation(value = "创建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @ApiResponse(code = 200, message = "success", response = JSONObject.class) + @RequestMapping(path="/createJob",method = RequestMethod.POST) public JSONObject createJob(@ApiParam(name = "jobName", required = true, value = "job的名字,不能重复") @RequestParam String jobName, @ApiParam(name = "pipeLine", required = true, value = "pipeLine脚本,用base64编码") @RequestParam String pipeLine, @ApiParam(name = "params", required = true, value = "job的参数,以json字符串的形式") @RequestParam String params){ @@ -108,7 +212,7 @@ public class JenkinsController { response.put("msg", "run job success"); return response; } - /** + @ApiOperation(value = "构建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @RequestMapping(path="/buildJob") public JSONObject buildJob(@ApiParam(name = "jobName", required = true, value = "job的名字") @RequestParam String jobName, diff --git a/jenkins-exec/src/test/java/cn/guange/app/jenkins/api/JenkinsApiTest.java b/jenkins-exec/src/test/java/cn/guange/app/jenkins/api/JenkinsApiTest.java index 28715e2..457a50d 100644 --- a/jenkins-exec/src/test/java/cn/guange/app/jenkins/api/JenkinsApiTest.java +++ b/jenkins-exec/src/test/java/cn/guange/app/jenkins/api/JenkinsApiTest.java @@ -43,7 +43,8 @@ public class JenkinsApiTest extends SpringTestBase { params.put("taskId", "1"); params.put("testCode", ""); - jenkinsApi.createJob( "test", pipeLine, params); + String reString=jenkinsApi.createJob( "test", pipeLine, params); + System.out.println(reString); } @Test From a48c3fd73275d62a02885f1d61b5cf54cc8e3a51 Mon Sep 17 00:00:00 2001 From: LiLi Date: Thu, 13 Apr 2017 22:45:16 +0800 Subject: [PATCH 3/3] lili --- .../jenkins/controller/JenkinsController.java | 52 +--- .../controller/PipeLineController.java | 37 ++- .../test/java/cn/lili/test/JenkinsApi.java | 132 +++++++++ .../src/test/java/cn/lili/test/MyTest.java | 250 ++++++++++++++++++ .../test/java/cn/lili/test/StringUtil.java | 39 +++ .../test/java/cn/lili/test/TimeHandle.java | 39 +++ .../test/java/cn/lili/test/job.template.xml | 21 ++ 7 files changed, 523 insertions(+), 47 deletions(-) create mode 100644 jenkins-exec/src/test/java/cn/lili/test/JenkinsApi.java create mode 100644 jenkins-exec/src/test/java/cn/lili/test/MyTest.java create mode 100644 jenkins-exec/src/test/java/cn/lili/test/StringUtil.java create mode 100644 jenkins-exec/src/test/java/cn/lili/test/TimeHandle.java create mode 100644 jenkins-exec/src/test/java/cn/lili/test/job.template.xml diff --git a/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java b/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java index 2008d15..264a7f0 100644 --- a/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java +++ b/jenkins-exec/src/main/java/com/educoder/jenkins/controller/JenkinsController.java @@ -89,16 +89,16 @@ public class JenkinsController { @ApiOperation(value = "构建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @RequestMapping(path="/buildJob") - public JSONObject buildJob(@ApiParam(name = "jobName", required = true, value = "job的名字") @RequestParam String jobName, - @ApiParam(name = "gitUrl", required = true, value = "学员对应当前实训版本库地址") @RequestParam String gitUrl, - @ApiParam(name = "taskId", required = true, value = "本次评测ID") @RequestParam String taskId, - @ApiParam(name = "step", required = true, value = "当前处在第几关") @RequestParam String step + public JSONObject buildJob(@ApiParam(name = "jobNameForInstance", required = true, value = "job的名字") @RequestParam String jobNameForInstance, + @ApiParam(name = "instanceGitURL", required = true, value = "学员对应当前实训版本库地址") @RequestParam String instanceGitURL, + @ApiParam(name = "buildID", required = true, value = "本次评测ID") @RequestParam String buildID, + @ApiParam(name = "instanceStage", required = true, value = "当前处在第几关") @RequestParam String instanceStage ){ JSONObject response = new JSONObject(); try { - logger.debug("调用[buildJob]: jobName=" + jobName + "taskId "+taskId+" step "+step+" gitUrl "+gitUrl); - gitUrl = Base64Helper.decode(gitUrl); - jenkinsApi.buildJob(jobName, taskId, step, gitUrl); + logger.debug("调用[buildJob]: jobName=" + jobNameForInstance + "taskId "+buildID+" step "+instanceStage+" gitUrl "+instanceGitURL); + instanceGitURL = Base64Helper.decode(instanceGitURL); + jenkinsApi.buildJob(jobNameForInstance, buildID, instanceStage, instanceGitURL); }catch (Exception e){ logger.error("buildJob", e); response.put("code", -1); @@ -110,44 +110,8 @@ public class JenkinsController { response.put("msg", "run job success"); return response; } - - @ApiOperation(value = "构建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) - @RequestMapping(path="/buildJob") - public JSONObject buildJob(@ApiParam(name = "jobName", required = true, value = "job的名字") @RequestParam String jobName, - @ApiParam(name = "gitUrl", required = true, value = "学员对应当前实训版本库地址") @RequestParam String gitUrl, - @ApiParam(name = "taskId", required = true, value = "本次评测ID") @RequestParam String taskId, - @ApiParam(name = "step", required = true, value = "当前处在第几关") @RequestParam String step, - @ApiParam(name = "stepParams", required = true, value = "本关构建的参数,以json字符串的形式") @RequestParam String stepParams){ - JSONObject response = new JSONObject(); - try { - logger.debug("调用[buildJob]: jobName=" + jobName + "taskId "+taskId+" step "+step+" gitUrl "+gitUrl+" stepParams "+ stepParams); - gitUrl = Base64Helper.decode(gitUrl); - jenkinsApi.buildJob(jobName, taskId, step, gitUrl, stepParams); - }catch (Exception e){ - logger.error("buildJob", e); - response.put("code", -1); - response.put("msg", e.getMessage()); - return response; - } + - response.put("code", 0); - response.put("msg", "run job success"); - return response; - } - - - - - - - - - - - - - - /** diff --git a/jenkins-exec/src/main/java/com/educoder/jenkins/controller/PipeLineController.java b/jenkins-exec/src/main/java/com/educoder/jenkins/controller/PipeLineController.java index 53d0ccd..80faca0 100644 --- a/jenkins-exec/src/main/java/com/educoder/jenkins/controller/PipeLineController.java +++ b/jenkins-exec/src/main/java/com/educoder/jenkins/controller/PipeLineController.java @@ -1,5 +1,6 @@ package com.educoder.jenkins.controller; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.educoder.jenkins.api.TrustieApi; @@ -7,6 +8,8 @@ import com.educoder.jenkins.utils.Base64Helper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import springfox.documentation.spring.web.json.Json; + import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -19,6 +22,7 @@ import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; +import java.util.List; import java.util.Set; /** @@ -98,14 +102,14 @@ public class PipeLineController extends BaseController { @ApiOperation(value = "处理结果并将结果回传到BDWeb", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @RequestMapping(path = "/commitToBDWeb ") - public JSONObject commitToBDWeb (@RequestParam String taskId, + public JSONObject commitToBDWeb (@RequestParam String buildID, @RequestParam String result, @RequestParam String jsonTypeDetails) { - logger.debug("/pipeline/commitToBDWeb taskId: " + taskId + " result: " + result + " jsonTypeDetails: " + jsonTypeDetails); + logger.debug("/pipeline/commitToBDWeb buildID: " + buildID + " result: " + result + " jsonTypeDetails: " + jsonTypeDetails); JSONObject callResult = new JSONObject(); try { - trustieApi.commitResultToTrustie(taskId, result, jsonTypeDetails); + trustieApi.commitResultToTrustie(buildID, result, jsonTypeDetails); } catch (Exception e) { e.printStackTrace(); this.response.setStatus(299); //自定义code @@ -114,4 +118,31 @@ public class PipeLineController extends BaseController { } return callResult; } + + @ApiOperation(value = "处理结果并将结果回传到BDWeb", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + @RequestMapping(path = "/postTrainingGameInstanceResultToBDWeb ") + public void postTrainingGameInstanceResultToBDWeb(String buildID, String compileResult, String out, String in, String expectedOut){ + + List inputs=JSON.parseArray(in, String.class); + List outputs=JSON.parseArray(out, String.class); + List expectedOuts=JSON.parseArray(expectedOut, String.class); + TestInfo testInfo=new TestInfo(); + testInfo.buildID=buildID; + + + } + } +class TestInfo{ + String buildID; + String status; + String outPut; + List msg; +} +class EveryOutput{ + String caseId; + String input; + String output; + String expectedOutput; + String passed; +} \ No newline at end of file diff --git a/jenkins-exec/src/test/java/cn/lili/test/JenkinsApi.java b/jenkins-exec/src/test/java/cn/lili/test/JenkinsApi.java new file mode 100644 index 0000000..1872dc9 --- /dev/null +++ b/jenkins-exec/src/test/java/cn/lili/test/JenkinsApi.java @@ -0,0 +1,132 @@ + +/** + * 文件名 : JenkinsApi.java + * 版权 : <版权/公司名> + * 描述 : <描述> + * @author liliy + * 版本 : <版本> + * 修改时间: 2017年3月17日 + * 修改内容: <修改内容> + */ +package cn.lili.test; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.PostConstruct; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +import com.offbytwo.jenkins.JenkinsServer; +import com.offbytwo.jenkins.model.JobWithDetails; + + + +/** + * <一句话功能简述> + * <功能详细描述> + * @author liliy + * @version [版本号,2017年3月17日] + * @see [相关类/方法] + * @since [产品/模块版本] + */ + +public class JenkinsApi { + public JenkinsServer jenkins = null; + + + /** + * 创建 job + * @param jobName 不能重复 + * @param pipeLine pipeline配置文件 + * @param params 参数配置,用来传projectid,学生id之类的 + */ + public void createJob(String jobName, String pipeLine, Map params) throws IOException { + //首先得对pipeline转义 + String xml = makeJobXml(pipeLine, params); + jenkins.createJob(jobName, xml); + } + + + public void updateJob(String jobName, String pipeLine, Map params) throws IOException { + //首先得对pipeline转义 + String xml = makeJobXml(pipeLine, params); + jenkins.updateJob(jobName, xml); + } + + /** + * 生成jobXML + * @param pipeLine + * @param params + * @return + */ + private String makeJobXml(String pipeLine, Map params) throws IOException { + //template + InputStream resourceAsStream = JenkinsApi.class.getResourceAsStream("job.template.xml"); + String s = IOUtils.toString(resourceAsStream,Charset.forName("UTF-8")); + + + //处理pipeline + s = s.replace("PIPELINE_CONTENT", StringUtil.escapeXml(pipeLine)); + + //处理params + StringBuffer stringBuffer = new StringBuffer(); + for (String key : params.keySet()) { + stringBuffer.append("\n" + + " "+key+"\n" + + " "+params.get(key)+"\n" + + " \n" + + " "); + } + + s = s.replace("PARAMS_CONTENT", stringBuffer.toString()); + + return s; + } + + + /** + * 主动构建任务 + * @param jobName + */ + public void buildJob(String jobName, String taskId, String step, String gitUrl) throws IOException { + JobWithDetails job = jenkins.getJob(jobName); + Map params = new HashMap(); + params.put("taskId", taskId); + params.put("step", step); + params.put("gitUrl", gitUrl); + job.build(params); + } + public void buildJob(String jobName, String taskId) throws IOException { + JobWithDetails job = jenkins.getJob(jobName); + Map params = new HashMap(); + params.put("taskId", taskId); + job.build(params); + } + public void buildJob(String jobName) throws IOException { + JobWithDetails job = jenkins.getJob(jobName); + + job.build(); + } + public void deleteJob(String jobName) throws IOException { + jenkins.deleteJob(jobName); + } + + /** + * 获取job的xml配置文件 + * @param jobName + * @return + */ + public String getJobXml(String jobName) throws IOException { + String jobXml = jenkins.getJobXml(jobName); + return jobXml; + } + +} diff --git a/jenkins-exec/src/test/java/cn/lili/test/MyTest.java b/jenkins-exec/src/test/java/cn/lili/test/MyTest.java new file mode 100644 index 0000000..531232e --- /dev/null +++ b/jenkins-exec/src/test/java/cn/lili/test/MyTest.java @@ -0,0 +1,250 @@ + +/** + * 文件名 : TestOneJob.java 版权 : <版权/公司名> 描述 : <描述> + * + * @author liliy 版本 : <版本> 修改时间: 2017年3月16日 修改内容: <修改内容> + */ +package cn.lili.test; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.junit.Test; + +import com.offbytwo.jenkins.JenkinsServer; +import com.offbytwo.jenkins.model.Build; +import com.offbytwo.jenkins.model.BuildWithDetails; +import com.offbytwo.jenkins.model.Job; +import com.offbytwo.jenkins.model.JobWithDetails; + +/** + * <一句话功能简述> <功能详细描述> + * + * @author liliy + * @version [版本号,2017年3月16日] + * @see [相关类/方法] + * @since [产品/模块版本] + */ + +public class MyTest { + public String url = "http://106.75.33.219:30001"; + public String username = "root"; + public String password = "root"; +// public String url = "http://106.75.78.183:8888/"; +// public String username = "root"; +// public String password = "root"; + +// public String url = "http://106.75.78.183:9999/jenkins"; +// public String username = "guange"; +// public String password = "123456"; + public String time=TimeHandle.printNowTime().replace('/', '-').replace(":", "-"); +// public String fileName1=time+"-series.txt"; +// public String fileName2=time+"-parallel.txt"; + public String fileName2=time.split(" ")[0]; +// public String filePath=System.getProperty("user.dir")+"\\"+fileName1; + + public String filePath=System.getProperty("user.dir")+"\\"+fileName2; + + public static void main(String[] args) { + try { +// JenkinsServer jenkins = new JenkinsServer(new URI("http://106.75.33.219:30001"), "root", "root"); +// Map jobs = jenkins.getJobs(); +// JobWithDetails job = jobs.get("test").details(); +//// job.build(); +// System.out.println(job.getName()); + + System.out.println(System.getProperty("user.dir")); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + // @Test + public void getAllJobs() throws Exception { + + JenkinsServer jenkins = new JenkinsServer(new URI(url), username, password); + Map jobs = jenkins.getJobs(); + for (Entry entry : jobs.entrySet()) { + + System.out.println(entry.getKey()); + + } + } + +// @Test + public void createJob() throws Exception { + int count = 20; + for (int i = 0; i < count; i++) { + String jobname = i + ""; + System.out.println(jobname); + createOneJob(jobname); + } + } + +// @Test + public void deleteJob() throws Exception { + int count = 20; + JenkinsServer jenkins = new JenkinsServer(new URI(url), username, password); + Map jobs = jenkins.getJobs(); + for (int i = 0; i < count; i++) { + String jobname = i + ""; + if (jobs.containsKey(jobname)) { + System.out.println(jobname); + deleteOneJob(jobname); + + } + } + } + +// @Test + public void buildJob() throws Exception { + JenkinsServer jenkins = new JenkinsServer(new URI(url), username, password); + PrintStream ps=new PrintStream(new FileOutputStream(filePath,true)); + System.setOut(ps); + int count = 20; + for (int i = 0; i < count; i++) { + buildOneJob(i + ""); + // buildOneJob("3"); + Thread.sleep(30 * 1000); + getOneBuild(i + "", new JenkinsServer(new URI(url), username, password)); + } + } + +// @Test + public void buildJobParallel() throws Exception { + PrintStream ps=new PrintStream(new FileOutputStream(filePath,true)); + System.setOut(ps); + int count = 10; + for (int i = 0; i < count; i++) { + buildOneJob(i + ""); + // buildOneJob("3"); + } + } + + // @Test + public void buildJobNoparam() throws Exception { + int count = 1; + for (int i = 0; i < count; i++) { + buildOneJobNoparam("1"); + + } + } + +// @Test + public void getBuilds() throws Exception { + JenkinsServer jenkins = new JenkinsServer(new URI(url), username, password); + PrintStream ps=new PrintStream(new FileOutputStream(filePath,true)); + System.setOut(ps); + int count = 20; + for (int i = 0; i < count;i++) { + String name = i+""; + getOneBuild(name, jenkins); + } + } + + + public void getOneBuild(String jobName, JenkinsServer jenkins) throws Exception { + + Map jobs = jenkins.getJobs(); + JobWithDetails job = jobs.get(jobName).details(); + try { + + BuildWithDetails buildWithDetails = job.getLastBuild().details(); + while (buildWithDetails.getResult() == null || buildWithDetails.getResult().name() == null) { + buildWithDetails = job.getLastBuild().details(); + } + String buildId = buildWithDetails.getId(); + long startTime = buildWithDetails.getTimestamp(); + long duration = buildWithDetails.getDuration(); + long estimatedDuration = buildWithDetails.getEstimatedDuration(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startDate = simpleDateFormat.format(new Date(startTime)); + // String durationDate = simpleDateFormat.format(new + // Date(startTime)); + String endDate = simpleDateFormat.format(new Date(startTime + duration)); + String salveName=StringUtil.getSalveName(buildWithDetails); + System.out.println( + "taskId: " + jobName + "#" + buildId + "," +startDate + "," + endDate+ "," + salveName); + + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + Thread.sleep(1 * 1000); + } + + } + + public void createOneJob(String jobName) { + try { + String pipeLine = "podTemplate(label: 'mypod', containers: [" + + "containerTemplate(name: 'ubuntu', image: 'ubuntu', ttyEnabled: true)]) \n " + + "{ \n node('mypod'){ \n container('ubuntu') { \n" + "stage 'first' \n" + + "echo 'hello Word'\n }}}"; + + Map params = new HashMap(); + params.put("taskId", jobName); + JenkinsApi jenkinsApi = new JenkinsApi(); + jenkinsApi.jenkins = new JenkinsServer(new URI(url), username, password); + jenkinsApi.createJob(jobName, pipeLine, params); + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } + } + + public void buildOneJob(String jobName) { + try { + JenkinsServer jenkins = new JenkinsServer(new URI(url), username, password); + JobWithDetails job = jenkins.getJob(jobName); + System.out.print(jobName + "\t"); + TimeHandle.printNowTime(); + Map params = new HashMap(); + params.put("taskId", jobName); + job.build(params); + + TimeHandle.printNowTime(); + System.out.println(""); + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } + } + + public void buildOneJobNoparam(String jobName) { + try { + JenkinsServer jenkins = new JenkinsServer(new URI(url), username, password); + JobWithDetails job = jenkins.getJob(jobName); + System.out.print(jobName + "\t"); + TimeHandle.printNowTime(); + + job.build(); + + TimeHandle.printNowTime(); + System.out.println(""); + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } + } + + public void deleteOneJob(String jobName) { + try { + JenkinsServer jenkins = new JenkinsServer(new URI(url), username, password); + jenkins.deleteJob(jobName); + + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } + } +} diff --git a/jenkins-exec/src/test/java/cn/lili/test/StringUtil.java b/jenkins-exec/src/test/java/cn/lili/test/StringUtil.java new file mode 100644 index 0000000..d3e3f13 --- /dev/null +++ b/jenkins-exec/src/test/java/cn/lili/test/StringUtil.java @@ -0,0 +1,39 @@ +package cn.lili.test; + +import java.io.IOException; + +import org.apache.commons.lang.StringEscapeUtils; + +import com.offbytwo.jenkins.model.BuildWithDetails; + +/** + * Created by guange on 18/02/2017. + */ +public class StringUtil { + public static String KUBERNETES="kubernetes-"; + public static void main(String[] args) { + + } + public static String escapeXml(String content){ + String xml = StringEscapeUtils.escapeXml(content); + return xml; + } + public static String getSalveName(BuildWithDetails buildWithDetails){ + String out; + try { + out = buildWithDetails.getConsoleOutputText(); + + for(String line:out.split("\n")){ + for(String item:line.split(" ")){ + if(item.startsWith(KUBERNETES)){ + return item; + } + } + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return "master"; + } +} diff --git a/jenkins-exec/src/test/java/cn/lili/test/TimeHandle.java b/jenkins-exec/src/test/java/cn/lili/test/TimeHandle.java new file mode 100644 index 0000000..48666c9 --- /dev/null +++ b/jenkins-exec/src/test/java/cn/lili/test/TimeHandle.java @@ -0,0 +1,39 @@ + +/** + * 文件名 : TimeHandle.java + * 版权 : <版权/公司名> + * 描述 : <描述> + * @author liliy + * 版本 : <版本> + * 修改时间: 2017年3月24日 + * 修改内容: <修改内容> + */ +package cn.lili.test; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.junit.Test; + +/** + * <一句话功能简述> + * <功能详细描述> + * @author liliy + * @version [版本号,2017年3月24日] + * @see [相关类/方法] + * @since [产品/模块版本] + */ + +public class TimeHandle { + public static void main(String[] args) { + printNowTime(); + } +// @Test +public static String printNowTime(){ + Date now = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");//可以方便地修改日期格式 + String hehe = dateFormat.format( now ); + System.out.print(hehe+"\t"); + return hehe; +} +} diff --git a/jenkins-exec/src/test/java/cn/lili/test/job.template.xml b/jenkins-exec/src/test/java/cn/lili/test/job.template.xml new file mode 100644 index 0000000..0a208e7 --- /dev/null +++ b/jenkins-exec/src/test/java/cn/lili/test/job.template.xml @@ -0,0 +1,21 @@ + + + + + false + + + + PARAMS_CONTENT + + + + + + + + + true + + + \ No newline at end of file