123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #!/bin/bash
- FTP_DATA=/data/ftp
- #PROJECT_NAME=wisecloud
- MIRROR_ADDRESS="registry.svicloud.com"
- GIT_ADDRESS="git@git.svicloud.com:svicloud/wisecloud.git"
- anynowtime="date +'%Y-%m-%d %H:%M:%S'"
- NOW="echo [\`$anynowtime\`][PID:$$]"
- function tms_start
- {
- echo "`eval $NOW` tms_start" >>"${BUILD_LOG}"
- }
- function tms_success
- {
- msg="$*"
- echo "`eval $NOW` tms_success:[$msg]" >>"${BUILD_LOG}"
- echo "`eval $NOW` tms_success:[$msg]"
- return 0
- }
- function tms_fail
- {
- msg="$*"
- echo "`eval $NOW` tms_fail:[$msg]" >>"${BUILD_LOG}"
- echo "`eval $NOW` tms_fail:[$msg]"
- return 1
- }
- function fn_print_err()
- {
- local info_error=$1
- echo "====================================================================================================" >>"${BUILD_LOG}"
- cat "${ERROR_LOG}" >>"${BUILD_LOG}"
- echo "====================================================================================================" >>"${BUILD_LOG}"
- tms_fail "${info_error}" || return $?
- }
- function fn_build_images()
- {
- local images_name=$1
- #build new images
- docker build -t "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"${IMAGE_VERSION}" . >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]
- then
- fn_print_err "Build <${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:${IMAGE_VERSION}> failure." || return $?
- fi
- docker rmi "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"latest"
- #tag images latest, modify by dongcj
- docker tag "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"${IMAGE_VERSION}" "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":latest >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]
- then
- fn_print_err "Tag <${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:latest> failure." || return $?
- fi
- #push images, modify by dongcj
- docker push "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"${IMAGE_VERSION}" >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]
- then
- echo "retry pushing after 3 seconds..."
- sleep 3
- docker push "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"${IMAGE_VERSION}" >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]; then
- fn_print_err "docker push ${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:${IMAGE_VERSION} failure." || return $?
- fi
- fi
- echo
- echo "Ready to push latest image"
- sleep 3
- #push images latest
- docker push "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"latest" >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]
- then
- echo "retry push latest after 3 seconds..."
- sleep 3
- docker push "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"latest" >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]; then
- fn_print_err "docker push ${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:latest failure." || return $?
- fi
- fi
- sleep 5
- docker pull "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"latest" >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]
- then
- fn_print_err "Pull<${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:latest> failure." || return $?
- fi
- return 0
- }
- function fn_version_json()
- {
- local new_version
- [ -d /tmp/wisecloud ] && rm -rf /tmp/wisecloud
- cd /tmp
- git clone "${GIT_ADDRESS}" >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]
- then
- fn_print_err "Git <wisecloud.git> failure." || return $?
- fi
- cd /tmp/wisecloud && cp version.json version.backup
- jq ".${WANGYUAN_NAME}.${MODULE_SERVICE_NAME}_version = \"${MODULE_SERVICE_VERSION}\"" version.backup >version.json
- new_version=`jq ".${WANGYUAN_NAME}.${MODULE_SERVICE_NAME}_version" version.json |xargs`
- if [ "${new_version}" != "${MODULE_SERVICE_VERSION}" ]
- then
- fn_print_err "Version upgrade ${MODULE_SERVICE_VERSION} failed" || return $?
- else
- rm version.backup
- fi
- git add version.json || return $?
- git commit -m "${MODULE_SERVICE_VERSION}"
- git push || return $?
- tms_success "Version upgrade ${MODULE_SERVICE_VERSION} finish."
- return 0
- }
- fn_main()
- {
- MODUL_NAME=$1
- local svn_number=$2
- PROJECT_NAME=$3
- #定义日志打印的路径
- BUILD_LOG=/tmp/${MODUL_NAME}/build.log
- ERROR_LOG=/tmp/${MODUL_NAME}/error.log
- #创建日志文件
- [ -d /tmp/${MODUL_NAME} ] && rm -rf /tmp/${MODUL_NAME}
- mkdir -p /tmp/${MODUL_NAME}
- cd /tmp/${MODUL_NAME} && touch build.log error.log
- if [ -z "${MODUL_NAME}" -o -z "${svn_number}" -o -z "${PROJECT_NAME}" ]
- then
- fn_print_err "Jenkins SVN version or modul name or project name does not exist." || return $?
- fi
- #通过网元模块名和svn版本号找到包名,取最近一次时间的版本号
- pkg_name=`ls -rt /data/ftp |grep -i ${MODUL_NAME} |grep ${svn_number} |tail -n 1`
- if [ -z "${pkg_name}" ]
- then
- fn_print_err "SVN version or modul name is Error." || return $?
- fi
- local pkg_dir=`echo ${pkg_name} |awk -F'-' '{print $1}'`
- #获取拆分变量
- local images_name wangyuan_version
- WANGYUAN_NAME=`echo ${pkg_name} |awk -F'_' '{print $1}' |tr [A-Z] [a-z]`
- local server_name=`echo ${pkg_name} |awk -F'_' '{print $2}' |tr [A-Z] [a-z]`
- if echo "${server_name}" |grep [0-9] >/dev/null 2>&1
- then
- images_name="${WANGYUAN_NAME}"
- wangyuan_version=`echo ${pkg_name} |awk -F'_' '{print $2}'`
- else
- images_name="${server_name}"
- wangyuan_version=`echo ${pkg_name} |awk -F'_' '{print $3}'`
- fi
- #拼接镜像的版本号,由网元版本号和svn版本号组成
- IMAGE_VERSION="${wangyuan_version}"-"${svn_number}"
- #提取Dockerfile文件
- cp /data/ftp/${pkg_name} /tmp/${MODUL_NAME}
- cd /tmp/${MODUL_NAME} && tar -zxvf ${pkg_name} --wildcards ${pkg_dir}/Dockerfile
- cp -p ${pkg_dir}/Dockerfile ./ && rm -rf ${pkg_dir}
- sed -i "/^ENV APP_NAME/a\ENV IMAGES_VERSION ${IMAGE_VERSION}" Dockerfile
- #build镜像
- cd /tmp/${MODUL_NAME}
- tms_success "Start build ${MODUL_NAME} images."
- # modify by dongcj
- fn_build_images "${images_name}" >"${ERROR_LOG}" 2>&1
- if [ $? -ne 0 ]
- then
- fn_print_err "build <${images_name}> failure." || return $?
- fi
- #清理临时目录
- tms_success "Build ${MODUL_NAME} images Success."
- cd /tmp && rm -rf "${MODUL_NAME}"
- return 0
- }
- ####################################################################################
- fn_main $1 $2 $3 || exit $?
- ####################################################################################
|