| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
							- def SERIAL
 
- def PROD = [ dir: 'stack-deploy', url: 'ssh://git@git.sdsys.ru:8022/iru/stack-deploy.git', host: 'tcp://iru-swarm.infoclinica.lan:2376 DOCKER_TLS_VERIFY=1', registry: 'registry.infoclinica.ru:5000' ]
 
- def VOLGA = [ dir: 'stack-deploy-volga', url: 'ssh://git@git.sdsys.ru:8022/iru/stack-deploy-volga.git', host: 'tcp://iru-volga.infoclinica.lan:2376 DOCKER_TLS_VERIFY=1', registry: 'risz-registry.volganet.ru:5000', service: 'info_node-api' ]
 
- def TULA = [ dir: 'stack-deploy-tula', url: 'ssh://git@git.sdsys.ru:8022/iru/stack-deploy-tula.git', host: 'tcp://iru-tula.infoclinica.lan:2376 DOCKER_TLS_VERIFY=1', registry: 'registry.doctor71.ru:5000', service: 'info_node-api' ]
 
- def GIT_DIR = ''
 
- def GIT_URL = ''
 
- def DHOST = ''
 
- def REGISTRY = ''
 
- def SERVICE = ''
 
- def GIT_DIR_PROD = ''
 
- def GIT_URL_PROD = ''
 
- pipeline {
 
-   agent {
 
-     label "swarm"
 
-   }
 
-   options {
 
-     disableConcurrentBuilds()
 
-     buildDiscarder logRotator(numToKeepStr: '20')
 
-     timeout(time: 20, unit: 'MINUTES')
 
-   }
 
-   environment {
 
-     DOCKER_IMAGE='iru/node'
 
-     DOCKER_CERT_PATH='/run/secrets/swarm'
 
-     DEV_REGISTRY='dev-registry.infoclinica.ru:5000'
 
-     JENKINS_MAIL='jenkins@sdsys.ru'
 
-     NEWTAG=''
 
-   }
 
-   parameters {
 
-     choice (
 
-       choices: 'PROD\nVOLGA\nTULA',
 
-       description: 'There is run deploy?',
 
-       name: 'CLUSTER')
 
-     string(
 
-       name: "service_update",
 
-       defaultValue: "info_node info_node-api info_node-api2 info_node-api3",
 
-       description: "Service name to update."
 
-     )
 
-     string(
 
-       name: "mailto",
 
-       defaultValue: "admin@sdsys.ru",
 
-       description: "Email which has to be notified."
 
-     )
 
-   }
 
-   stages {
 
-     stage("Define Variables") {
 
-       steps{
 
-         script{
 
-           switch (CLUSTER) {
 
-             case 'PROD':
 
-               GIT_DIR = PROD['dir']
 
-               GIT_URL = PROD['url']
 
-               DHOST = PROD['host']
 
-               REGISTRY = PROD['registry']
 
-               break
 
-             case 'VOLGA':
 
-               GIT_DIR = VOLGA['dir']
 
-               GIT_URL = VOLGA['url']
 
-               DHOST = VOLGA['host']
 
-               REGISTRY = VOLGA['registry']
 
-               SERVICE = VOLGA['service']
 
-               break
 
-             case 'TULA':
 
-               GIT_DIR = TULA['dir']
 
-               GIT_URL = TULA['url']
 
-               DHOST = TULA['host']
 
-               REGISTRY = TULA['registry']
 
-               SERVICE = TULA['service']
 
-               break
 
-           }
 
-         }
 
-       }
 
-     }
 
-     stage("Tagging in Git") {
 
-       steps {
 
-         script {
 
-           GIT_DIR_PROD = PROD['dir']
 
-           GIT_URL_PROD = PROD['url']
 
-           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 ${GIT_URL}
 
-                   [ $CLUSTER != 'PROD' ] && GIT_SSH_COMMAND='ssh -i ${GIT_SSH_KEY} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
 
-                     git clone ${GIT_URL_PROD}
 
-                   cp -f ${GIT_DIR_PROD}/tags/${DOCKER_IMAGE}.dev-version ${GIT_DIR}/tags/${DOCKER_IMAGE}.version
 
-                   cd ${GIT_DIR}
 
-                   git add -A
 
-                   git config --global user.email "${JENKINS_MAIL}"
 
-                   git config --global user.name "Jenkins"
 
-                   git commit -m 'Version update'| grep ''     # Shield ourself from non-zero exit code from 'git commit' command
 
-                   GIT_SSH_COMMAND='ssh -i ${GIT_SSH_KEY} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
 
-                     git push origin master
 
-               """
 
-           }
 
-         }
 
-       }
 
-     }
 
-     stage("Tagging and pushing to prod registry"){
 
-       steps{
 
-         script {
 
-           NEWTAG=sh (script: "cat ${GIT_DIR}/tags/${DOCKER_IMAGE}.version", returnStdout: true).trim()
 
-           sh """docker pull ${DEV_REGISTRY}/${DOCKER_IMAGE}:${NEWTAG}
 
-                 docker tag ${DEV_REGISTRY}/${DOCKER_IMAGE}:${NEWTAG} ${REGISTRY}/${DOCKER_IMAGE}:${NEWTAG}
 
-                 docker tag ${DEV_REGISTRY}/${DOCKER_IMAGE}:${NEWTAG} ${REGISTRY}/${DOCKER_IMAGE}:latest
 
-                 docker push ${REGISTRY}/${DOCKER_IMAGE}:${NEWTAG}
 
-                 docker push ${REGISTRY}/${DOCKER_IMAGE}:latest
 
-              """
 
-         }
 
-       }
 
-     }
 
-     stage("Updating service"){
 
-       steps{
 
-         script {
 
-           if (CLUSTER == 'PROD') {
 
-             for (String item : service_update.split()) {
 
-               echo "Updating ${item}"
 
-               try{
 
-                 sh "DOCKER_HOST=${DHOST} docker service update ${item} --image ${REGISTRY}/${DOCKER_IMAGE}:${NEWTAG}"
 
-               }
 
-               catch(err){
 
-                 echo "Recovering service $item"
 
-                 sh "DOCKER_HOST=${DHOST} docker service rollback ${item}"
 
-                 throw err
 
-               }
 
-             }
 
-           } else {
 
-               try{
 
-                 echo "Updating ${SERVICE}"
 
-                 sh "DOCKER_HOST=${DHOST} docker service update ${SERVICE} --image ${REGISTRY}/${DOCKER_IMAGE}:${NEWTAG}"
 
-               }
 
-               catch(err){
 
-                 echo "Recovering service ${SERVICE}"
 
-                 sh "DOCKER_HOST=${DHOST} docker service rollback ${SERVICE}"
 
-                 throw err
 
-               }
 
-           }
 
-         }
 
-       }
 
-     }
 
-   }
 
-   post {
 
-     always {
 
-       echo "CleaningUp work diretory"
 
-       deleteDir()
 
-       sh "docker image rm -f `docker image ls -q ${REGISTRY}/${DOCKER_IMAGE}:${NEWTAG}`"
 
-     }
 
-     failure {
 
-       mail charset: 'UTF-8',
 
-            subject: "Jenkins build ERROR",
 
-            mimeType: 'text/html',
 
-            to: "${mailto}",
 
-            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}"
 
-     }
 
-     success {
 
-       mail charset: 'UTF-8',
 
-            subject: "Jenkins build SUSCCESS",
 
-            mimeType: 'text/html',
 
-            to: "${mailto}",
 
-            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}"
 
-     }
 
-   }
 
- }
 
 
  |