Browse Source

Обновить 'Jenkinsfile'

Vladimir Tomishinets 6 years ago
parent
commit
800c373f47
1 changed files with 75 additions and 1 deletions
  1. 75 1
      Jenkinsfile

+ 75 - 1
Jenkinsfile

@@ -3,6 +3,7 @@ pipeline {
     label "swarm"
   }
   environment {
+    CLUSTER_NAME='dev-iru-swarm.infoclinica.lan'
     DOCKER_REGISTRY='dev-registry.infoclinica.ru:5000'
     DOCKER_IMAGE='bind'
     SERVICE_NAME='bind'
@@ -51,7 +52,80 @@ pipeline {
     stage("Create BIND Docker Image") {
       steps {
         echo "Create image ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER}"
-        sh '''docker build --no-cache -t ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER} .'''
+        sh '''docker build --no-cache -t ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER} .
+              if [ $? != 0 ]; then exit 1
+           '''
+      }
+    }
+    stage("Staging") {
+      steps {
+        echo "Testing Bind"
+        sh '''container_id_server=`docker run -d --rm ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER}`
+              docker exec -t ${container_id_server} nslookup iru-swarm.infoclinica.lan
+              if [ $? != 0 ]; then exit 1; else echo "DNS is working!!!"; fi
+              docker stop ${container_id_server}
+           '''
+      }
+    }
+    stage("Publishing") {
+      steps {
+        echo "Publishing ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER}."
+        sh "docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER}"
+      }
+    }
+    stage("Prod-like") {
+      steps {
+        echo "Check Prod-like cluster status"
+        sh '''ping -c 2 ${CLUSTER_NAME}
+              if [ $? -eq 0 ]; then
+                export DOCKER_CERT_PATH=/run/secrets/swarm
+                export DOCKER_HOST=tcp://${CLUSTER_NAME}:2376 DOCKER_TLS_VERIFY=1
+                docker node ls --format "{{.Hostname}} {{.TLSStatus}}" | while read host status
+                do
+                  if [ $status != Ready ]; then echo "Cluster ${CLUSTER_NAME} state is inconsistent"; exit 1
+                  else echo "HOST: $host STATUS: $status"
+                  fi
+                done
+              else echo "Host not Found"; exit 1
+              fi
+           '''
+        echo "Run containers in Prod-like"
+        sh '''export DOCKER_CERT_PATH=/run/secrets/swarm
+              export DOCKER_HOST=tcp://${CLUSTER_NAME}:2376 DOCKER_TLS_VERIFY=1
+              export DOCKER_HOST=tcp://$(docker info -f '{{.Name}}'):2376 DOCKER_TLS_VERIFY=1
+              if [ -z $(docker service ps -q ${DOCKER_IMAGE}) ];then
+                docker service create --replicas 1 \
+                --name ${SERVICE_NAME} -p 53:53/tcp -p 53:53/udp \
+                ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER}
+              else
+                docker service update ${SERVICE_NAME} \
+                --image ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER}
+                if [ $? != 0 ]; then docker service rollback ${SERVICE_NAME}; fi
+              fi
+           '''
+      }
+    }
+    stage("Tagging") {
+      steps {
+        echo "Tagging ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER} to ${DOCKER_REGISTRY}/iru/${DOCKER_IMAGE}:latest"
+        sh '''docker tag ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER} \
+              ${DOCKER_REGISTRY}/iru/${DOCKER_IMAGE}:latest
+              docker push ${DOCKER_REGISTRY}/iru/${DOCKER_IMAGE}:latest
+           '''
+        echo "Updating tag info in ${SWARM_GIT_NAME} repository"
+        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 ${SWARM_GIT_URL}
+                cd ${SWARM_GIT_NAME}
+                echo -n ${BUILD_NUMBER} > tags/${DOCKER_IMAGE}.version
+                git add -A
+                git config --global user.email "${JENKINS_MAIL}"
+                git config --global user.name "Jenkins"
+                git commit -m 'Version update'
+                GIT_SSH_COMMAND='ssh -i ${GIT_SSH_KEY} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
+                git push origin master
+             '''
+        }
       }
     }
   }