#!/bin/bash # author: sre.list@songguo7.com # 2020.04.01 # 脚本执行输入参数:一个参数 项目名 $project(可以不输入) # 输出构建包 二进制文件及相关构建日志 ######################################################################### # devops build go project script # # PROJECT: 项目名称; # RESULT_NAME:${PROJECT}-app # BUILD_DEST_TARGET: # 手动调试构建某版本代码例如 cd /data/ci_build/sre/devops/93042d7b_20200328145142 && bash cicd/build.sh ######################################################################### #set -x #golang配置 source /etc/profile GOLANG=$(which go) PROJECT_DIR=`pwd` if [[ "x$1" != "x" ]] ;then PROJECT=$1 else PROJECT=$(basename `pwd`) fi CURDIR=${PROJECT_DIR} #GOPATH="${CURDIR}" APP_BIN=${PROJECT}-app BUILD_DEST_TARGET='bin' DEPLOY_TARGET='deploy_target' #export GOPATH="${CURDIR}" export GOBIN="${CURDIR}/bin/" #echo 'GOPATH:' ${GOPATH} echo 'GOBIN:' ${GOBIN} echo 'GO:' ${GOLANG} echo "PROJECT ${PROJECT}" echo "BUILD_DEST_TARGET ${BUILD_DEST_TARGET}" echo "APP-BIN ${APP_BIN}" #根据脚本执行结果;判断输出信息 function echoTime(){ limitTime=$(date "+%Y-%m-%d %H:%M:%S") echo ${limitTime} } function setMsg() { run_result=$? msg=$1 if [[ "${run_result}" -eq 0 ]];then echoTime echo -e "[devops build] : ${msg} success" else echo -e "[devops build] : !!!ERR!!!! ${msg} fail" echo -e "" exit 123 fi } function echoMsg() { msg=$1 echoTime echo -e "[devops build] : ${msg} " } #优化 log function logSplite() { line='------------------------------------------------------------------------' typeSplitetype=$1 if [[ ${typeSplitetype} == 'head' ]]; then headMsg=$2 echoMsg ${line} echoMsg " ${headMsg} " echoMsg ${line} else echoMsg ${line} echoMsg '' fi } # 如生成二进制可执行文件${PROJECT}-app # 此处不做压缩归档。 devops 会把指定的产物压缩归档,然后挪到相应位置 提供下载部署使用。部署的时候解压使用。 function mvPackage() { if [[ -e "${BUILD_DEST_TARGET}/${APP_BIN}" ]];then mv ${BUILD_DEST_TARGET}/${APP_BIN} ${DEPLOY_TARGET}/${APP_BIN} else echoMsg "BUILD ERROR" exit 1 fi if [[ -d "config" ]]; then cp -r config ${DEPLOY_TARGET}/ else echoMsg "无config 需要 拷贝" fi } # 构建部署产物(各个环境统一一个) function buildGo() { logSplite 'head' 'BUILD START0 ...' OLDGO111MODULE="$GO111MODULE" OLDGOPROXY="$GOPROXY" OLDGOPRIVATE="$GOPRIVATE" OLDGOFLAGS="$GOFLAGS" export GO111MODULE=on export GOPROXY=https://goproxy.cn,direct export GOPRIVATE=gitea.ckfah.com* export GOFLAGS= raceArgs=" -race " mkdir -p ${BUILD_DEST_TARGET} ${DEPLOY_TARGET} echo go build -o ${BUILD_DEST_TARGET}/${APP_BIN} ${raceArgs} -v -gcflags "-N -l" cmd/main.go logSplite 'head' 'BUILD START1 ...' go build -o ${BUILD_DEST_TARGET}/${APP_BIN} ${raceArgs} -v -gcflags "-N -l" cmd/main.go export GO111MODULE=${OLDGO111MODULE} export GOPROXY=${OLDGOPROXY} export GOPRIVATE=${OLDGOPRIVATE} export GOFLAGS=${OLDGOFLAGS} if [[ $? -ne 0 ]] ;then echo "BUILD ERROR" exit -1 fi setMsg 'BUILD END' mvPackage } function runBuild () { buildGo } runBuild