build_images.sh 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #!/bin/bash
  2. FTP_DATA=/data/ftp
  3. #PROJECT_NAME=wisecloud
  4. MIRROR_ADDRESS="registry.svicloud.com"
  5. GIT_ADDRESS="git@git.svicloud.com:svicloud/wisecloud.git"
  6. anynowtime="date +'%Y-%m-%d %H:%M:%S'"
  7. NOW="echo [\`$anynowtime\`][PID:$$]"
  8. function tms_start
  9. {
  10. echo "`eval $NOW` tms_start" >>"${BUILD_LOG}"
  11. }
  12. function tms_success
  13. {
  14. msg="$*"
  15. echo "`eval $NOW` tms_success:[$msg]" >>"${BUILD_LOG}"
  16. echo "`eval $NOW` tms_success:[$msg]"
  17. return 0
  18. }
  19. function tms_fail
  20. {
  21. msg="$*"
  22. echo "`eval $NOW` tms_fail:[$msg]" >>"${BUILD_LOG}"
  23. echo "`eval $NOW` tms_fail:[$msg]"
  24. return 1
  25. }
  26. function fn_print_err()
  27. {
  28. local info_error=$1
  29. echo "====================================================================================================" >>"${BUILD_LOG}"
  30. cat "${ERROR_LOG}" >>"${BUILD_LOG}"
  31. echo "====================================================================================================" >>"${BUILD_LOG}"
  32. tms_fail "${info_error}" || return $?
  33. }
  34. function fn_build_images()
  35. {
  36. local images_name=$1
  37. #build new images
  38. docker build -t "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"${IMAGE_VERSION}" . >"${ERROR_LOG}" 2>&1
  39. if [ $? -ne 0 ]
  40. then
  41. fn_print_err "Build <${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:${IMAGE_VERSION}> failure." || return $?
  42. fi
  43. docker rmi "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"latest"
  44. #tag images latest
  45. 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
  46. if [ $? -ne 0 ]
  47. then
  48. fn_print_err "Tag <${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:latest> failure." || return $?
  49. fi
  50. #push images
  51. docker push "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"${IMAGE_VERSION}" >"${ERROR_LOG}" 2>&1
  52. if [ $? -ne 0 ]
  53. then
  54. fn_print_err "Push<${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:${IMAGE_VERSION}> failure." || return $?
  55. fi
  56. #push images latest
  57. docker push "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"latest" >"${ERROR_LOG}" 2>&1
  58. if [ $? -ne 0 ]
  59. then
  60. fn_print_err "Push<${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:latest> failure." || return $?
  61. fi
  62. sleep 5
  63. docker pull "${MIRROR_ADDRESS}"/"${PROJECT_NAME}"/"${WANGYUAN_NAME}"/"${images_name}":"latest" >"${ERROR_LOG}" 2>&1
  64. if [ $? -ne 0 ]
  65. then
  66. fn_print_err "Pull<${MIRROR_ADDRESS}/${PROJECT_NAME}/${WANGYUAN_NAME}/${images_name}:latest> failure." || return $?
  67. fi
  68. return 0
  69. }
  70. function fn_version_json()
  71. {
  72. local new_version
  73. [ -d /tmp/wisecloud ] && rm -rf /tmp/wisecloud
  74. cd /tmp
  75. git clone "${GIT_ADDRESS}" >"${ERROR_LOG}" 2>&1
  76. if [ $? -ne 0 ]
  77. then
  78. fn_print_err "Git <wisecloud.git> failure." || return $?
  79. fi
  80. cd /tmp/wisecloud && cp version.json version.backup
  81. jq ".${WANGYUAN_NAME}.${MODULE_SERVICE_NAME}_version = \"${MODULE_SERVICE_VERSION}\"" version.backup >version.json
  82. new_version=`jq ".${WANGYUAN_NAME}.${MODULE_SERVICE_NAME}_version" version.json |xargs`
  83. if [ "${new_version}" != "${MODULE_SERVICE_VERSION}" ]
  84. then
  85. fn_print_err "Version upgrade ${MODULE_SERVICE_VERSION} failed" || return $?
  86. else
  87. rm version.backup
  88. fi
  89. git add version.json || return $?
  90. git commit -m "${MODULE_SERVICE_VERSION}"
  91. git push || return $?
  92. tms_success "Version upgrade ${MODULE_SERVICE_VERSION} finish."
  93. return 0
  94. }
  95. fn_main()
  96. {
  97. MODUL_NAME=$1
  98. local svn_number=$2
  99. PROJECT_NAME=$3
  100. #定义日志打印的路径
  101. BUILD_LOG=/tmp/${MODUL_NAME}/build.log
  102. ERROR_LOG=/tmp/${MODUL_NAME}/error.log
  103. #创建日志文件
  104. [ -d /tmp/${MODUL_NAME} ] && rm -rf /tmp/${MODUL_NAME}
  105. mkdir -p /tmp/${MODUL_NAME}
  106. cd /tmp/${MODUL_NAME} && touch build.log error.log
  107. if [ -z "${MODUL_NAME}" -o -z "${svn_number}" -o -z "${PROJECT_NAME}" ]
  108. then
  109. fn_print_err "Jenkins SVN version or modul name or project name does not exist." || return $?
  110. fi
  111. #通过网元模块名和svn版本号找到包名
  112. pkg_name=`ls /data/ftp |grep -i ${MODUL_NAME} |grep ${svn_number} |tail -n 1`
  113. if [ -z "${pkg_name}" ]
  114. then
  115. fn_print_err "SVN version or modul name is Error." || return $?
  116. fi
  117. local pkg_dir=`echo ${pkg_name} |awk -F'-' '{print $1}'`
  118. #获取拆分变量
  119. local images_name wangyuan_version
  120. WANGYUAN_NAME=`echo ${pkg_name} |awk -F'_' '{print $1}' |tr [A-Z] [a-z]`
  121. local server_name=`echo ${pkg_name} |awk -F'_' '{print $2}' |tr [A-Z] [a-z]`
  122. if echo "${server_name}" |grep [0-9] >/dev/null 2>&1
  123. then
  124. images_name="${WANGYUAN_NAME}"
  125. wangyuan_version=`echo ${pkg_name} |awk -F'_' '{print $2}'`
  126. else
  127. images_name="${server_name}"
  128. wangyuan_version=`echo ${pkg_name} |awk -F'_' '{print $3}'`
  129. fi
  130. #拼接镜像的版本号,由网元版本号和svn版本号组成
  131. IMAGE_VERSION="${wangyuan_version}"-"${svn_number}"
  132. #提取Dockerfile文件
  133. cp /data/ftp/${pkg_name} /tmp/${MODUL_NAME}
  134. cd /tmp/${MODUL_NAME} && tar -zxvf ${pkg_name} --wildcards ${pkg_dir}/Dockerfile
  135. cp -p ${pkg_dir}/Dockerfile ./ && rm -rf ${pkg_dir}
  136. sed -i "/^ENV APP_NAME/a\ENV IMAGES_VERSION ${IMAGE_VERSION}" Dockerfile
  137. #build镜像
  138. cd /tmp/${MODUL_NAME}
  139. tms_success "Start build ${MODUL_NAME} images."
  140. fn_build_images "${images_name}" >"${ERROR_LOG}" 2>&1
  141. if [ $? -ne 0 ]
  142. then
  143. fn_print_err "build <${images_name}> failure." || return $?
  144. fi
  145. #清理临时目录
  146. tms_success "Build ${MODUL_NAME} images Success."
  147. cd /tmp && rm -rf "${MODUL_NAME}"
  148. return 0
  149. }
  150. ####################################################################################
  151. fn_main $1 $2 $3 || exit $?
  152. ####################################################################################