| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | 
							- JENKINS_PASS = ''
 
- ENDDATE = ''
 
- NEW_ENDDATE = ''
 
- BACKUP_FILE = ''
 
- CONFIG_DIR = ''
 
- COMMAND = ''
 
- TARGET_HOSTS_APACHE = [ 'sugar', 'owncloud' ]
 
- pipeline {
 
-   agent {
 
-     label "swarm"
 
-   }
 
-   environment {
 
-     REGISTRY_OFFICE='registry.sdsys.ru'
 
-     CLUSTER_OFFICE='swarm.sdsys.ru'
 
-     DOCKER_CERT_PATH='/run/secrets/swarm'
 
-     IMAGE_NAME='registry.infoclinica.ru:5000/acme-dns:1.5'
 
-     JENKINS_MAIL='jenkins.dev@sdsys.ru'
 
-     SMTP_SERVER='mail.sdsys.ru'
 
-     RECIPIENT_MAIL_BOX='admin@sdsys.ru'
 
-     PKI_GIT_NAME='pki'
 
-     DOMAIN='sdsys.ru'
 
-     PKI_GIT_URL='ssh://git@git.sdsys.ru:8022/sdsys/pki.git'
 
-     SWARM_GIT_URL='ssh://git@git.sdsys.ru:8022/sdsys/swarm.git'
 
-     SWARM_GIT_NAME='swarm'
 
-   }
 
-   parameters {
 
-     string(
 
-       name: "mailto",
 
-       defaultValue: "admin@sdsys.ru",
 
-       description: "Email which has to be notified."
 
-     )
 
-   }
 
-   stages {
 
-     stage("Calculate Variables") {
 
-       steps {
 
-         script {
 
-           ENDDATE = sh (script: "echo|openssl s_client -servername ${DOMAIN} -connect ${DOMAIN}:443 2>/dev/null|openssl x509 -noout -enddate", returnStdout: true).trim()
 
-           CONFIG_DIR = PKI_GIT_NAME + '/' + DOMAIN + '/wildcard/letsencrypt'
 
-           BACKUP_FILE = PKI_GIT_NAME + '/' + DOMAIN + '/wildcard/acme-dns/' + DOMAIN + '.dump.gz'
 
-           COMMAND = PKI_GIT_NAME + '/' + DOMAIN + '/wildcard/acme-dns/' + 'renewal.sh'
 
-           withCredentials([usernamePassword(credentialsId: 'jenkins', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
 
-             JENKINS_USER = USERNAME
 
-             JENKINS_PASS = PASSWORD
 
-           }
 
-         }
 
-       }
 
-     }
 
- /*    stage("Run Renewal") {
 
-       steps {
 
-         withCredentials([sshUserPrivateKey(credentialsId: 'provision', keyFileVariable: 'GIT_SSH_KEY', passphraseVariable: '', usernameVariable: 'GIT_SSH_USERNAME')]) {
 
-           sh """set +x
 
-                 docker run -t --rm -e TZ=Europe/Moscow \
 
-                   -e DOMAIN=${DOMAIN} -e CONFIG_DIR=${CONFIG_DIR} -e BACKUP_FILE=${BACKUP_FILE} \
 
-                   -e JENKINS_MAIL=${JENKINS_MAIL} -e JENKINS_MAIL_USER=${JENKINS_USER} -e JENKINS_MAIL_PASS=${JENKINS_PASS} \
 
-                   -e git_url=${PKI_GIT_URL} -e SMTP_SERVER=${SMTP_SERVER} -e RECIPIENT_MAIL_BOX=${RECIPIENT_MAIL_BOX} \
 
-                   -e "SSHKEY=`cat ${GIT_SSH_KEY}`" -p 5353:53/udp -p 5353:53/tcp ${IMAGE_NAME} \
 
-                   /${COMMAND}
 
-              """
 
-         }
 
-       }
 
-     }
 
- *//*    stage("Update docker secret in SWARM cluster") {
 
-       steps {
 
-         script {
 
-           ENDDATE = sh (script: "echo|openssl s_client -servername ${REGISTRY_OFFICE} -connect ${REGISTRY_OFFICE}:443 2>/dev/null|openssl x509 -noout -enddate", returnStdout: true).trim()
 
-           if (ENDDATE != NEW_ENDDATE) {
 
-             git_clone(PKI_GIT_URL)
 
-             git_clone(SWARM_GIT_URL)
 
-             echo "Update docker secret in ${CLUSTER_OFFICE}"
 
-             NODE_IP = sh (script: "DOCKER_HOST=tcp://${CLUSTER_OFFICE}:2376 DOCKER_TLS_VERIFY=1 docker node inspect self -f '{{.Status.Addr}}'" , returnStdout: true).trim()
 
-             update_secret(NODE_IP, SWARM_GIT_NAME, DOMAIN, CONFIG_DIR)
 
-           }
 
-         }
 
-       }
 
-     }
 
- */    stage("Update certificate and key") {
 
-       steps {
 
-         script {
 
- // Следующие 2 строчки после тестирования необходимо убрать, так как репозитории клонируются в 2 stage
 
-           git_clone(PKI_GIT_URL)
 
-           git_clone(SWARM_GIT_URL)
 
-           NEW_ENDDATE = sh (script: "openssl x509 -enddate -noout -in ${CONFIG_DIR}/live/${DOMAIN}/cert.pem", returnStdout: true).trim()
 
-           TARGET_HOSTS_APACHE.each { item -> 
 
-             ENDDATE = sh (script: "echo|openssl s_client -servername ${item}.${DOMAIN} -connect ${item}.${DOMAIN}:443 2>/dev/null|openssl x509 -noout -enddate", returnStdout: true).trim()
 
-             if (ENDDATE != NEW_ENDDATE) {
 
-               echo "Update certificate and key for ${item}"
 
-               def PLAYBOOK = PKI_GIT_NAME + '/' + DOMAIN + '/wildcard/acme-dns/' + 'apache.yml'
 
-               def TARGET_HOST = item + '.' + DOMAIN
 
-               def TARGET_DIR = WORKSPACE + '/' + CONFIG_DIR
 
-               update_sertificate(PLAYBOOK, TARGET_DIR, TARGET_HOST, DOMAIN)
 
-             }
 
-           }
 
-           ENDDATE = sh (script: "echo|openssl s_client -servername ${SMTP_SERVER} -connect ${SMTP_SERVER}:443 2>/dev/null|openssl x509 -noout -enddate", returnStdout: true).trim()
 
- //          if (ENDDATE != NEW_ENDDATE) {
 
-             echo "Update certificate and key for ${SMTP_SERVER}"
 
-             sh "cat ${PKI_GIT_NAME}/${DOMAIN}/wildcard/acme-dns/letsencrypt.ca.pem >> ${CONFIG_DIR}/live/${DOMAIN}/fullchain.pem"
 
-             PLAYBOOK = PKI_GIT_NAME + '/' + DOMAIN + '/wildcard/acme-dns/' + 'mail.yml'
 
-             TARGET_DIR = WORKSPACE + '/' + CONFIG_DIR
 
- //            update_zimbra(PLAYBOOK, TARGET_DIR, SMTP_SERVER, DOMAIN)
 
-             update_sertificate(PLAYBOOK, TARGET_DIR, SMTP_SERVER, DOMAIN)
 
- //          }
 
-         }
 
-       }
 
-     }
 
-   }
 
-   post {
 
-     always {
 
-       echo "CleaningUp work directory"
 
-       deleteDir()
 
-     }
 
-     success {
 
-       mail charset: 'UTF-8',
 
-            subject: "Jenkins build SUCCESS",
 
-            mimeType: 'text/html',
 
-            to: "${mailto}",
 
-            body: "<b>ATTENTION!!!</b> <b><br> Jenkins job successed.\n\n <b><br>Project Name:</b> ${env.JOB_NAME} <b><br>Renewal certs and keys</b> <b><br>\nBuild Number:</b> ${env.BUILD_NUMBER} <b><br>\nURL Build:</b> ${RUN_DISPLAY_URL}"
 
-     }
 
-     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}"
 
-     }
 
-   }
 
- }
 
