stages: - build variables: GOPROXY: "https://goproxy.cn,direct" GOPATH: "/home/gopath" GoServerSrcPath: "mongo.games.com/goserver" # 项目相对于GOPATH/src的路径 BetaBinPath: "/home/game/" # beta环境部署路径 DevelopBinPath: "/home/game/" # develop环境部署路径 default: tags: - gitlab cache: key: ${CI_COMMIT_REF_SLUG} paths: - ${GOPATH}/pkg/mod - ${GOPATH}/bin build-job: stage: build only: - dev_login script: # 拉取代码 - echo "拉取代码" - git checkout $CI_COMMIT_REF_NAME - git pull origin $CI_COMMIT_REF_NAME # 替换 go.mod 中的 ../goserver - echo "替换 go.mod 中的 ../goserver" - sed -i "s|mongo.games.com/goserver => .*|mongo.games.com/goserver => $GOPATH/src/$GoServerSrcPath|" go.mod - if [ ! -z "$(git status --porcelain go.mod go.sum)" ]; then GOMODTIDY=1; fi # 编译 - echo "编译" - if [ "$GOMODTIDY" == 1 ]; then go mod tidy; fi - | while IFS= read -r line || [[ -n $line ]] do cd $line echo "编译 $line" go build -v cd .. done < ./programs.txt # 拷贝文件 - echo "拷贝文件" - rm -rf ./temp - mkdir ./temp - mkdir ./temp/data - cp -rfp ./data/* ./temp/data # 删除自定义配置 - echo "删除自定义配置" - | while IFS= read -r line || [[ -n $line ]] do echo "删除 $line 配置" rm ./temp/data/$line done < ./exclude.txt # 拷贝可执行程序 - echo "拷贝可执行程序" - | while IFS= read -r line || [[ -n $line ]] do echo "拷贝 $line" mv ./$line/$line ./temp/$line done < ./programs.txt # 获取部署环境信息 - echo "获取部署环境信息" - if [ "$CI_COMMIT_BRANCH" == "dev_login" ]; then SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY_DEVLOGIN"; REMOTE_HOST="$REMOTE_HOST_DEVLOGIN"; REMOTE_USER="$REMOTE_USER_DEVLOGIN"; ServerName="dev_login"; BinPath="$DevelopBinPath"; else echo "不支持的分支"; exit 1; fi # 设置 .ssh 目录并写入 SSH 私钥 - echo "设置 SSH keys..." - mkdir -p ~/.ssh - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H "$REMOTE_HOST" >> ~/.ssh/known_hosts # 使用 rsync 将文件同步到远程服务器 - echo "同步到服务器" - echo "Deploying to remote server using rsync... $BinPath" - rsync -rvz --delete ./temp/ $REMOTE_USER@$REMOTE_HOST:$BinPath # 触发部署 - echo "触发部署" - "curl -X POST --fail -F token=$SERVER_CI_TOKEN -F ref=release -F variables[ServerName]=$ServerName https://gitlab.sdws.shop/api/v4/projects/31/trigger/pipeline"