def CLUSTER = [ gost: 'iru-swarm1.infoclinica.lan', open: 'iru-swarm1-open.infoclinica.ru' ] def FTP = [ HELIX: 'ftp://ex2.helix.ru/Dictionaries/*', CMD: 'ftp://cmd.infoclinica.lan/nsi/*', GEMOTEST: 'ftp://ftp.gemotest.ru/services/*' ] def HELIXNAMES = [ HelixMSK: [ id: '990010000000015', idtask: '990010000000017', dir: 'HelixMSK/Files/Dictionaries', user: 'TestDictMsk', pass: 'kO3R20eK' ], clinicAskona: [ id: '990010000004940', dir: 'HelixMSK/Files/Dictionaries/Askona', user: 'MskPMK', pass: 'QdFQIF68' ], clinicBZ: [ id: '990010000001881', dir: 'HelixMSK/Files/Dictionaries/BZ', user: 'MskClinicLMS', pass: '1npZfzex' ], clinicDR: [ id: '990010000002008', dir: 'HelixMSK/Files/Dictionaries/DR', user: 'MskDoctorRyadom', pass: 'iqBn0gIa' ], clinicMskDomNaTverskoy: [ id: '990010000013837', dir: 'HelixMSK/Files/Dictionaries/DomNaTverskoy', user: 'MskDomNaTverskoy', pass: '83gQlPPL' ], clinicISH: [ id: '990010000013838', dir: 'HelixMSK/Files/Dictionaries/ISH', user: 'MskInvMedHol', pass: '1Uw76Ef#' ], clinicKomsomolsky: [ id: '990010000013842', dir: 'HelixMSK/Files/Dictionaries/komsomolsky', user: 'MskAlfa', pass: 'iQjw0OWh' ], clinicMedscan: [ id: '990010000013843', dir: 'HelixMSK/Files/Dictionaries/Medscan', user: 'MskMedscan', pass: 'd#8Ug@7E' ], clinicMedekspert: [ id: '990010000013840', dir: 'HelixMSK/Files/Dictionaries/medekspert', user: 'MskMedexpertP', pass: 'wA3My!0J' ], clinicMedlux: [ id: '990010000013413', dir: 'HelixMSK/Files/Dictionaries/Medlux_mostfarm', user: 'MskMedlux', pass: 'Zn8hede7' ], clinicMskProfMedLab: [ id: '990010000013850', dir: 'HelixMSK/Files/Dictionaries/profmedlab', user: 'MskProfMedLab', pass: 'The)ais3' ], clinicRGSU: [ id: '990010000013852', dir: 'HelixMSK/Files/Dictionaries/RGSU', user: 'MskRGSU', pass: 'TPnYb3OT' ], clinicSova: [ id: '990010000004941', dir: 'HelixMSK/Files/Dictionaries/Sova', user: 'MskSova', pass: 'ehCPz9mx' ], clinicTemp: [ id: '990010000013661', dir: 'HelixMSK/Files/Dictionaries/Temp', user: 'MskTemp', pass: 'Hoch9is%' ], /* HelixEKB: [ id: '990010000000044', idtask: '990010000000019', dir: 'HelixEKB/Files/Dictionaries', user: 'TestDictEkb', pass: 'Fp5LMnKW' ], clinicBZ_EKB: [ id: '990010000013445', dir: 'HelixEKB/Files/Dictionaries/BZ_Ekb', user: 'EkbBudZdorov', pass: '0Qk^&8Ko%%' ], HelixNSK: [ id: '990010000000045', idtask: '990010000000022', dir: 'HelixNSK/Files/Dictionaries', user: 'TestDictNor', pass: 'jq9xd6sY' ], HelixPNZ: [ id: '990010000000046', idtask: '990010000000021', dir: 'HelixPNZ/Files/Dictionaries', user: 'TestDictPnz', pass: 'IgK~66Ff' ], clinicDavinchigrup: [ id: '990010000013845', dir: 'HelixPNZ/Files/Dictionaries/Davinchigrup', user: 'MskDaVinchi', pass: 'uGh9re)u' ], clinicMotherhood: [ id: '990010000013673', dir: 'HelixPNZ/Files/Dictionaries/Materinstvoidetstvo', user: 'MskMaterinstvoIDetst', pass: 'ZCPuzbw8' ], clinicSadko: [ id: '990010000013846', dir: 'HelixPNZ/Files/Dictionaries/Sadko', user: 'MskSadko', pass: 'VOTdPC3A' ], HelixHBR: [ id: '990010000000047', idtask: '990010000000018', dir: 'HelixHBR/Files/Dictionaries', user: 'TestDictHab', pass: 'idTf4WkE' ], HelixSPB: [ id: '990010000000013', idtask: '990010000000013', dir: 'HelixSPB/Files/Dictionaries', user: 'TestDictSpb', pass: '8686Giq0' ], clinicBaltMed: [ id: '990010000002030', dir: 'HelixSPB/Files/Dictionaries/BaltMed', user: 'SpbMServ', pass: '1tMi8jRz' ], clinicONA: [ id: '990010000004936', dir: 'HelixSPB/Files/Dictionaries/ONA', user: 'ona', pass: 'svn2CD3KkL' ], clinicRAN: [ id: '990010000001898', dir: 'HelixSPB/Files/Dictionaries/RAN', user: 'ran', pass: '7vFal2JBsC' ], clinicSPom: [ id: '990010000013379', dir: 'HelixSPB/Files/Dictionaries/SkorayaPom', user: 'SpbSkorayaPom', pass: '8$c%%Vo46' ], clinicStatusGracy: [ id: '990010000013855', dir: 'HelixSPB/Files/Dictionaries/StatusGracy', user: 'SpbStatGracP', pass: 'Qb#4Ir*1' ], HelixNSB: [ id: '990010000000029', idtask: '990010000000020', dir: 'HelixNSB/Files/Dictionaries', user: 'TestDictNvsb', pass: '511bLPm3' ], clinicMedisPlus: [ id: '990010000013458', dir: 'HelixNSB/Files/Dictionaries/MedisPlusKlinika', user: 'SpbKlinikaPskov', pass: '@3Sj*7St' ], clinicProfMed: [ id: '990010000004939', dir: 'HelixNSB/Files/Dictionaries/ProfMed', user: 'SpbProfMedUfa', pass: 'djZ6rA1T' ], */ ] def INVITRONAMES = [ InvitroMSK: [ id: '990010000000002', idtask: '990010000000002', dir: 'InvitroMSK/Files/Dictionaries' ], // InvitroCHLB: [ id: '990010000000043', idtask: '990010000000032', dir: 'InvitroCHLB/Files/Dictionaries' ], // InvitroSMR: [ id: '990010000000041', idtask: '990010000000031', dir: 'InvitroSMR/Files/Dictionaries' ], // InvitroSPB: [ id: '990010000000042', idtask: '990010000000030', dir: 'InvitroSPB/Files/Dictionaries' ] // InvitroNSB: [ id: '990010000000033', idtask: '990010000000033', dir: 'InvitroNSB/Files/Dictionaries' ] ] def ALFANAMES = [ /* DNKOM: [ id: '990010000000018', idtask: '990010000000023' ], Dialab: [ id: '990010000000019', idtask: '990010000000024' ], LabQuest: [ id: '990010000000049', idtask: '990010000000034' ], */ Arhimed: [ id: '990010000000055', idtask: '990010000000041', dir: 'Arhimed/Files/Dictionaries' ] ] def GEMOTEST = [ id: '990010000000014', idtask: '990010000000014', dir: 'GemoTest/Files/Dictionaries', user: 'a_info', pass: 'Ainfo150916' ] /* def LITEH = [ id: '990010000000024', idtask: '990010000000026' ] def NAKFF = [ id: '990010000000004', idtask: '990010000000004' ] */ def CMD = [ id: '990010000000003', idtask: '990010000000003', dir: 'CMD/Files/Dictionaries', user: 'SDSIntegration', pass: 'RK5CLTr77' ] //def KDL = [ id: '990010000000006', idtask: '990010000000001' ] def TAG = '' pipeline { agent { label "swarm" } environment { OPEN_CLUSTER='iru-swarm1-open.infoclinica.ru' GOST_CLUSTER='iru-swarm1.infoclinica.lan' JENKINS_MAIL='jenkins.dev@sdsys.ru' SMTP_SERVER='mail.sdsys.ru' DOCKER_CERT_PATH='/run/secrets/swarm' WGET_IMAGE='inutano/wget' SYNC_IMAGE='registry.infoclinica.ru:5000/syncmanager:i686.f30-0.1' ANALIS_IMAGE='registry.infoclinica.ru:5000/lab/analis-wineservice' STACK_DEPLOY_REPO='ssh://git@git.sdsys.ru:8022/labportal/stack-deploy.git' mailto='admin@sdsys.ru' } stages { stage ("Git pull stack-deploy REPO") { steps { script { withCredentials([sshUserPrivateKey(credentialsId: 'provision', keyFileVariable: 'GIT_SSH_KEY', passphraseVariable: '', usernameVariable: 'GIT_SSH_USERNAME')]) { sh '''GIT_SSH_COMMAND='ssh -i ${GIT_SSH_KEY} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \ git clone ${STACK_DEPLOY_REPO} ''' } TAG = sh (script: "cat ${WORKSPACE}/stack-deploy/tags/lab/analis-wineservice.build-version" , returnStdout: true) sh '''export DOCKER_HOST=tcp://$GOST_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker stop get || true && docker rm get || true docker stop sync || true && docker rm sync || true ''' sh '''export DOCKER_HOST=tcp://$OPEN_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker stop get || true && docker rm get || true docker stop sync || true && docker rm sync || true ''' } } } stage ("HELIX dictionaries") { steps { script { HELIXNAMES.each { key, value -> echo "Get dictionaries for $key" get_ftp(value.dir, value.user, value.pass, FTP.HELIX, OPEN_CLUSTER, WGET_IMAGE) } catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { timeout(time: 10 as Integer, unit: 'MINUTES') { HELIXNAMES.each { key, value -> if (value.idtask) { echo "Syncing dictionaries for $key" def log_dir = value.dir.replace("Files", "LOGS") log_dir = log_dir.replace("/", "\\") sync(log_dir, value.idtask, IMAGE, GOST_CLUSTER) } } } } sh """export DOCKER_HOST=tcp://$GOST_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker stop sync || true && docker rm sync || true """ } } } stage ("INVITRO dictionaries") { steps { script { INVITRONAMES.each { key, value -> echo "CleanUP files for $key" cleanUP(value.dir, GOST_CLUSTER, WGET_IMAGE) echo "Get dictionaries for $key" def log_dir = value.dir.replace("Files", "LOGS") get_http(log_dir, value.id, ANALIS_IMAGE, TAG, GOST_CLUSTER) } catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { timeout(time: 10 as Integer, unit: 'MINUTES') { INVITRONAMES.each { key, value -> echo "Syncing $key" def log_dir = value.dir.replace("Files", "LOGS") log_dir = log_dir.replace("/", "\\") sh """export DOCKER_HOST=tcp://$GOST_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker create -i --name sync \ -v analis-wineservice_analis_Files_netapp:/root/wine32/dosdevices/unc/samba.infoclinica.lan/smartdelta01/ \ --network=labnetwork --entrypoint='' \${SYNC_IMAGE} /bin/bash \ -c 'cd /root/wine32/dosdevices/unc/samba.infoclinica.lan/smartdelta01/$value.dir; \ cat \$(ls -1t InvitroGetExtendedProduct_*.xml | head -n1) > InvitroGetExtendedProduct.xml; \ cat \$(ls -1t InvitroGetInfo_*.xml | head -n1) > InvitroGetInfo.xml; \ /usr/bin/xvfb-run -a wine /opt/syncmanager/SyncManager.exe -a prod_lab -e "$value.idtask" \ -logfile "\\\\\\samba.infoclinica.lan\\smartdelta01\\$log_dir\\syncmanager_#.log" ' docker cp infodent.ini sync:/opt/syncmanager/infodent.ini docker start -i sync docker rm sync """ } } } sh """export DOCKER_HOST=tcp://$GOST_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker stop sync || true && docker rm sync || true """ } } } stage ("ALFA dictionaries") { steps { script { ALFANAMES.each { key, value -> echo "CleanUP files for $key" cleanUP(value.dir, GOST_CLUSTER, WGET_IMAGE) echo "Get dictionaries for $key" def log_dir = value.dir.replace("Files", "LOGS") get_http(log_dir, value.id, ANALIS_IMAGE, TAG, GOST_CLUSTER) } catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { timeout(time: 10 as Integer, unit: 'MINUTES') { ALFANAMES.each { key, value -> echo "Syncing $key" def log_dir = value.dir.replace("Files", "LOGS") log_dir = log_dir.replace("/", "\\") sh """export DOCKER_HOST=tcp://$GOST_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker create -i --name sync \ -v analis-wineservice_analis_Files_netapp:/root/wine32/dosdevices/unc/samba.infoclinica.lan/smartdelta01/ \ --network=labnetwork --entrypoint='' \${SYNC_IMAGE} /bin/bash \ -c 'cd /root/wine32/dosdevices/unc/samba.infoclinica.lan/smartdelta01/$value.dir; \ cat \$(ls -1t AlfaLabDict_*.xml | head -n1) > Alfalabdict.xml; \ /usr/bin/xvfb-run -a wine /opt/syncmanager/SyncManager.exe -a prod_lab -e "$value.idtask" \ -logfile "\\\\\\samba.infoclinica.lan\\smartdelta01\\$log_dir\\syncmanager_#.log" ' docker cp infodent.ini sync:/opt/syncmanager/infodent.ini docker start -i sync docker rm sync """ } } } sh """export DOCKER_HOST=tcp://$GOST_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker stop sync || true && docker rm sync || true """ } } } /* stage ("Gemotest dictionaries") { steps { script { echo "Get dictionaries for Gemotest" get_ftp(GEMOTEST.dir, GEMOTEST.user, GEMOTEST.pass, FTP.GEMOTEST, OPEN_CLUSTER, WGET_IMAGE) catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { timeout(time: 10 as Integer, unit: 'MINUTES') { echo "Syncing dictionaries for Gemotest" def log_dir = GEMOTEST.dir.replace("Files", "LOGS") log_dir = log_dir.replace("/", "\\") sync(log_dir, GEMOTEST.idtask, IMAGE, GOST_CLUSTER) } } sh """export DOCKER_HOST=tcp://$GOST_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker stop sync || true && docker rm sync || true """ } } } */ stage ("CMD dictionaries") { steps { script { echo "Get dictionaries for CMD" get_ftp(CMD.dir, CMD.user, CMD.pass, FTP.CMD, GOST_CLUSTER, WGET_IMAGE) catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { timeout(time: 10 as Integer, unit: 'MINUTES') { echo "Syncing dictionaries for CMD" def log_dir = CMD.dir.replace("Files", "LOGS") log_dir = log_dir.replace("/", "\\") sync(log_dir, CMD.idtask, IMAGE, GOST_CLUSTER) } } sh """export DOCKER_HOST=tcp://$GOST_CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker stop sync || true && docker rm sync || true """ } } } } post { always { echo "CleaningUp work directory" deleteDir() } failure { mail charset: 'UTF-8', subject: "Jenkins Dictionaries sync ERROR", mimeType: 'text/html', to: "${mailto}", body: "ATTENTION!!!
Jenkins job failed.\n\n
Project Name:
${env.JOB_NAME}
\nBuild Number:
${env.BUILD_NUMBER}
\nURL Build:
${RUN_DISPLAY_URL}" } success { mail charset: 'UTF-8', subject: "Jenkins Dictionaries sync SUCCESS", mimeType: 'text/html', to: "${mailto}", body: "Congradulations!!!
Jenkins job succefully finished.\n\n
Project Name:
${env.JOB_NAME}
\nBuild Number:
${env.BUILD_NUMBER}
\nURL Build:
${RUN_DISPLAY_URL}" } } } def sync(String dir, String idtask, String IMAGE, String CLUSTER) { sh """export DOCKER_HOST=tcp://$CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker create -i --name sync \ -v analis-wineservice_analis_Files_netapp:/root/wine32/dosdevices/unc/samba.infoclinica.lan/smartdelta01/ \ --network=labnetwork ${IMAGE} -a prod_lab -e "$idtask" \ -logfile "\\\\\\samba.infoclinica.lan\\smartdelta01\\$dir\\syncmanager_#.log" docker cp infodent.ini sync:/opt/syncmanager/infodent.ini docker start -i sync docker rm sync """ } def get_http(String dir, String id, String IMAGE, String TAG, String CLUSTER) { sh """export DOCKER_HOST=tcp://$CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker create -i --name get \ -v analis-wineservice_analis_Files_netapp:/root/.wine/dosdevices/unc/samba.infoclinica.lan/smartdelta01 \ --network=labnetwork -e DEBUG=false \ -e LOGPATH=/root/.wine/dosdevices/unc/samba.infoclinica.lan/smartdelta01/$dir \ ${IMAGE}:${TAG} SyncRefInterval=1 LabSystems=$id /nocycles docker cp infodent.ini get:/opt/analis/infodent.ini docker cp analis.conf get:/opt/analis/analis.conf docker start -i get docker rm get """ } def get_ftp(String dir, String user, String pass, String ftp, String CLUSTER, String IMAGE) { sh """export DOCKER_HOST=tcp://$CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker run --rm -i -v analis-wineservice_analis_Files_netapp:/services/ ${IMAGE} \ /bin/ash -c ' \ rm -fv /services/$dir/*.xml; wget -P /services/$dir --user=$user --password="$pass" $ftp' """ } def cleanUP(String dir, String CLUSTER, String IMAGE) { sh """export DOCKER_HOST=tcp://$CLUSTER:2376 DOCKER_TLS_VERIFY=1 docker run --rm -i -v analis-wineservice_analis_Files_netapp:/services/ ${IMAGE} \ /bin/ash -c ' \ rm -fv /services/$dir/*.xml' """ }