- def git_clone(String REPO) {
 
-       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 ${REPO}
 
-            """
 
-       }
 
- }
 
- def update_secret(String NODE_IP, String SWARM_GIT_NAME, String DOMAIN, String CONFIG_DIR) {
 
-       sh """export DOCKER_HOST=tcp://${NODE_IP}:2376 DOCKER_TLS_VERIFY=1
 
-             docker stack rm registry
 
-             docker stack rm proxy
 
-             docker secret rm sdsys_full
 
-             docker secret create sdsys_full ${CONFIG_DIR}/archive/${DOMAIN}/${DOMAIN}.full-bundle
 
-             sleep 10
 
-             docker stack deploy -c ${SWARM_GIT_NAME}/registry.yml registry
 
-             docker stack deploy -c ${SWARM_GIT_NAME}/proxy.yml proxy
 
-          """
 
- }
 
- def update_sertificate(String PLAYBOOK, String TARGET_DIR, String TARGET_HOST, String DOMAIN) {
 
-       withCredentials([sshUserPrivateKey(credentialsId: 'ansible', keyFileVariable: 'GIT_SSH_KEY', passphraseVariable: '', usernameVariable: 'GIT_SSH_USERNAME')]) {
 
-         ansiColor('xterm') {
 
-           ansiblePlaybook(
 
-             credentialsId: 'ansible',
 
-             playbook: PLAYBOOK,
 
-             disableHostKeyChecking: true,
 
-             extraVars: [
 
-               TARGET_DIR: TARGET_DIR,
 
-               TARGET_HOST: TARGET_HOST,
 
-               DOMAIN: DOMAIN
 
-             ],
 
- //            extras: '-vvv',
 
-             colorized: true)
 
-         }
 
-       }
 
- }
 
- def update_zimbra(String PLAYBOOK, String TARGET_DIR, String TARGET_HOST, String DOMAIN) {
 
-       withCredentials([sshUserPrivateKey(credentialsId: 'ansible', keyFileVariable: 'GIT_SSH_KEY', passphraseVariable: '', usernameVariable: 'GIT_SSH_USERNAME')]) {
 
-         sh """ansible-playbook --private-key ${GIT_SSH_KEY} ${PLAYBOOK} \
 
-                 -u ansible -e TARGET_DIR=${TARGET_DIR} \
 
-                 -e TARGET_HOST=${TARGET_HOST} -e DOMAIN=${DOMAIN} \
 
-                 --ssh-common-args='-o StrictHostKeyChecking=no'
 
-            """
 
-       }
 
- }
 
 
  |