From e87ea24efadcc911c23ebd462e75a97a9cd3c26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B0=D0=BF=D1=80=D0=B0=D0=BB=D0=BE=D0=B2=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Thu, 4 Mar 2021 23:01:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20/=20=D0=A0=D0=B0=D0=B7=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=82=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GitLab-CI/.gitlab-ci-mergeRequest.yml | 83 ++++ ...{.gitlab-ci.yml => .gitlab-ci-release.yml} | 7 +- VA-Тесты/steps/kapral.epf | Bin 13180 -> 12762 bytes Скрипты/1cicd.sbsl | 383 +++++++++++++++++- 4 files changed, 457 insertions(+), 16 deletions(-) create mode 100644 GitLab-CI/.gitlab-ci-mergeRequest.yml rename GitLab-CI/{.gitlab-ci.yml => .gitlab-ci-release.yml} (87%) diff --git a/GitLab-CI/.gitlab-ci-mergeRequest.yml b/GitLab-CI/.gitlab-ci-mergeRequest.yml new file mode 100644 index 0000000..73980f4 --- /dev/null +++ b/GitLab-CI/.gitlab-ci-mergeRequest.yml @@ -0,0 +1,83 @@ +before_script: + - CHCP 65001 + +stages: +- build +- test +- report + +variables: + WP: '${CI_PROJECT_DIR}/temp/wp' + +buildMR: + stage: build + tags: + - edt + only: + - merge_requests + script: + - executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl buildMR + artifacts: + name: build + paths: + - build/ + - ci/ + cache: + key: ${CI_COMMIT_REF_SLUG} + paths: + - $env:WP + +testCore: + stage: test + tags: + - edt + only: + - merge_requests + dependencies: + - buildMR + script: + - executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl testCore + artifacts: + name: test + reports: + junit: test/junit/*.xml + paths: + - test/ + - ci/ + +testUI: + stage: test + tags: + - edt + only: + - merge_requests + dependencies: + - buildMR + script: + - executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl testUI + artifacts: + name: test + reports: + junit: test/junit/*.xml + paths: + - test/ + - ci/ + - public/ + environment: + name: allure + url: https://${CI_SERVER_HOST}/${CI_PROJECT_PATH}/-/jobs/${CI_JOB_ID}/artifacts/file/public/index.html + +pages: + stage: report + tags: + - edt + only: + - merge_requests + dependencies: + - testUI + script: + - executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl pages + artifacts: + paths: + - ci/ + - public/ diff --git a/GitLab-CI/.gitlab-ci.yml b/GitLab-CI/.gitlab-ci-release.yml similarity index 87% rename from GitLab-CI/.gitlab-ci.yml rename to GitLab-CI/.gitlab-ci-release.yml index c902d63..34ac808 100644 --- a/GitLab-CI/.gitlab-ci.yml +++ b/GitLab-CI/.gitlab-ci-release.yml @@ -41,7 +41,7 @@ testCore: artifacts: name: test reports: - junit: test/junit/junit.xml + junit: test/junit/*.xml paths: - test/ - ci/ @@ -59,11 +59,14 @@ testUI: artifacts: name: test reports: - junit: test/junit/junit.xml + junit: test/junit/*.xml paths: - test/ - ci/ - public/ + environment: + name: allure + url: https://${CI_SERVER_HOST}/${CI_PROJECT_PATH}/-/jobs/${CI_JOB_ID}/artifacts/file/public/index.html pages: stage: report diff --git a/VA-Тесты/steps/kapral.epf b/VA-Тесты/steps/kapral.epf index 08bbf33814dc833666ebe6ee9ad67096e33470a5..82ef526c4463ada622942d28a3aa6cca42ac5ab4 100644 GIT binary patch delta 8542 zcmZ9RWmg7w@*)$_6d1@Df%UpQDrVY8njvh#G_=Aq>!;lE{q4jsZuA8EWp` zsGX@5W*PjJ{2_UoerCGjG1b%dy1DLBX^m#bu%c1@`un!`aIyBo(Bu_VHR`x=r>&Zw zx%c4(>3b`m-%EcA*4)wH|3K+$h-DoCx#pM{73%7)WIhZ3y$Bn6HtG#fdR&^SU2k!LOp)ZhqI&MF#$dp{ub8uDvf?SJyd>m@5bnDhiFlwfEchB!or|0z+buO}LyH*H8n^wd%@(i! zS>R#q@T0+|24AiD&~;8pxY8RIug?A*;p1YUuXGKsg0`z+VXL#!OOsI?t|iLfC_4lb zSgY&03v=uSPcR4C5{ryYvtPy%{u;sf{m7VZ&0_ux9x4PE`Vj|ahAsk za{kemRniYcw#I}0#&W1t&YC8JF1ytDHPh{W0P{7=wm!$z2Ty+k%H^*mn1(z1bDP}L z=PR>Yn;`?3sw0*Zc#B{o3680h0E0%wk)#30?$eXmVdNo*VJeR}he$xEY&=BZGn8xm ziUk}qKcZtV%6HZQ(}Hn8W(1F_Z@)mh*`fir{nj=E?a(RIJs3Kux`a$SaRD$GCN)g# znXaq8grIPM--tp9qqGdQz$u{K358V~h$ya}cB>D&9|+6(N)G=1OzjF!V>f^a~$$8af4mFVT~r32y9J9G2Tps+1GX$-?}qncN5C zD7`eP!EM^7bn4g1*CPO$4S;=r1OO$*6MG+_d7Y>*(n`=}5@_`0rE6V9Yz+Rc70s*)MA39`Bj*dSBj&%X5s?Yn?qUjHHv% z9%RC4{#m_Zd#oRE+7AAZrA?@rnpFpPh%a*&Vu5$G|)i%}>fCU+u!-i3GqG&i$}j zQX|VNMmJ4ET`PmMSXWeE`ni9y5vil2QI)7x-ax{vMaCM^!HGrh5=4hsM&#>DwbX9G zt<0B0S)tWc8z$~<4wp2N%;Qi$bIT6=8Dy+L`VuQ2S4ON`y&V9xn5;%n}V>QSkVDi(Qd$)u6HWa}w zXEe+oNL44M&(Q1`pQOp}B@t?7`?)jlivqzPE~8-Hw`E4sLRf7?re{ZF-NMgApiF)u zlII+W#wLh!D+PoH8#jR6SjTFxyTyWq8~|4RDlDi$nqAO6J7r-;Hi69X7hpb+s_(gM4MPcPv%pdJ?J6eKAZTi!_5y&&;Crk zDz<5fPbTgVe+M5}_np)d44~=;g*+4es;j~O!Pp^=19J{TAe1JHnxYFNY1Y`7Uy@s9 zp=sDWj-Tjcz)R*<=0p!s6&I{_MoUheA&E*Z^UJNlvO+APT_b+apy^Z79zg1JIv;Zm3z9><)qd+jwr>FkCxP2e_+!<+`lyATl;nZ*tM z8Zskg7zr_!2~w=FUo&iENlxV#Zm{UeH2%U$B4`lw_0iwHRq95aS>l>Y3Tr&{krC z>%OV8&?(C@K7vmO(mWU^wZ`-QA#)7x7b#6s`;ibb zQP?dJr+2gkk*145xsNa@(>7nrG0dvL8^GQkp8V-b9)i!P^%(tj*>(4CmhwR#wg4 z;fa=s<9Zx2>crs`c7tpS#W*tb%}*wSSG;<#rHoi+5xaZO95Y<7OXdkoD|Qst2nAre zQyv6I+elEX)~*aYmvA5w4-WOxHD8WncCh<*#jaATrd~#m7||y}Qv#Buxa}IgN&Qp8 zpE`N&)|G4YgFn?oPi;c5P7)VG&@|PTm?K09PJ6d({s26uKMK+oImf4UV$6CgG+YXm zMD!;_QM5gEW76HsFIEa!)xlzuLVoc3h1HMCZLpxzDN!}_)L13&R)ZbK19MB+_B*-Z zt(X=RKvai*pL^nAPBYd?MH=g`Mb)$X)h1c>B(q(;c_0I0X7m}qFvLp$jbw#J++p(& zFhAylMZbU&FX>b{kJ) z*cRny3Hxk3_hhB^qBS(ooP(6dh$d!`7C=>V2=~q*7PD1@~jt%n*?PB+EF8!!LwR&J?jm;I#K4T-Rj*>-v+oUo!r=ziUOs2nNDmjS10@j7&t5a z#(&9YnDrs-o3k`Vp1RB6QFe^`#4hl_d{U}$EBnwWq^Hqx54l%t9dI&sb6nF~`2dAs zzylh6)P1JWe~z=4J|ylT`2P%1oz zVva5jr$bArBqhty|Hx zV$Qj`c&pIjXXHo7KMBn(;Nrx6PuTZ_L^5}qU6a*U1DrFDGAU{s5caYa->P{UM zb`OO>#zR3MO$c^y_vh!TdzQ5CZ3we$}H$+0TH^Mmyl{)i|1ZgI=_jW{6XL7kk$D zVMQt*gC}bfYK6*KmQ);>S)G*YrQ|yq@}99LJmQ)9@#Kkzyy9^zLc;IK+%+;Jt36l6 z`!Un70{RF^_tBJ5~R7>3=f}4&s3K$EE;^z;C6*oG~1Ib#8x^g zg=S=q;^Z7v>mAfqGJ>PuTeiGUg3oxI^mp~a9$0_`sj;Yr9HP&zImRLTqV!E&unrL7 zUX->AZAdDuoc)-_sq{g!ad+$T$S#gihf%gY!2nfkr@|;K|J7KF5$NlM1M|;{)?ZX& zmW9082{Nr5Z#Gb&hgYxBUVLs`C^A&^)u+_#8t-&4Wy;#hd2C5PO!s`!#=^sI5O%d` zjb33}wCy-{(rC*1OJK6WT+Vjrw*tEcRNda*<;xEUqZD%*mglr?p)A+>-x5(rC~5Q6 zG%m1->%*%11+gzM$3Ty|@`fWqy=o7b{M?Zo1nbSK6RT)l<`pA0GeEseNib)JLyWj0 zqDRoqEYi&!u3`M;83sN@4=G86Pd{KO8`=@3!n^+bu}=3}2}j9M@3E{>3JADal^>2@mf zXk=2tqQ|C^_YW}!uoeOP8|*gY_i8ChbZqSVJlx3mtiygof{7|cB>b=Y{o%&m;VS-q zLFcg#p{tbj2enED1+GQ>^~ZmCB4NJk_3)Q&sbVl&pWgZYdUb;Q)|=pSGC3Fn8vi!NJhiUN&_GhiKdGEeGT=VX`}ofV6;&wL z#b9RB*VFu9-N%})Oz)4Jrd)r3ty!PJ$B}Dymyvm*3aA{xn;F>07-|ry4+SM8_oE2@ z6DFZygAh2f_}p97*1T zM#(!?T7ZJaYNj1?I%tFtV+^aJGu{_?Nboi`Z55HQ`;DKlZO^z3GTR_@m*j97VL|Ne zD??`MmbIzz04lJSR<_4>ms34m-MvD8NKK-c42}7Dv_)#n<}kH9@t!62qF8)jBq9PF zhv@xY*%Hyx{Lft{XY3nMYme9r23{*C?B!YE15mb>c2D$Pp`D9?*x9I&6FI&0@9Th47+VJW|H$ML8uiA9_j8oUVbFIsXtY8va$#6?*l<^FrcJoXQkZ(>(z+otR0 zN$1uG3}k_nfTHk|()?2q`W-%j<^j+O>3GG~3YJAESJdTq>^?f!D3_r(DwkjvZcWE9 ze$#xy)yU3#YI5rdP8+kmQvw=mW(Z7zCv{T`7`gR;`+2$Rhs)=0f(9pfzOkg(OD-uc zZ{~V-mZA|FZz?3WlPjB>2Rlbw=PD3LS@-Exw+yOCHze4*z0P<&&Id9MbUTrl5OI?XNem z^N1XxJ~z1+3DiRm;AojpwyD-E&2RDb9hnEp7Ofvi&j|kd2*}q+)ivf zHf0$X>hZ*&5PMUiXdqks-}xi4|6e|QaNo2Yr?&?;&96&F-~-j?$)yFzc`_u9$&!n(7TP!GBc1!;b!faogb=# z1{K7TcWX4%3-(3G0C%uph#hle=oHmF7B0K%Z(?~S=yX%)D0qlhZ30)BTH0ROl&KJr z3%?w*8tOwk2J}F$wwH2DM$10!O!R$IGpbK?HeS?kWEH0ckBvef!}a`+_QSIoijSOk zPgkq&%QR8eeZk(U*BzaPD1&(hnaD+;87;MvVFEKYbB!o0H8EP@+D1FofuEfYfHFzD zL`h?<+;RnOr?8~E{-h4=mz4Yrp(FPLPHASHB9ss6BC8v9R=E_|r{wz>AlHiNk-HtF z6CVNUefl@Zy5|~oNzEy|-+WB^LAI+dW+f?2y{HOBrsyt$j(n)79Jv(jg~J^r=1_wE z)`i)Un2E`<Z4`_Eh zB1XJr`qheny}a-M^+FI8OVzn>IX^awJIW&>Pp4~7o5LMmv^);GC_C+exfMk&1LjdynXyi%#L*zpM{34z4O9)If=_JISt2mn_t|)S`vnSbSAUapIbWxyz9; zd$<${V7yU!&TlGdT&wuIrz^udE#;S0X1|dMYuxtjHlr2}sF-hAZiDfJx2Ame%udWG zW)H1?fgzgY73ZKL`%V3{CDv%hc|%tggp@2*q)$h$DG6%X+qj{uI1=>)hBLXkynHKj zO*K0seI0uU=Z{%DvFq_Tipeu%-jxCo)jjl?`3a6gG3FeK#bUeJFURV?kGN$fz`au( zP9s@)SxMML^E41X^ujv?)n9Z(*Hs*(g4G8u~)Y1|rEzHU~B85}b3U8sUKR;5Kuc(){{Ld z^evq?Tn=|;%TVQX)Z>=vNQm&by-b82cJ}U5yxj){! zPIH-%x56{&2;tQO$cEQPDyB_JR=VECbvP0~Hv$I7;ZK>Y@bK#p zv3xQm0Zyq92(is@&~WK=&*(FPK^$%mMsg(YcOb-iqC5sB-I)o!^iywVvtal7)`Gie zemQLYReyAgFd8iz0w2#aaxqR$QBF8+bUd+q_TOTNvMPC5L7IIRcwz|e?jJLezVyA% zp01wVwxq<*?z?Z>NB>Td%pa!{t^sC$H1L;+z7J+IT~+YsyKh)LuGY^y-&(EEnMQE- zZG$>qNHY($qx$k~egkd4fn%&xB@*l$;4uY(TQ{aRoooH-R*#Jn=(5-bB4k`^N@$$6 zi(&%P}M@=_x zuG8D+>8U2%?NEOzUZiR3KS!_A+>RUVs7w7U@`$nftv ziPC5FTQoM0S)*P8RDS&=A@FQrG#GIUbXg2mu9dz;F_Ae+#hg_h^BD&$J`(MiI2cL6@^YB}Rni<7+%=0f6vLU?2Wq%5 zj}QE;!f0BIY1K(V7|vOXHFPIHznq~8VuX97&95oZ<7U@)7!fTJ-BDy~vct{qMLW>M zy>?3pm`pe;lgxBRocmSd6|^jjp5(GMaF7Sk><0fpym&Xp-iXD9kq{BV{SvAvg%*@y zy|orT$;HgcDM>dzBTUaFdT+oh1JY?c|5AlFz~CcsF2A8Hm4s4X6Qf!gfQ>&1a2Spq zHl;ib4I6-wAMB5WdBsx*yODM+sPVi_uDd0|alG#-SNNfDqw>~U#-6KjVILFMvurH( zEy@a(n{u0)qT^^$a5-0UQ|N@Hq}H3qj4(Q-8S!%CwF|dh0`q!U(dbXpsV`yAn zAZ)rt6uXmI%FyPMP=nz?+awq85rJVGe(3$#DW*ea{>~EYRO8)`0}@wnZYFkAaOA*W zxZ#OlAcpN7^+wJIkNd|1m$Vn%FzeyaGrF7ylTyvII_vR2VUz*Xx8q#KT8Nj8DF&1} z^g8IG=F?bq==A|E1LvM;v+ZL^l%k`*u0d%Lb+p za<$(+>K!k%q);Bz=olytJcJ(ZhXnQvZ6L}^sM4_jlfsjG)hp0xn**Sv)N&0fPCA$9!5p2mWzq((Y zT&1CXZ>4`H-y_*`BIqFN67l$WJIz+5p;SrQE+rW}f^~ENUBuj9r(o|9ziklK-ew0! zol@}c8BdDqzUth3P-0XzOePx^f31^D$h24>AX5L6pP!#V6B`7?^MCSxYrHQI5Jq1bgBBoBIsOe9Oh`dN z{7-K-gldBRFGK{V5A|Ot1R?pqP-+N*YN``58o1?^5KE~ zHA5_y=@VUZ!%DG^bgIb_+L+#_{gvtvW$z`Tx|(%UV_@WqmgDqz1k*rn5(x_iJQhAo zn3;=*_IfSC_)t^h5n%R^xz+D_-Fx-(?CLc`c4&ZqFhdqpzvI&%d_8me2^c&6>)g5A zdOG+?A=Ko9DM^S(OWUgqOy^7zUq#>+40o?XIaYhBZ?-};8@0AezHt|j^aHDv6W zbOvwwOJ6gs#Js$dw53E5z3OIjUi{F z{9|88!(Y4N=6aX49#c(FDtHwZ@cf}i(7%j(zZi3ElEtQsr#LEQGpnSOSl~rHzsbN3 z#}Catc}}r)eb3v};r&_Hw>_j6+|bR@aG!ehZ(+#v+15;+oroeplW%&Fr-FS7-4%6BC7@KfM1Ya*sm)$Jc=AUg(0-ZUwm-$-hOt-&$L+ zJ=9oR{Df(x%WTH*qR>{=be@Yus~-(Xw>dZ*@Y&lj2*T4!QD#B+a=zHYL&A`#EhbyF z*&Bwv5J34xCsH>g3B0}2bJ*1e;|>nnL`i0EYnQO{jvGTz5Fm79Vutj|ajV5)B0oAn zluN!y+bF31CC{^D{cbe})r6~OQxZH}Mex`^5RR(1&pgm7ZqfOu?!3~?wW_H3%GE)N5=X^OH|0)n7!7vl-|%5I>+HVKvACyC z7{bqJB8KTsG{_L#p~}A!HQ3;-TN91Y{J|V@KuyPSf_{*5bSB%to~Cbz&nbi}jh79E zwp;GRAL!{9DF5;MUe}NATh~wn->EsS*OWnO+Hl(1G@yiy$-2bJ%pbzhEpfLiY_+II z#r%?^1-HFYV$^R$@#@R zUkO#)2Z)Z>QkzPS4T8(e;OF|6NyACcUd$;oJOlHzmy%nWyHzi?m|r2EdBeIHm?7RU zGy?n3glHHo3HudJ)K`+3-=z~&gzMIrL(n&gynNlS)*&Z+|r97klTPfcZtSxOEW z1+3NOJryJ9xwRGt{e9G~`8r~2IYKfz%76TYbxaCWj?3&B4u|WYIlvPIf+65DM{KIm zPc(fUM|DswUEW5C*Y~`vK;6K0XdUC0e?)Q8u6|K$ml`)HvKq(?i$aVcNv|?&Q=;=&iWB%RiW0#~<1#5X`!G29R=7neHtK^!K(C)L zkwYOaB9a8VptlTRV^wR$0omdKH4d5ma7wCr@{I@D1d1%O2mnm&B_lb>ODuNJ$eI!RWF5@gBHGZ%`W_EM} zmq;4z>o@2MAG5zsGbDiL^`Bc$pw!esCKt1*)k4!)cP3T+cUJxM;Y6lvtDnR|_P%%z z6n;SvrCN86R!+v*^mCSOQ*cP9e;>aFu0*BKH0I3(?+=-MDms+RgSS-PA}fcuJVhOR zZiI-o;>~dew`YrQp}c=_aT4Z3bHdV6Y~9(AjRq%12Gr~y*07W0SM!MGoWTS^VwF1INe78xmE@%uxRcA+l^D6FL?3-S#Q6=HAc+EItFtqf zBZ{7cXtRvt))k|ZokQ_%AY?S5Y+>kdc^$4cjj;7`!D|Yk<=vOM`HC`}hBZ|wbr(Bn zHi9_JlJ)_sxKzNHgGC4)*NQkAm;NilcOpG@ji~0*;rQl9$H_Gv5lJ=;(;H^+(gY9Q zVv(|NvBHz~( zr5`g4&D@r|t__YUqAu4noi(-k>I>gAM#U>>sxLNuzUYn>nh4YD}wEj;GDeR>PHYi-HT1u+4i5~0IF8C6? zUP89OGT+rI%|Vk=V3ZK4_(Q_kWFUcml(k7GHc3M;3my+75AXD%@BCvn@`$Zea+|nx zPY=9ep`IHp{)YY|kJQF`S$S}s2^a6RCjI``0P=-g-lIJW;$BTq+$IgkAdIgaCfxUx z5TexdXVc9@4pZw1M7Z}(`t9UP_?bsRX1RH^oy0|Eg?};_Sl=ydXg3o<*t0FEHBNL& z`8~p*yNS`ZMYFSB)@WpJYyNLy`L4z6d0~0TFu&*UH>EtP-|0F2aY)Q&?Gs}h@mEZqRITLE1aTgc<#`yW#kcQq-GDq+=EOl37ifVG z=p7F-k$lzyNzD~i>5WC_30^x%^?Tn2{=vfya|K-?u0`)t@$So2HAq{2`8Vh zGW?`q0foNT@SA=9{1B0FH)Qb}b_mbGH$*kKA@y+ppZ^$5J{x6oYWIVyo9n?z>gY7@ z53l?--{vTrsKquRJA(SeUNt^ub!e?M%#b0MGZf)Y(I<2$ZRPH?}~nZOw-GjGMyjQ$rUf%=Ym_urehxld|22@YJV8M9N1M&1EK7NhX1*K4gNe~G*1bgC@&sy{-uRrImzUyEX{1oy3svV^=V z6w?k=<5!I#|6`m~Jb0k18C^@t%6(n5R!0EH^;^rrW&41)|~sZglcf4v69bi(TuL?;AUjyh{Mqo9io=DK)+o5luGvDa@eA(DsaS2 zIIE#Fi3`lz6j9Vd`3*i#)&I$2V*|W z+7%BOy4l0;=2u(kv4BEVM7;Jp)StNi*$S|!BK#RIQvz4+#a1E}yLLI1SQhao$^rjy z3zKm_I8s!aJhZPvvXS-8t=;czy!yJLRz4RVxqd=`@huKZ)RW2AnLI0-?_M87{WIy} zr??%R<~b=bIXIi3Am?fib=)@Qsn!b+Xvo?LxF2MWttFF~>Y*(-va#mj{?cF_mC;-? z#1OrFMaabn>xHGgF*+-E> zGVVY(5S^B6*K%~-HYjA!)2{3>40bu9;?-bRpq8co?oLKRHYrx^k%VO@kAD~vqv6{H z7FAN2)l-=LjfOUdw5pL7__;W!m(q9Tsf~qz!2aEAf@@cH#o{3OK1TbYfu&6`E5W&E zleSgUlwjDT$ksJ93SDggG9@>#T`o5kbAL-B35kcWCG~5C&hx>nKYARYL&$R+xEJn79xM%D@tR4uK=g3^e!BuI zl~-3!h5cH?ohWUKJHhLiD6q27{t;M82Co06-9X?$T;Wf&IV|0kk1tD0d+%0!`@3|r zBxLJKOKuoGU{$eXm()N6YzkX9anq6ODulx1BU3j%X7i?r0iIhSsV;&!`#v%DIZz{= zm)IsrhoQOUK3e?B2RwPGyFQfis6^wD#RWkd1i#4O#VqtYUq za-*Dw2rsG;a&8af9qB1b=>@~O)f8GVj~=h14T-Qw`ecn!)6hF+k zd@*2tZ{+V+ar$~2{_o^fQQ_Zt?C)#N|Vdrr?bd`WHU!xgl_iIgd$no@W^{GlpBFJT~n@~y56IQE>hIbX=z2c$cA?8Fbim>r>8M$<#?Y2dM z^)y<9)F=!Zkr5_b`~?fsHIn+V+eLH@W-h>MB718fKA+Mjh)UL8Im!61sR+bjFq9Th z{+$SSFhz^{qeU_#=y$|Ff7~|&5v7MdZ-42|sz}pKRnrL(-$#t#o#E~e{M}KbMUEcf zM0{dyG2&P2=}aak+TZ}FPW4$3X}7{Ad5g;mlf(jwg62@rl!tG{aZgZr~9MHqnT zV|oa+^LDbgY;>XG-Tj&EA+)SDKM>sbZ~MsCM_`x&^%s;ki%maMn7tG`M2JzTeUrzpGL*u-w*UAgNwy2N1_1;w@tteifAhu2RqG%m+OK2tif^ePUg~=$ z>ss|gZIw2d*-%|1_4YLeSN7(Xtr|EY6M-bhz8pvo_mFU&2ug~xs*TQdz>dJ1TNK20 zpu#e&vZdf8<|6)eJs}D`s=O>M{K5T)7zeanp@@JvVDtiMdr4xD-QGxhO$MX!BZQ-4 zZN}7P+<+NhTau)*g7;*=XVduWw~N#eSba(WOLu4kdz1;cH(DlXacrEb3IGV+(a_P6 z%>(boS!ceqEdAbha>kqu`hARdo41zMD)a5@eHOc>_9In7WO=XSM+13!=aC-HyVC0Z zPs4()PaSZbQyKqo39B^sRViK}n4FPIMRrRzO%w;+)=ua?!`8;x@LB5z#;*3M_JvYF zqj9EjP0I#o+rHf&fxeU8T?2?JwSJgzA70Vd>cD+JY#Qu)LVoQS>m!6ApVMw9PlpT@ zI?ua6mSTCUIFFB~4img~PKn_gAoU#_4pQ})yDq2T|O&oSvwyCv-n&qq2QBc8{yjd(uYUO>R4y?43q zO+VRpea^%>-~U+WZ`Bo@A>6g*NKC0YEdpl03QASg<&5l6r|qhPo1#$-J6G@#G1$C? z>+Ne!Uy5u~K^L`wjogRzhYnj;`4895sqx5z7MB_%P;|Tjg$Q9{K2;f(SkIfpKLUPX zdPB_>a>I6go@P>xIZnj^7l2VB>_^B@O*hLnQfk>w+q{YodBvA#p#&X)b%LCEBzOlg z01GZiHKtiYKD5clr(zzxW2~!@1WhngNy>9z!0Q)f8Opa{G>VMTm1Qy;r6QJbWpKYY z$F_TdULoG48!6QHpz8A+oG%WMsp9m!BMC+wid%)^hu${}vZNPiy#QCX*vC@|S4sbe z=2ckoE#l8aii{7W4Uwt$b7v-m0DCLmC`nC;WVAMj095pF1jt9Jp{1%UZ~U5??s9V` zPZW)c*sA+K(dDfiDP;Vd?Z1H=Y!7^88#bvCbF1Gs^;8OUE=TU%0wL@I^}f8ZkKx9d zc-4kx5c8kYpSrWe{eUUzvJQe{gp#F8%Y9W8sU0DymUfX`nsNJxh2DdOq(E$N+}0eO z9rWjw6szU2a_l29DrT zef?3b*+JJo2db4@(9U)tmy(NfCQ1fOh^ZZGX($7H1?psw762uvDVSq{%+N@)hF@6J zq57~A94u$*{2b0j|9Jie!71v#X3J?ZD??j_uKRb0J2Kzj#nxdRvXT#kpFHNO)Yq~- zzmME0|85kcgJoM%DJI>LPNQ;}-_Qv=g?FR@6#yQs%$hbl>6n}jC(`NLv-f}Q zK;j8d(Bb`~M1M@#~(w6Mj-*%0rDAMwE6bD0Vm- z#Lb}5#0A*@<#r6<%=cHuhO&OQI%IThpM=~{E(s>hFO>MRwn-d&(Q-0N?Ba9{dvc3X z$D&CRPY5VyKMU-oOETUwhQmxl0Uf=Wk|PA&jfbRyrM)Qo%oks(EolI?SQ2_^p;@8mvN_sLFroGh~T4*`Ko{30>L`6W^7 z3&5&O`ApW5rm7{(*aQDsZiJeD82J<}0okkSb0ONl18=D=o=QyV>}wn!2A5`uarDE+ z!aPPFfs0T))m7;=BF8_0k_nW_WeOBclxWftNIpLbSiE(8XEOT;3_Bv#~V9m(`j9EOFYy<`hq(~EXqNGLC21|5y27Pby39V8M!KKYF533_!`7J zbq&?t)Z)~obsBZV<6OfRr}q;QL^QvS{TllkTE4ePzZCI)GVn5~xy11h>wIf5&;E=a z6h(bI15b^uNqaEya#%9NwMsDdWWy%Ld@!!Eco%#K#+y(L zv%Pbsy~55d<4+3Li~s##xF9Qf6;MbKff6aN#T7m+4w?ei9oj-`C$6lriQ}kRWSOj6 zG6^i_tAOvZ4l(9eU%B|@tOqvc*VduYzU%!h#{VnL5W~iX5=P=2TixtV31~Q5Nt>sy zl(u{v;kp3Pn@(6mESYVEHHY^4@nwk}Ms*fE;Q)BR{|{ca^tr195gGDHh2RNDk;=Iv zS#910R(|APgs{1HeekzT>=fc2O1&FNe)C~DsbW7lxXc*(D&L7tZsrm=zIXv+_wjpz z;MK^$!v_bR$Nh|y{HO;EU?j@%7(E2Z;kVt=0lLZZ4AVLuWhFSDz(y6v8?S?ShO6eZ z^bTJ~q^8+r6!FO6Awuc-pjfS3+dOM~{LucM5Gj23>M%7OCl!v4d1g)b5B;|@JKoxZ zrOd$|2P#o#_uAJ`Bdv;gu(*FtE96biFUmWx(At)fRm^Im?{IHFz+4>gMUtXoxOtG9 zUtk0xO5my1NKbf}hMHO{1?AC#^FZ^YiLI&0$ws3bL9`Rv{_D9jQH++awRWJwa%_d| ziXNpg$zRweQ8@yZ5E_&~hK5Kvsx+bR&{k!+ncQI;$Bu zpNxGzUMN$L=R-o|0a5pbX0JM-@E)H(xpIad3Il9dC-Y=IJ{Rxm46;9=YpVM8y4uzX zb58@S#6>%jM!CqV*H0?Ukd8!3-04ZI59nfvRFC`I0(F*bfeMoajJ>h)QKTwbS(D<(0Be+*5>wTcaO%Mxu1^tGk82-*Cfv#4oHy#@|(v2G)e#nFZA|Jq4176`%TubUxhoscInISFpY|3ulZ-=4DG)*^eA zlJcMVYxOsGU5r!2=q)gX%{n;s3;bQs=wclyH0VRYF=GG6M!GYI<|Lz0EcCraR9CxOpLD(lM-+m{O3%Hv;-xQ@Dyt6-E2RuK7 zOVKBgPWX5`6AK7(2zcL;Lb&a15ugyi-iQZZ_HuCz2aUf+ssgV5zIP?tdy4dPU=jWo z;Oy1{UImpL#K+}-nNO(4BZR@*BjlKq?>=uXaAIpaC%)G73KTQQ7AMV%*UCn$!&_XQh#jzXy5*5XkRZrytuCg zSAgp0t#F7?@aavs)Hw1lI@!cNb~E?$#R*Dy>=CNKH*QnNx7)$agYe;lch%$150DhT zb<8+gUL^1dNs&PQe){Khf%+92dt9`OTd4~OK6c%c>x=SUXn%fAtzx48uLp{4CiVY* zpeSU=ZB}QM{Qofxq-ClY908D!^aUaOdeQ64yv7C@JcF_|SAX^wx-s7-eP5b-iY`|$ z65h4Q%XWQY!A@nJfr1Qna|5!cbOcaK~lF=xOtNgwMYPTDqhmEO=g>K zFJQ~W*UY;ID{Exx!=6=5{VbKDtB5*ER|jV!R~6_v@8`ZbUDBDy^~rUCZA}y}ijN!> zaMy%%ISHq~(sV3rZOQC1cTdX*mB~#K;^Sp{hq_WX^nq=2LAO$KtG#}jU y73EELqmQ<3M&mh!-a%sY@Inu;^MGREh)|w0-Wtu`bttZv*b_)D#$A$=5B?X|gM~Z* diff --git a/Скрипты/1cicd.sbsl b/Скрипты/1cicd.sbsl index 229e86b..6ff0929 100644 --- a/Скрипты/1cicd.sbsl +++ b/Скрипты/1cicd.sbsl @@ -32,6 +32,8 @@ иначе СобратьПоследнийРелиз() // Доработать на СобратьРелизНаДату() ; + когда "buildMR" + СобратьРелизДляСлияния() когда "testCore" ПротестироватьКод() когда "testUI" @@ -269,6 +271,230 @@ ; ; +метод СобратьРелизДляСлияния() + знч WP = СредаИсполнения.ПолучитьПеременную("WP") + + знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID") + знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN") + знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR") + знч CI_PROJECT_ID = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_ID") + знч CI_PROJECT_PATH = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_PATH") + знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE") + знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST") + + знч RELEASES_TOKEN = СредаИсполнения.ПолучитьПеременную("RELEASES_TOKEN") + + пер ошибкиТокенов = "" + если RELEASES_TOKEN.Пусто() + ошибкиТокенов += "В переменную RELEASES_TOKEN необходимо поместить api token репозитория Релизов." + Символы.НоваяСтрока + ; + + знч настройки = ПрочитатьНастройкиСборки("%CI_PROJECT_DIR") + + если СредаИсполнения.ПолучитьПеременную(настройки.Конфигурация.ПеременнаяТокена).Пусто() + ошибкиТокенов += "В переменную %{настройки.Конфигурация + .ПеременнаяТокена} необходимо поместить read api token репозитория %{настройки.Конфигурация.Имя}." + Символы.НоваяСтрока + ; + для репозиторийРасширения из настройки.ПрикладныеРасширения + если СредаИсполнения.ПолучитьПеременную(репозиторийРасширения.ПеременнаяТокена).Пусто() + ошибкиТокенов += "В переменную %{репозиторийРасширения + .ПеременнаяТокена} необходимо поместить read api token репозитория %{репозиторийРасширения.Имя}." + + Символы.НоваяСтрока + ; + ; + для репозиторийРасширения из настройки.ТестовыеРасширения + если СредаИсполнения.ПолучитьПеременную(репозиторийРасширения.ПеременнаяТокена).Пусто() + ошибкиТокенов += "В переменную %{репозиторийРасширения + .ПеременнаяТокена} необходимо поместить read api token репозитория %{репозиторийРасширения.Имя}." + + Символы.НоваяСтрока + ; + ; + + если не ошибкиТокенов.Пусто() + выбросить новый ИсключениеНедопустимоеСостояние(ошибкиТокенов) + ; + + знч полныйПутьПрикладнойСборки = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ" + знч полныйПутьТестовойСборки = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_ТЕСТОВОЙ_СБОРКИ" + + Консоль.Записать("Создать каталог: %полныйПутьПрикладнойСборки") + Файлы.СоздатьКаталог(полныйПутьПрикладнойСборки) + + Консоль.Записать("Создать каталог: %полныйПутьТестовойСборки") + Файлы.СоздатьКаталог(полныйПутьТестовойСборки) + + знч полныйПутьСлужебнойСборки = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ" + Консоль.Записать("Создать каталог: %полныйПутьСлужебнойСборки") + Файлы.СоздатьКаталог(полныйПутьСлужебнойСборки) + + знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройки + .Конфигурация + .Имя}.git" + Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{настройки.Конфигурация.Ветка}") + Git_Clone(адресРепозиторияКонфигурации, настройки.Конфигурация.Ветка) + + знч путьКонфигурацииЕДТ = "%CI_PROJECT_DIR/%{настройки.Конфигурация.Имя}/%{настройки.Конфигурация.Проект}" + Консоль.Записать("ИсполняемыйФайлПлатформы: %путьКонфигурацииЕДТ") + знч исполняемыйФайлПлатформы = ИсполняемыйФайлПлатформы(путьКонфигурацииЕДТ) + + знч путьИБ = "%CI_PROJECT_DIR/temp/db" + Консоль.Записать("CreateInfobase: %путьИБ %исполняемыйФайлПлатформы") + CreateInfobase(путьИБ, исполняемыйФайлПлатформы) + + знч имяРепозиторияРелизов = "%CI_PROJECT_NAMESPACE\%2Freleases" + Консоль.Записать("Releases_LastDate: %имяРепозиторияРелизов %CI_SERVER_HOST") + знч датаПоследнегоРелиза = Releases_LastDate(имяРепозиторияРелизов, RELEASES_TOKEN, CI_SERVER_HOST) + Консоль.Записать("Дата последнего релиза = %датаПоследнегоРелиза") + + знч запросНаСлияние = ПараметрыЗапросаНаСлияние() + + пер пересобиратьОсновнуюКонфигурацию = Ложь + пер репозиторииДляПересборки = новый Массив() + пер путиСборки = новый Соответствие() + + если настройки.Конфигурация.Имя == запросНаСлияние.имяПроекта + пересобиратьОсновнуюКонфигурацию = Истина + иначе + знч результатПроверки = ПроверитьКоммитыРепозиторияДляПоследнегоРелиза(настройки.Конфигурация, датаПоследнегоРелиза) + если результатПроверки != Неопределено + пересобиратьОсновнуюКонфигурацию = Истина + + иначе + если не СкачатьАртефактРепозитория(настройки.Конфигурация, ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ, Ложь) + пересобиратьОсновнуюКонфигурацию = Истина + ; + ; + ; + + для репозиторийРасширения из настройки.ПрикладныеРасширения + путиСборки.Вставить(репозиторийРасширения.Имя, полныйПутьПрикладнойСборки) + + если репозиторийРасширения.Имя == запросНаСлияние.имяПроекта + репозиторииДляПересборки.Добавить(репозиторийРасширения) + иначе + знч результатПроверкиРасширения = ПроверитьКоммитыРепозиторияДляПоследнегоРелиза(репозиторийРасширения, датаПоследнегоРелиза) + если результатПроверкиРасширения != Неопределено + репозиторииДляПересборки.Добавить(репозиторийРасширения) + + иначе + если не СкачатьАртефактРепозитория(репозиторийРасширения, ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ, Истина) + репозиторииДляПересборки.Добавить(репозиторийРасширения) + ; + ; + + если настройки.Конфигурация.Имя == запросНаСлияние.имяПроекта + пересобиратьОсновнуюКонфигурацию = Истина + ; + ; + ; + + для репозиторийРасширения из настройки.ТестовыеРасширения + путиСборки.Вставить(репозиторийРасширения.Имя, полныйПутьТестовойСборки) + + если репозиторийРасширения.Имя == запросНаСлияние.имяПроекта + репозиторииДляПересборки.Добавить(репозиторийРасширения) + иначе + знч результатПроверкиРасширения = ПроверитьКоммитыРепозиторияДляПоследнегоРелиза(репозиторийРасширения, датаПоследнегоРелиза) + если результатПроверкиРасширения != Неопределено + репозиторииДляПересборки.Добавить(репозиторийРасширения) + + иначе + если не СкачатьАртефактРепозитория(репозиторийРасширения, ИМЯ_КАТАЛОГА_ТЕСТОВОЙ_СБОРКИ, Истина) + репозиторииДляПересборки.Добавить(репозиторийРасширения) + ; + ; + ; + ; + + если не пересобиратьОсновнуюКонфигурацию и репозиторииДляПересборки.Пусто() + Консоль.Записать("Jobs_Cancel: %CI_JOB_ID %CI_PROJECT_ID %CI_SERVER_HOST") + Jobs_Cancel(CI_JOB_ID, CI_PROJECT_ID, RELEASES_TOKEN, CI_SERVER_HOST) + возврат + ; + + знч файлКонфигурации = "%полныйПутьПрикладнойСборки/1cv8.cf" + если пересобиратьОсновнуюКонфигурацию + знч путьКонфигурацииПлатформы = "%CI_PROJECT_DIR/temp/src_%{настройки.Конфигурация.Имя}" + Консоль.Записать("WorkspaceExport: %путьКонфигурацииЕДТ %путьКонфигурацииПлатформы %WP") + WorkspaceExport(путьКонфигурацииЕДТ, путьКонфигурацииПлатформы, WP, ВЕРСИЯ_EDT) + + попытка + знч файлПоставки = "%путьКонфигурацииПлатформы/Ext/ParentConfigurations.bin" + Консоль.Записать("Удалить файл: %файлПоставки") + Файлы.Удалить(файлПоставки) + поймать исключение: любой + Консоль.Записать("Было исключение %исключение") + ; + попытка + знч каталогПоставки = "%путьКонфигурацииПлатформы/Ext/ParentConfigurations" + Консоль.Записать("Удалить каталог: %каталогПоставки") + Файлы.Удалить(каталогПоставки) + поймать исключение: любой + Консоль.Записать("Было исключение %исключение") + ; + + Консоль.Записать("LoadConfigFromFiles: %путьКонфигурацииПлатформы %путьИБ %исполняемыйФайлПлатформы") + LoadConfigFromFiles(путьКонфигурацииПлатформы, путьИБ, исполняемыйФайлПлатформы) + + Консоль.Записать("UpdateDBCfg: %путьИБ %исполняемыйФайлПлатформы") + UpdateDBCfg(путьИБ, исполняемыйФайлПлатформы) + + Консоль.Записать("CreateDistributionFiles: %файлКонфигурации %путьИБ %исполняемыйФайлПлатформы") + CreateDistributionFiles(файлКонфигурации, путьИБ, исполняемыйФайлПлатформы) + иначе + Консоль.Записать("LoadCfg: %файлКонфигурации %путьИБ %исполняемыйФайлПлатформы") + LoadCfg(файлКонфигурации, путьИБ, исполняемыйФайлПлатформы) + + Консоль.Записать("UpdateDBCfg: %путьИБ %исполняемыйФайлПлатформы") + UpdateDBCfg(путьИБ, исполняемыйФайлПлатформы) + ; + + для репозиторий из репозиторииДляПересборки + знч адресРепозитория = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{репозиторий + .Имя}.git" + Консоль.Записать("Git_Clone: %адресРепозитория %{репозиторий.Ветка}") + Git_Clone(адресРепозитория, репозиторий.Ветка) + + пер путьРасширенияЕДТ = "%CI_PROJECT_DIR/%{репозиторий.Имя}/%{репозиторий.Проект}" + если не (новый Файл(путьРасширенияЕДТ)).Существует() + путьРасширенияЕДТ = "%CI_PROJECT_DIR/%{репозиторий.Имя}/%{настройки.Конфигурация.Проект}.%{репозиторий + .Проект}" + ; + знч путьРасширенияПлатформы = "%CI_PROJECT_DIR/temp/src_%{репозиторий.Имя}" + Консоль.Записать("WorkspaceExport: %путьРасширенияЕДТ %путьРасширенияПлатформы %WP") + WorkspaceExport(путьРасширенияЕДТ, путьРасширенияПлатформы, WP, ВЕРСИЯ_EDT) + + Консоль.Записать("LoadExtFromFiles: %путьРасширенияПлатформы %{репозиторий.Проект} %{путьИБ} %исполняемыйФайлПлатформы") + LoadExtFromFiles(путьРасширенияПлатформы, репозиторий.Проект, путьИБ, исполняемыйФайлПлатформы) + + Консоль.Записать("UpdateDBExt: %путьИБ %исполняемыйФайлПлатформы") + UpdateDBExt(репозиторий.Проект, путьИБ, исполняемыйФайлПлатформы) + + знч путьСборкиРасширения = путиСборки.Получить(репозиторий.Имя) + знч файлРасширения = "%путьСборкиРасширения/%{репозиторий.Проект}.cfe" + Консоль.Записать("DumpDBExt: %файлРасширения %{репозиторий.Проект} %путьИБ %исполняемыйФайлПлатформы") + DumpExt(файлРасширения, репозиторий.Проект, путьИБ, исполняемыйФайлПлатформы) + ; + + пер списокДвоичныхФайлов = новый Массив() + знч каталогСборкиПроекта = новый Файл(CI_PROJECT_DIR) + для файл из Файлы.Найти(ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ) + знч путьВнутриСборки = файл.Путь.Удалить(каталогСборкиПроекта.Путь) + списокДвоичныхФайлов.Добавить(путьВнутриСборки) + ; + знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_bin.json" + Консоль.Записать("ЗаписатьОписаниеАссетов: %имяФайлаАссетов %CI_PROJECT_PATH %CI_JOB_ID") + ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокДвоичныхФайлов) + + знч логФайлыРабочейОбласти = "%WP/.metadata/" + пер настройкиПоиска = новый НастройкиПоискаФайлов() + настройкиПоиска.ИмяСодержит(".log") + для файл из Файлы.Найти(логФайлыРабочейОбласти, настройкиПоиска) + Консоль.Записать("Удалить файл: %{файл.Путь}") + Файлы.Удалить(файл) + ; +; + метод ПротестироватьКод() знч WP = СредаИсполнения.ПолучитьПеременную("WP") @@ -295,6 +521,8 @@ Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов") Файлы.СоздатьКаталог(полныйПутьРезультатовТестов) + Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов/junit") + Файлы.СоздатьКаталог("%полныйПутьРезультатовТестов/junit") знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройки .Конфигурация @@ -307,9 +535,15 @@ Консоль.Записать("WorkspaceValidate: %файлРезультатовВалидации %путьКонфигурацииЕДТ %WP") WorkspaceValidate(файлРезультатовВалидации, путьКонфигурацииЕДТ, WP, ВЕРСИЯ_EDT) + знч данныеОшибок = ОшибкиВФорматеSonarCube(файлРезультатовВалидации) + знч файлSonarQube = "%полныйПутьРезультатовТестов/%{настройки.Конфигурация.Имя}.json" - Консоль.Записать("ПреобразоватьОшибкиВФорматSonarCube: %файлSonarQube %файлРезультатовВалидации") - ПреобразоватьОшибкиВФорматSonarCube(файлSonarQube, файлРезультатовВалидации) + Консоль.Записать("ЗаписатьОшибкиВФорматSonarCube: %файлSonarQube %файлРезультатовВалидации") + ЗаписатьОшибкиВФорматSonarCube(файлSonarQube, данныеОшибок) + + знч файлJunit = "%полныйПутьРезультатовТестов/junit/%{настройки.Конфигурация.Имя}.xml" + Консоль.Записать("ЗаписатьОшибкиВФорматJUnit: %файлJunit %файлРезультатовВалидации") + ЗаписатьОшибкиВФорматJUnit(файлJunit, данныеОшибок) если не настройки.СерверSonarQube.Пусто() знч файлПараметровСканера = "%CI_PROJECT_DIR/sonar-project-%{настройки.Конфигурация.Имя}.properties" @@ -404,6 +638,12 @@ пер Пользователи: Массив ; +перечисление VAParamsСпособыСнятияСкриншотовВнешнейКомпонентой + ВесьЭкран умолчание // 0 + ТекущееОкноКлиентаТестирования // 1 + ВсеОкнаКлиентаТестирования // 2 +; + структура VAParams пер КаталогПроекта: Строка пер КаталогФич: Строка @@ -426,6 +666,11 @@ пер ИспользоватьКомпонентуVanessaExt: Булево = Истина пер ТихаяУстановкаVanessaExt: Булево = Истина + пер ИспользоватьВнешнююКомпонентуДляСкриншотов: Булево = Истина + пер СпособСнятияСкриншотовВнешнейКомпонентой: Число = 2 // VAParamsСпособыСнятияСкриншотовВнешнейКомпонентой + пер ДелатьСкриншотПриВозникновенииОшибки: Булево = Истина + пер СниматьСкриншотКаждогоОкна1С: Булево = Ложь + пер КаталогВыгрузкиСкриншотов: Строка = "" пер ВыполнениеСценариев: VAParamsВыполнениеСценариев @@ -451,7 +696,10 @@ структура VAParamsКлиентТестирования пер ЗапускатьКлиентТестированияСМаксимизированнымОкном: Булево = Истина + пер ЗакрыватьКлиентТестированияПринудительно: Булево = Истина + пер ТаймаутПередПринудительнымЗакрытиемКлиентаТестирования: Число = 10 пер ДиапазонПортовTestclient: Строка = "" + пер ТаймаутЗапуска1С: Число = 25 конструктор() конструктор(ДиапазонПортовTestclient) @@ -690,11 +938,13 @@ пер настройкиVAParamsВыполнениеСценариев = новый VAParamsВыполнениеСценариев() пер настройкиVAParamsКлиентТестирования = новый VAParamsКлиентТестирования("%начальныйПорт-%конечныйПорт") + настройкиVAParamsКлиентТестирования.ТаймаутЗапуска1С = 60 пер настройкиVAParamsОтчетAllure = новый VAParamsОтчетAllure(каталогВыгрузкиAllure, каталогФич) - пер настройкиVAParamsОтчетJUnit = новый VAParamsОтчетJUnit("%полныйПутьРезультатовТестов/junit") + пер настройкиVAParamsОтчетJUnit = новый VAParamsОтчетJUnit(Файлы.СоздатьКаталог("%временныйКаталогИБ/junit").Путь) пер настройкиVAParams = новый VAParams(каталогПроекта, каталогФич, ["%CI_VA/steps"], настройкиVAParamsВыполнениеСценариев, настройкиVAParamsКлиентТестирования, настройкиVAParamsОтчетAllure, настройкиVAParamsОтчетJUnit) + настройкиVAParams.КаталогВыгрузкиСкриншотов = Файлы.СоздатьКаталог("%временныйКаталогИБ/screenShots").Путь знч временныйФайлНастроекVA = Файлы.Создать("%временныйКаталогИБ/VAParams.json") исп потокНастроекVA = временныйФайлНастроекVA.ОткрытьПотокЗаписи() @@ -717,6 +967,13 @@ ОбработатьЗавершениеКомандыПлатформы(командаПлатформы) ; + пер индекс = 1 + для пользователь из настройки.Шаблоны.Пользователи + пер временныйКаталогИБ = временныеИБПользователей.Получить(пользователь.Представление) + Файлы.Скопировать("%временныйКаталогИБ/junit/junit.xml", "%полныйПутьРезультатовТестов/junit/junit-%индекс.xml") + индекс += 1 + ; + AllureGenerate(настройки) ; @@ -937,7 +1194,7 @@ метод СкачатьАртефактРепозитория(репозиторий: ОписаниеРепозитория, путьСборки: Строка, расширение: Булево): Булево знч CI_COMMIT_REF_SLUG = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_REF_SLUG") - знч CI_PROJECT_ID = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_ID") + знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE") знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST") знч RELEASES_TOKEN = СредаИсполнения.ПолучитьПеременную("RELEASES_TOKEN") @@ -947,9 +1204,11 @@ имяФайла = "%путьСборки/%{репозиторий.Проект}.cfe" ; + знч имяРепозиторияРелизов = "%CI_PROJECT_NAMESPACE\%2Freleases" + Консоль.Записать( - "JobArtifacts_DownloadFile: %имяФайла build %CI_COMMIT_REF_SLUG %CI_PROJECT_ID %CI_SERVER_HOST") - возврат JobArtifacts_DownloadFile(имяФайла, "build", CI_COMMIT_REF_SLUG, CI_PROJECT_ID, RELEASES_TOKEN, + "JobArtifacts_DownloadFile: %имяФайла build %CI_COMMIT_REF_SLUG %имяРепозиторияРелизов %CI_SERVER_HOST") + возврат JobArtifacts_DownloadFile(имяФайла, "build", CI_COMMIT_REF_SLUG, имяРепозиторияРелизов, RELEASES_TOKEN, CI_SERVER_HOST) ; @@ -970,7 +1229,7 @@ структура ОписаниеРепозитория знч Имя: Строка - знч Ветка: Строка + пер Ветка: Строка знч Проект: Строка знч ПеременнаяТокена: Строка @@ -979,7 +1238,32 @@ ; +структура ОписаниеЗапросаНаСлияние + знч имяПроекта: Строка + знч веткаПроекта: Строка +; + +метод ПараметрыЗапросаНаСлияние(): ОписаниеЗапросаНаСлияние|Неопределено + знч CI_MERGE_REQUEST_PROJECT_PATH = СредаИсполнения.ПолучитьПеременную("CI_MERGE_REQUEST_PROJECT_PATH") + знч CI_MERGE_REQUEST_SOURCE_BRANCH_NAME = СредаИсполнения.ПолучитьПеременную("CI_MERGE_REQUEST_SOURCE_BRANCH_NAME") + знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE") + + если CI_MERGE_REQUEST_PROJECT_PATH.Пусто() + возврат Неопределено + ; + + знч имяПроектаСлияния = CI_MERGE_REQUEST_PROJECT_PATH.Заменить("%CI_PROJECT_NAMESPACE/", "") + + возврат новый ОписаниеЗапросаНаСлияние(имяПроектаСлияния, CI_MERGE_REQUEST_SOURCE_BRANCH_NAME) +; + метод ПрочитатьНастройкиСборки(путьОписанияНастроек: Строка): ОписаниеНастроекСборки + знч запросНаСлияние = ПараметрыЗапросаНаСлияние() + + если запросНаСлияние != Неопределено + Консоль.Записать("ЗапросНаСлияние: %{запросНаСлияние.имяПроекта} %{запросНаСлияние.веткаПроекта}") + ; + пер файлОписанияНастроек = ".1cicd.json" если не путьОписанияНастроек.Пусто() файлОписанияНастроек = "%путьОписанияНастроек/.1cicd.json" @@ -993,9 +1277,21 @@ пер настройки = СериализацияJson.ПрочитатьОбъект(поток, Тип(ОписаниеНастроекСборки), настройкиJson) как ОписаниеНастроекСборки + если запросНаСлияние != Неопределено + если настройки.Конфигурация.Имя == запросНаСлияние.имяПроекта + настройки.Конфигурация.Ветка = запросНаСлияние.веткаПроекта + ; + ; + пер прикладныеРасширения = новый Массив() для репозиторийРасширения из настройки.ПрикладныеРасширения - знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], репозиторийРасширения["Ветка"], репозиторийРасширения["Проект"], + пер веткаРасширения = репозиторийРасширения["Ветка"] + если запросНаСлияние != Неопределено + если репозиторийРасширения["Имя"] == запросНаСлияние.имяПроекта + веткаРасширения = запросНаСлияние.веткаПроекта + ; + ; + знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], веткаРасширения, репозиторийРасширения["Проект"], репозиторийРасширения["ПеременнаяТокена"]) прикладныеРасширения.Добавить(описание) ; @@ -1003,7 +1299,13 @@ пер тестовыеРасширения = новый Массив() для репозиторийРасширения из настройки.ТестовыеРасширения - знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], репозиторийРасширения["Ветка"], репозиторийРасширения["Проект"], + пер веткаРасширения = репозиторийРасширения["Ветка"] + если запросНаСлияние != Неопределено + если репозиторийРасширения["Имя"] == запросНаСлияние.имяПроекта + веткаРасширения = запросНаСлияние.веткаПроекта + ; + ; + знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], веткаРасширения, репозиторийРасширения["Проект"], репозиторийРасширения["ПеременнаяТокена"]) тестовыеРасширения.Добавить(описание) ; @@ -1011,8 +1313,13 @@ пер сценарныеТесты = новый Массив() для репозиторийТестов из настройки.СценарныеТесты - знч описание = новый ОписаниеРепозитория(репозиторийТестов["Имя"], репозиторийТестов["Ветка"], - репозиторийТестов["ПеременнаяТокена"]) + пер веткаТестов = репозиторийТестов["Ветка"] + если запросНаСлияние != Неопределено + если репозиторийТестов["Имя"] == запросНаСлияние.имяПроекта + веткаТестов = запросНаСлияние.веткаПроекта + ; + ; + знч описание = новый ОписаниеРепозитория(репозиторийТестов["Имя"], веткаТестов, репозиторийТестов["ПеременнаяТокена"]) сценарныеТесты.Добавить(описание) ; настройки.СценарныеТесты = сценарныеТесты @@ -1629,13 +1936,61 @@ выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки) ; -метод ПреобразоватьОшибкиВФорматSonarCube(файлSonarQube: Строка, файлРезультатовВалидации: Строка) +метод ЗаписатьОшибкиВФорматSonarCube(файлSonarQube: Строка, данныеОшибок: SonarqubeGenericFormat) знч файлПараметров = новый Файл(файлSonarQube) исп поток = файлПараметров.ОткрытьПотокЗаписи() - знч данные = ОшибкиВФорматеSonarCube(файлРезультатовВалидации) + СериализацияJson.ЗаписатьОбъект(поток, данныеОшибок) +; + +метод ЗаписатьОшибкиВФорматJUnit(файлJUnit: Строка, данныеОшибок: SonarqubeGenericFormat) + знч файлПараметров = новый Файл(файлJUnit) + исп поток = файлПараметров.ОткрытьПотокЗаписи() + + пер записьXML = новый ЗаписьXml(поток) + + пер количествоОшибок = 0 + для ошибка из данныеОшибок.issues + если ошибка.type == SonarqubeType.BUG + количествоОшибок += 1 + ; + ; + + записьXML.ЗаписатьНачалоДокумента() + + записьXML.ЗаписатьНачалоЭлемента("testsuites") + записьXML + .ЗаписатьНачалоЭлемента("testsuite") + .ЗаписатьАтрибут("name", "EDT Workspace Validate") + .ЗаписатьАтрибут("errors", Строка(количествоОшибок)) + .ЗаписатьАтрибут("skipped", "0") + .ЗаписатьАтрибут("tests", Строка(количествоОшибок)) + .ЗаписатьАтрибут("failures", "0") + .ЗаписатьАтрибут("time", "0") + + для ошибка из данныеОшибок.issues + если ошибка.type != SonarqubeType.BUG + продолжить + ; + записьXML + .ЗаписатьНачалоЭлемента("testcase") + .ЗаписатьАтрибут("name", ошибка.ruleId) + .ЗаписатьАтрибут("classname", ошибка.primaryLocation.filePath) + .ЗаписатьАтрибут("time", "0") + + записьXML + .ЗаписатьНачалоЭлемента("error") + .ЗаписатьТекст("%{ошибка.primaryLocation.message}\в\нСтрока: %{ошибка.primaryLocation.textRange.startLine}") + .ЗаписатьКонецЭлемента() + + записьXML.ЗаписатьКонецЭлемента() + ; + + записьXML.ЗаписатьКонецЭлемента() + записьXML.ЗаписатьКонецЭлемента() + + записьXML.ЗаписатьКонецДокумента() - СериализацияJson.ЗаписатьОбъект(поток, данные) ; метод ОшибкиВФорматеSonarCube(файлРезультатовВалидации: Строка): SonarqubeGenericFormat