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