From 4dced360ffbde66755ec49715db8fd876fa11d09 Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Thu, 16 Nov 2017 10:20:20 +0800 Subject: bugfix: docker-deploy.sh missing for automate jjb auto deploy fail: https://build.opnfv.org/ci/job/testapi-automate-docker-deploy-master/156/console Change-Id: Ifb47087e3faaa45befe29c542eca43f7d001a5cf Signed-off-by: SerenaFeng --- ci/docker-deploy.sh | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 ci/docker-deploy.sh diff --git a/ci/docker-deploy.sh b/ci/docker-deploy.sh new file mode 100644 index 0000000..1e83577 --- /dev/null +++ b/ci/docker-deploy.sh @@ -0,0 +1,152 @@ +#!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one * +# or more contributor license agreements. See the NOTICE file * +# distributed with this work for additional information * +# regarding copyright ownership. The ASF licenses this file * +# to you under the Apache License, Version 2.0 (the * +# "License"); you may not use this file except in compliance * +# with the License. You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, * +# software distributed under the License is distributed on an * +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * +# KIND, either express or implied. See the License for the * +# specific language governing permissions and limitations * +# under the License. * + + +command=$1 +url=$2 +module=$3 + +REPO="opnfv" +latest_image=$REPO/$module:latest +old_image=$REPO/$module:old +latest_container_name=$module +old_container_name=$module"_old" +latest_container_id= +old_container_id= +new_start_container= + +function DEBUG() { + echo `date "+%Y-%m-%d %H:%M:%S.%N"` ": $1" +} + +function check_connectivity() { + # check update status via test the connectivity of provide url + sleep 5 + cmd=`curl -s --head --request GET ${url} | grep '200 OK' > /dev/null` + rc=$? + DEBUG $rc + if [[ $rc == 0 ]]; then + return 0 + else + return 1 + fi +} + + +function pull_latest_image() { + DEBUG "pull latest image $latest_image" + docker pull $latest_image +} + +function get_latest_running_container() { + latest_container_id=`docker ps -q --filter name=^/$latest_container_name$` +} + +function get_old_running_container() { + old_container_id=`docker ps -q --filter name=^/$old_container_name$` +} + +function delete_old_image() { + DEBUG "delete old image: $old_image" + docker rmi -f $old_image +} + +function delete_old_container() { + DEBUG "delete old container: $old_container_name" + docker ps -a -q --filter name=^/$old_container_name$ | xargs docker rm -f &>/dev/null +} + +function delete_latest_container() { + DEBUG "delete latest container: $module" + docker ps -a -q --filter name=^/$latest_container_name$ | xargs docker rm -f &>/dev/null +} + +function delete_latest_image() { + DEBUG "delete latest image: $REPO/$module:latest" + docker rmi -f $latest_image +} + +function change_image_tag_2_old() { + DEBUG "change image tag 2 old" + docker tag $latest_image $old_image + docker rmi -f $latest_image +} + +function mark_latest_container_2_old() { + DEBUG "mark latest container to be old" + docker rename "$latest_container_name" "$old_container_name" +} + +function stop_old_container() { + DEBUG "stop old container" + docker stop "$old_container_name" +} + +function run_latest_image() { + new_start_container=`$command` + DEBUG "run latest image: $new_start_container" +} + +get_latest_running_container +get_old_running_container + +if [[ ! -z $latest_container_id ]]; then + DEBUG "latest container is running: $latest_container_id" + delete_old_container + delete_old_image + change_image_tag_2_old + mark_latest_container_2_old + pull_latest_image + stop_old_container + run_latest_image + +elif [[ ! -z $old_container_id ]]; then + DEBUG "old container is running: $old_container_id" + delete_latest_container + delete_latest_image + pull_latest_image + stop_old_container + run_latest_image +else + DEBUG "no container is running" + delete_old_container + delete_old_image + delete_latest_container + delete_latest_image + pull_latest_image + run_latest_image +fi + +if check_connectivity; then + DEBUG "CONGRATS: $module update successfully" +else + DEBUG "ATTENTION: $module update failed" + id=`docker ps -a -q --filter name=^/$old_container_name$` + if [[ ! -z $id ]]; then + DEBUG "start old container instead" + docker stop $new_start_container + docker start $id + fi + if ! check_connectivity; then + DEBUG "BIG ISSUE: no container is running normally" + fi + exit 1 +fi + +docker images +docker ps -a -- cgit 1.2.3-korg