build.sh 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/bin/bash
  2. # author: sre.list@songguo7.com
  3. # 2020.04.01
  4. # 脚本执行输入参数:一个参数 项目名 $project(可以不输入)
  5. # 输出构建包 二进制文件及相关构建日志
  6. #########################################################################
  7. # devops build go project script
  8. #
  9. # PROJECT: 项目名称;
  10. # RESULT_NAME:${PROJECT}-app
  11. # BUILD_DEST_TARGET:
  12. # 手动调试构建某版本代码例如 cd /data/ci_build/sre/devops/93042d7b_20200328145142 && bash cicd/build.sh
  13. #########################################################################
  14. #set -x
  15. #golang配置
  16. source /etc/profile
  17. GOLANG=$(which go)
  18. PROJECT_DIR=`pwd`
  19. if [[ "x$1" != "x" ]] ;then
  20. PROJECT=$1
  21. else
  22. PROJECT=$(basename `pwd`)
  23. fi
  24. CURDIR=${PROJECT_DIR}
  25. #GOPATH="${CURDIR}"
  26. APP_BIN=${PROJECT}-app
  27. BUILD_DEST_TARGET='bin'
  28. DEPLOY_TARGET='deploy_target'
  29. #export GOPATH="${CURDIR}"
  30. export GOBIN="${CURDIR}/bin/"
  31. #echo 'GOPATH:' ${GOPATH}
  32. echo 'GOBIN:' ${GOBIN}
  33. echo 'GO:' ${GOLANG}
  34. echo "PROJECT ${PROJECT}"
  35. echo "BUILD_DEST_TARGET ${BUILD_DEST_TARGET}"
  36. echo "APP-BIN ${APP_BIN}"
  37. #根据脚本执行结果;判断输出信息
  38. function echoTime(){
  39. limitTime=$(date "+%Y-%m-%d %H:%M:%S")
  40. echo ${limitTime}
  41. }
  42. function setMsg() {
  43. run_result=$?
  44. msg=$1
  45. if [[ "${run_result}" -eq 0 ]];then
  46. echoTime
  47. echo -e "[devops build] : ${msg} success"
  48. else
  49. echo -e "[devops build] : !!!ERR!!!! ${msg} fail"
  50. echo -e ""
  51. exit 123
  52. fi
  53. }
  54. function echoMsg() {
  55. msg=$1
  56. echoTime
  57. echo -e "[devops build] : ${msg} "
  58. }
  59. #优化 log
  60. function logSplite() {
  61. line='------------------------------------------------------------------------'
  62. typeSplitetype=$1
  63. if [[ ${typeSplitetype} == 'head' ]]; then
  64. headMsg=$2
  65. echoMsg ${line}
  66. echoMsg " ${headMsg} "
  67. echoMsg ${line}
  68. else
  69. echoMsg ${line}
  70. echoMsg ''
  71. fi
  72. }
  73. # 如生成二进制可执行文件${PROJECT}-app
  74. # 此处不做压缩归档。 devops 会把指定的产物压缩归档,然后挪到相应位置 提供下载部署使用。部署的时候解压使用。
  75. function mvPackage() {
  76. if [[ -e "${BUILD_DEST_TARGET}/${APP_BIN}" ]];then
  77. mv ${BUILD_DEST_TARGET}/${APP_BIN} ${DEPLOY_TARGET}/${APP_BIN}
  78. else
  79. echoMsg "BUILD ERROR"
  80. exit 1
  81. fi
  82. if [[ -d "config" ]]; then
  83. cp -r config ${DEPLOY_TARGET}/
  84. else
  85. echoMsg "无config 需要 拷贝"
  86. fi
  87. }
  88. # 构建部署产物(各个环境统一一个)
  89. function buildGo() {
  90. logSplite 'head' 'BUILD START0 ...'
  91. OLDGO111MODULE="$GO111MODULE"
  92. OLDGOPROXY="$GOPROXY"
  93. OLDGOPRIVATE="$GOPRIVATE"
  94. OLDGOFLAGS="$GOFLAGS"
  95. export GO111MODULE=on
  96. export GOPROXY=https://goproxy.cn,direct
  97. export GOPRIVATE=gitea.ckfah.com*
  98. export GOFLAGS=
  99. raceArgs=" -race "
  100. mkdir -p ${BUILD_DEST_TARGET} ${DEPLOY_TARGET}
  101. echo go build -o ${BUILD_DEST_TARGET}/${APP_BIN} ${raceArgs} -v -gcflags "-N -l" cmd/main.go
  102. logSplite 'head' 'BUILD START1 ...'
  103. go build -o ${BUILD_DEST_TARGET}/${APP_BIN} ${raceArgs} -v -gcflags "-N -l" cmd/main.go
  104. export GO111MODULE=${OLDGO111MODULE}
  105. export GOPROXY=${OLDGOPROXY}
  106. export GOPRIVATE=${OLDGOPRIVATE}
  107. export GOFLAGS=${OLDGOFLAGS}
  108. if [[ $? -ne 0 ]] ;then
  109. echo "BUILD ERROR"
  110. exit -1
  111. fi
  112. setMsg 'BUILD END'
  113. mvPackage
  114. }
  115. function runBuild () {
  116. buildGo
  117. }
  118. runBuild