| 
					
				 | 
			
			
				@@ -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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             ''' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 |