jenkinsfile.get.and.sync.dict 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. def CLUSTER = [ gost: 'iru-swarm1.infoclinica.lan', open: 'iru-swarm1-open.infoclinica.ru' ]
  2. def FTP = [
  3. helix: 'ftp://ex2.helix.ru/Dictionaries/*',
  4. cmd: 'ftp://cmd.infoclinica.lan/nsi/*',
  5. gemotest: 'ftp://ftp.gemotest.ru/services/*'
  6. ]
  7. def HELIXNAMES = [
  8. labMSK: [ id: '990010000000017', dir: 'HelixMSK/Files/Dictionaries', user: 'TestDictMsk', pass: 'kO3R20eK' ],
  9. labSPB: [ id: '990010000000013', dir: 'HelixSPB/Files/Dictionaries', user: 'TestDictSpb', pass: '8686Giq0' ],
  10. labNSB: [ id: '990010000000020', dir: 'HelixNSB/Files/Dictionaries', user: 'TestDictNvsb', pass: '511bLPm3' ],
  11. labPNZ: [ id: '990010000000021', dir: 'HelixPNZ/Files/Dictionaries', user: 'TestDictPnz', pass: 'IgK~66Ff' ],
  12. labEKB: [ id: '990010000000019', dir: 'HelixEKB/Files/Dictionaries', user: 'TestDictEkb', pass: 'Fp5LMnKW' ],
  13. labNSK: [ id: '990010000000022', dir: 'HelixNSK/Files/Dictionaries', user: 'TestDictNor', pass: 'jq9xd6sY' ],
  14. labHBR: [ id: '990010000000018', dir: 'HelixHBR/Files/Dictionaries', user: 'TestDictHab', pass: 'idTf4WkE' ],
  15. clinicRAN: [ id: '990010000001898', dir: 'HelixSPB/Files/Dictionaries/RAN', user: 'ran', pass: '7vFal2JBsC' ],
  16. clinicONA: [ id: '990010000004936', dir: 'HelixSPB/Files/Dictionaries/ONA', user: 'ona', pass: 'svn2CD3KkL' ],
  17. clinicBaltMed: [ id: '990010000002030', dir: 'HelixSPB/Files/Dictionaries/BaltMed', user: 'SpbMServ', pass: '1tMi8jRz' ],
  18. // clinicSPom: [ id: '990010000013379', dir: 'HelixSPB/Files/Dictionaries/SkorayaPom', user: 'SpbSkorayaPom', pass: '8$c%%Vo46' ],
  19. clinicMedlux: [ id: '990010000013413', dir: 'HelixMSK/Files/Dictionaries/Medlux_mostfarm', user: 'MskMedlux', pass: 'Zn8hede7' ],
  20. clinicAskona: [ id: '990010000004940', dir: 'HelixMSK/Files/Dictionaries/Askona', user: 'MskPMK', pass: 'QdFQIF68' ],
  21. clinicDR: [ id: '990010000002008', dir: 'HelixMSK/Files/Dictionaries/DR', user: 'MskDoctorRyadom', pass: 'iqBn0gIa' ],
  22. clinicBZ: [ id: '990010000001881', dir: 'HelixMSK/Files/Dictionaries/BZ', user: 'MskClinicLMS', pass: '1npZfzex' ],
  23. // clinicTemp: [ id: '990010000013661', dir: 'HelixMSK/Files/Dictionaries/Temp', user: 'MskTemp', pass: 'Hoch9is%%' ],
  24. // clinicBZ_EKB: [ id: '990010000013445', dir: 'HelixEKB/Files/Dictionaries/BZ_Ekb', user: 'EkbBudZdorov', pass: '0Qk^&8Ko%%' ],
  25. clinicSova: [ id: '990010000004941', dir: 'HelixMSK/Files/Dictionaries/Sova', user: 'MskSova', pass: 'ehCPz9mx' ],
  26. clinicProfMed: [ id: '990010000004939', dir: 'HelixNSB/Files/Dictionaries/ProfMed', user: 'SpbProfMedUfa', pass: 'djZ6rA1T' ],
  27. clinicMedisPlus: [ id: '990010000013458', dir: 'HelixNSB/Files/Dictionaries/MedisPlusKlinika', user: 'SpbKlinikaPskov', pass: '@3Sj*7St' ],
  28. clinicMotherhood: [ id: '990010000013673', dir: 'HelixPNZ/Files/Dictionaries/Materinstvoidetstvo', user: 'MskMaterinstvoIDetst', pass: 'ZCPuzbw8' ]
  29. /* clinicMskDomNaTverskoy: [ id: '990010000013837', dir: 'HelixMSK/Files/Dictionaries/DomNaTverskoy', user: 'MskDomNaTverskoy', pass: '83gQlPPL' ],
  30. clinicMskProfMedLab: [ id: '990010000013850', dir: 'HelixMSK/Files/Dictionaries/profmedlab', user: 'MskProfMedLab', pass: 'The)ais3' ],
  31. clinicRGSU: [ id: '990010000013852', dir: 'HelixMSK/Files/Dictionaries/RGSU', user: 'MskRGSU', pass: 'TPnYb3OT' ],
  32. clinicISH: [ id: '990010000013838', dir: 'HelixMSK/Files/Dictionaries/ISH', user: 'MskInvMedHol', pass: '1Uw76Ef#' ],
  33. clinicKomsomolsky: [ id: '990010000013842', dir: 'HelixMSK/Files/Dictionaries/komsomolsky', user: 'MskAlfa', pass: 'iQjw0OWh' ],
  34. clinicMedekspert: [ id: '990010000013840', dir: 'HelixMSK/Files/Dictionaries/medekspert', user: 'MskMedexpertP', pass: 'wA3My!0J' ],
  35. clinicMedscan: [ id: '990010000013843', dir: 'HelixMSK/Files/Dictionaries/Medscan', user: 'MskMedscan', pass: 'd#8Ug@7E' ],
  36. clinicStatusGracy: [ id: '990010000013855', dir: 'HelixSPB/Files/Dictionaries/StatusGracy', user: 'SpbStatGracP', pass: 'Qb#4Ir*1' ],
  37. clinicDavinchigrup: [ id: '990010000013845', dir: 'HelixPNZ/Files/Dictionaries/Davinchigrup', user: 'MskDaVinchi', pass: 'uGh9re)u' ],
  38. clinicSadko: [ id: '990010000013846', dir: 'HelixPNZ/Files/Dictionaries/Sadko', user: 'MskSadko', pass: 'VOTdPC3A' ]
  39. */]
  40. def INVITRONAMES = [
  41. labMSK: [ id: '990010000000002', dir: 'InvitroMSK/Files/Dictionaries' ],
  42. labCHLB: [ id: '990010000000032', dir: 'InvitroCHLB/Files/Dictionaries' ],
  43. labSMR: [ id: '990010000000031', dir: 'InvitroSMR/Files/Dictionaries' ],
  44. labSPB: [ id: '990010000000030', dir: 'InvitroSPB/Files/Dictionaries' ],
  45. labNSB: [ id: '990010000000033', dir: 'InvitroNSB/Files/Dictionaries' ]
  46. ]
  47. def ALFANAMES = [
  48. /* DNKOM: [ id: '990010000000041' ],
  49. Dialab: [ id: '990010000000024' ],
  50. LabQuest: [ id: '990010000000034'],
  51. */ Arhimed: [ id: '990010000000041', dir: 'Arhimed/Files/Dictionaries' ]
  52. ]
  53. def GEMOTEST = [ id: '990010000000014', dir: 'GemoTest/Files/Dictionaries', user: 'a_info', pass: 'Ainfo150916' ]
  54. /* def LITEH = [ id: '990010000000026' ]
  55. def NAKFF = [ id: '990010000000004' ]
  56. */ def CMD = [ id: '990010000000003', dir: 'CMD/Files/Dictionaries', user: 'SDSIntegration', pass: 'RK5CLTr77' ]
  57. //def KDL = [ id: '990010000000001' ]
  58. pipeline {
  59. agent {
  60. label "swarm"
  61. }
  62. environment {
  63. JENKINS_MAIL='jenkins.dev@sdsys.ru'
  64. SMTP_SERVER='mail.sdsys.ru'
  65. DOCKER_CERT_PATH='/run/secrets/swarm'
  66. OPEN_CLUSTER='iru-swarm1-open.infoclinica.ru'
  67. PROD_CLUSTER='iru-swarm1.infoclinica.lan'
  68. WGET_IMAGE='inutano/wget'
  69. SYNC_IMAGE='registry.infoclinica.ru:5000/syncmanager:i686.f30-0.1'
  70. ANALIS_IMAGE='registry.infoclinica.ru:5000/lab/analis-wineservice:stable'
  71. mailto='admin@sdsys.ru'
  72. }
  73. stages {
  74. /* stage ("HELIX dictionaries") {
  75. steps {
  76. script {
  77. HELIXNAMES.each { key, value ->
  78. echo "Get dictionaries for $key"
  79. sh """export DOCKER_HOST=tcp://$CLUSTER.open:2376 DOCKER_TLS_VERIFY=1
  80. docker run --rm -i -v analis-wineservice_analis_Files_netapp:/services/ ${WGET_IMAGE} \
  81. /bin/ash -c ' \
  82. rm -fv /services/$value.dir/*.xml; \
  83. wget -P /services/$value.dir --user="$value.user" --password="$value.pass" $FTP.helix'
  84. """
  85. echo "Syncing dictionaries for $key"
  86. def log_dir = value.dir.replace("Files", "LOGS")
  87. log_dir = log_dir.replace("/", "\\")
  88. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  89. docker create -name sync -i \
  90. -v analis-wineservice_analis_Files_netapp:/root/wine32/drive_c/services/analis \
  91. --network=labnetwork ${SYNC_IMAGE} -a prod_lab -e "$value.id" \
  92. -logfile "C:\Services\Analis\$log_dir\syncmanager_#.log"
  93. docker cp infodent.ini sync:/opt/syncmanager/infodent.ini
  94. docker start -i sync
  95. docker rm sync
  96. """
  97. }
  98. }
  99. }
  100. }
  101. stage ("INVITRO dictionaries") {
  102. steps {
  103. script {
  104. INVITRONAMES.each { key, value ->
  105. echo "CleanUP files for $key"
  106. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  107. docker run --rm -i -v analis-wineservice_analis_Files_netapp:/services/ ${WGET_IMAGE} \
  108. /bin/ash -c ' \
  109. rm -fv /services/$value.dir/*.xml'
  110. """
  111. echo "Get dictionaries for $key"
  112. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  113. docker create -i --name get \
  114. -v analis-wineservice_analis_Files_netapp:/root/.wine/dosdevices/unc/samba.infoclinica.lan/smartdelta01 \
  115. --network=labnetwork -e DEBUG=false \
  116. -e LOGPATH=/root/.wine/dosdevices/unc/samba.infoclinica.lan/smartdelta01/$value.dir \
  117. ${ANALISE_IMAGE} -SyncRefInterval=1 LabSystems=$value.id /nocycle
  118. docker cp infodent.ini get:/opt/analis/infodent.ini
  119. docker cp analis.conf get:/opt/analis/analis.conf
  120. docker start -i get
  121. docker rm get
  122. """
  123. echo "Syncing $key"
  124. def log_dir = value.dir.replace("Files", "LOGS")
  125. log_dir = log_dir.replace("/", "\\")
  126. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  127. docker create -i --name sync \
  128. -v analis-wineservice_analis_Files_netapp:/root/wine32/drive_c/services/analis \
  129. --network=labnetwork --entrypoint='' ${SYNC_IMAGE} \
  130. -c 'cd /root/wine32/drive_c/services/analis/$value.dir; \
  131. cat $(ls -1t InvitroGetExtendedProduct_*.xml | head -n1) > InvitroGetExtendedProduct.xml; \
  132. cat $(ls -1t InvitroGetInfo_*.xml | head -n1) > InvitroGetInfo.xml; \
  133. /usr/bin/xvfb-run -a wine /opt/syncmanager/SyncManager.exe -a prod_lab -e "$value.id" \
  134. -logfile "C:\Services\Analis\$log_dir\syncmanager_#.log" '
  135. docker cp infodent.ini sync:/opt/syncmanager/infodent.ini
  136. docker start -i sync
  137. docker rm sync
  138. """
  139. }
  140. }
  141. }
  142. }
  143. stage ("ALFA dictionaries") {
  144. steps {
  145. script {
  146. ALFANAMES.each { key, value ->
  147. echo "CleanUP files for $key"
  148. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  149. docker run --rm -i -v analis-wineservice_analis_Files_netapp:/services/ ${WGET_IMAGE} \
  150. /bin/ash -c ' \
  151. rm -fv /services/$value.dir/*.xml'
  152. """
  153. echo "Get dictionaries for $key"
  154. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  155. docker create -i --name get \
  156. -v analis-wineservice_analis_Files_netapp:/root/.wine/dosdevices/unc/samba.infoclinica.lan/smartdelta01 \
  157. --network=labnetwork -e DEBUG=false \
  158. -e LOGPATH=/root/.wine/dosdevices/unc/samba.infoclinica.lan/smartdelta01/$value.dir \
  159. ${ANALISE_IMAGE} -SyncRefInterval=1 LabSystems=$value.id /nocycle
  160. docker cp infodent.ini get:/opt/analis/infodent.ini
  161. docker cp analis.conf get:/opt/analis/analis.conf
  162. docker start -i get
  163. docker rm get
  164. """
  165. echo "Syncing $key"
  166. def log_dir = value.dir.replace("Files", "LOGS")
  167. log_dir = log_dir.replace("/", "\\")
  168. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  169. docker create -i --name sync \
  170. -v analis-wineservice_analis_Files_netapp:/root/wine32/drive_c/services/analis \
  171. --network=labnetwork --entrypoint='' ${SYNC_IMAGE} \
  172. -c 'cd /root/wine32/drive_c/services/analis/$value.dir; \
  173. cat $(ls -1t AlfaLabDict_*.xml | head -n1) > Alfalabdict.xml; \
  174. /usr/bin/xvfb-run -a wine /opt/syncmanager/SyncManager.exe -a prod_lab -e "$value.id" \
  175. -logfile "C:\Services\Analis\$log_dir\syncmanager_#.log" '
  176. docker cp infodent.ini sync:/opt/syncmanager/infodent.ini
  177. docker start -i sync
  178. docker rm sync
  179. """
  180. }
  181. }
  182. }
  183. }
  184. stage ("Gemotest dictionaries") {
  185. steps {
  186. script {
  187. echo "Get dictionaries for Gemotest"
  188. sh """export DOCKER_HOST=tcp://$CLUSTER.open:2376 DOCKER_TLS_VERIFY=1
  189. docker run --rm -i -v analis-wineservice_analis_Files_netapp:/services/ ${WGET_IMAGE} \
  190. /bin/ash -c ' \
  191. rm -fv /services/$GEMOTEST.dir/*.xml; \
  192. wget -P /services/$GEMOTEST.dir --user="$GEMOTEST.user" --password="$GEMOTEST.pass" $FTP.gemotest'
  193. """
  194. echo "Syncing dictionaries for Gemotest"
  195. def log_dir = GEMOTEST.dir.replace("Files", "LOGS")
  196. log_dir = log_dir.replace("/", "\\")
  197. sh """export DOCKER_HOST=tcp://$CLUSTER.open:2376 DOCKER_TLS_VERIFY=1
  198. docker create -i --name sync \
  199. -v analis-wineservice_analis_Files_netapp:/root/wine32/drive_c/services/analis \
  200. --network=labnetwork ${SYNC_IMAGE} -a prod_lab -e "$GEMOTEST.id" \
  201. -logfile "C:\Services\Analis\$log_dir\syncmanager_#.log"
  202. docker cp infodent.ini sync:/opt/syncmanager/infodent.ini
  203. docker start -i sync
  204. docker rm sync
  205. """
  206. }
  207. }
  208. }
  209. */ stage ("CMD dictionaries") {
  210. steps {
  211. script {
  212. echo "Get dictionaries for CMD"
  213. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  214. docker run --rm -i -v analis-wineservice_analis_Files_netapp:/services/ ${WGET_IMAGE} \
  215. /bin/ash -c ' \
  216. rm -fv /services/$CMD.dir/*.xml
  217. wget -P /services/$CMD.dir --user=$CMD.user --password=$CMD.pass $FTP.cmd'; \
  218. """
  219. echo "Syncing dictionaries for CMD"
  220. def log_dir = CMD.dir.replace("Files", "LOGS")
  221. log_dir = log_dir.replace("/", "\\")
  222. sh """export DOCKER_HOST=tcp://$CLUSTER.gost:2376 DOCKER_TLS_VERIFY=1
  223. docker create -i --name sync \
  224. -v analis-wineservice_analis_Files_netapp:/root/wine32/dosdevices/unc/samba.infoclinica.lan/smartdelta01/ \
  225. --network=labnetwork ${SYNC_IMAGE} -a prod_lab -e "$CMD.id" \
  226. -logfile "\\\\samba.infoclinica.lan\\smartdelta01\\$log_dir\\syncmanager_#.log"
  227. docker cp infodent.ini sync:/opt/syncmanager/infodent.ini
  228. docker start -i sync
  229. docker rm sync
  230. """
  231. }
  232. }
  233. }
  234. }
  235. /* post {
  236. failure {
  237. mail charset: 'UTF-8',
  238. subject: "Jenkins Dictionaries sync ERROR",
  239. mimeType: 'text/html',
  240. to: "${mailto}",
  241. body: "<b>ATTENTION!!!</b> <b><br> Jenkins job failed.\n\n <b><br>Project Name:</b> ${env.JOB_NAME} <b><br>\nBuild Number:</b> ${env.BUILD_NUMBER} <b><br>\nURL Build:</b> ${RUN_DISPLAY_URL}"
  242. }
  243. success {
  244. mail charset: 'UTF-8',
  245. subject: "Jenkins Dictionaries sync SUCCESS",
  246. mimeType: 'text/html',
  247. to: "${mailto}",
  248. body: "<b>Congradulations!!!</b> <b><br> Jenkins job succefully finished.\n\n <b><br>Project Name:</b> ${env.JOB_NAME} <b><br>\nBuild Number:</b> ${env.BUILD_NUMBER} <b><br>\nURL Build:</b> ${RUN_DISPLAY_URL}"
  249. }
  250. }
  251. */}