#!/bin/bash FTP_DATA=/data/ftp #PROJECT_NAME=wisecloud MIRROR_ADDRESS="registry.sviyun.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 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 docker push "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"${IMAGE_VERSION}" >"${ERROR_LOG}" 2>&1 if [ $? -ne 0 ] then fn_print_err "Push<${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:${IMAGE_VERSION}> failure." || return $? fi #push images latest docker push "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"latest" >"${ERROR_LOG}" 2>&1 if [ $? -ne 0 ] then fn_print_err "Push<${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:latest> failure." || return $? 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 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 /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." 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 $? ####################################################################################