stages: - build - save - sync variables: ProjectPath: "mongo.games.com/game" default: tags: - gitlab build-job: stage: build only: - develop - release script: - git checkout $CI_COMMIT_REF_NAME # 拷贝到GOPATH - echo '拷贝到GOPATH' - cp -rfp ./* $GOPATH/src/$ProjectPath # 进入项目目录 - cd $GOPATH/src/$ProjectPath # 编译 - echo '编译' - go env -w GO111MODULE=off - | while IFS= read -r line do cd $line echo "编译 $line" go build -v cd .. done < shell/programs.txt deploy-job: stage: save only: - develop - release script: - cd $GOPATH/src/$ProjectPath # 拷贝文件 - echo '拷贝文件' - rm -rf ./temp - mkdir ./temp - mkdir ./temp/data - cp -rfp ./data/* ./temp/data # 删除自定义配置 - echo '删除自定义配置' - | while IFS= read -r line do echo "删除 $line 配置" rm ./temp/data/$line done < ./shell/exclude.txt # 拷贝可执行程序 - echo '拷贝可执行程序' - | while IFS= read -r line do echo "拷贝 $line" mv ./$line/$line ./temp/$line done < ./shell/programs.txt push_job: stage: sync only: - develop - release script: - cd $GOPATH/src/$ProjectPath - if [ "$CI_COMMIT_BRANCH" == "develop" ]; then SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY_DEVELOP"; REMOTE_HOST="$REMOTE_HOST_DEVELOP"; REMOTE_USER="$REMOTE_USER_DEVELOP"; elif [ "$CI_COMMIT_BRANCH" == "release" ]; then SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY_BETA"; REMOTE_HOST="$REMOTE_HOST_BETA"; REMOTE_USER="$REMOTE_USER_BETA"; 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..." - rsync -avz --delete ./temp $REMOTE_USER@$REMOTE_HOST:$REMOTE_DEPLOY_PATH