From a64c341e822b00830cc9125c6a1a542c8255de60 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 27 Dec 2024 13:30:47 +0800 Subject: [PATCH] update ci --- .gitlab-ci.yml | 174 ++++++++++++++++++++++++------------------------- 1 file changed, 85 insertions(+), 89 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b07fb99..9773898 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,12 +1,12 @@ stages: - lock - build - - save - - sync - unlock variables: - ProjectPath: "mongo.games.com/game" # 项目相对于GOPATH的路径 + GOPROXY: "https://goproxy.cn,direct" + GOPATH: "/home/gopath" + GoServerSrcPath: "mongo.games.com/goserver" # 项目相对于GOPATH/src的路径 BetaBinPath: "/home/game/" # beta环境部署路径 DevelopBinPath: "/home/game/" # develop环境部署路径 @@ -25,12 +25,12 @@ lock_job: stage: lock script: - | - if [ -f /tmp/ci_lock ]; then - echo "流水线已在运行,等待..." + if [ -f /tmp/ci_lock_$CI_COMMIT_REF_NAME ]; then + echo "流水线($CI_COMMIT_REF_NAME)已在运行,等待..." exit 1 else - touch /tmp/ci_lock - echo "获得锁定,开始流水线。" + touch /tmp/ci_lock_$CI_COMMIT_REF_NAME + echo "获得锁定,开始流水线($CI_COMMIT_REF_NAME)。" fi build-job: @@ -38,95 +38,91 @@ build-job: only: - dev_login script: - - git checkout $CI_COMMIT_REF_NAME - - git pull origin $CI_COMMIT_REF_NAME - - if [ ! -z "$(git status --porcelain go.mod go.sum)" ]; then - GOMODTIDY=1; - fi - # 拷贝到GOPATH - - echo '拷贝到GOPATH' - - rsync -rvc --no-perms --delete ./* $GOPATH/src/$ProjectPath - # 进入项目目录 - - cd $GOPATH/src/$ProjectPath - # 编译 - - 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 "拉取代码" + - git checkout $CI_COMMIT_REF_NAME + - git pull origin $CI_COMMIT_REF_NAME -save-job: - stage: save - only: - - dev_login - 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 || [[ -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 + # 替换 go.mod 中的 ../goserver + - echo "替换 go.mod 中的 ../goserver" + - sed -i "s|mongo.games.com/goserver => .*|mongo.games.com/goserver => $GOPATH/src/$GoServerSrcPath|" go.mod -sync_job: - stage: sync - only: - - dev_login - script: - - cd $GOPATH/src/$ProjectPath - - 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 + - if [ ! -z "$(git status --porcelain go.mod go.sum)" ]; then + GOMODTIDY=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 + # 编译 + - 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 - # 使用 rsync 将文件同步到远程服务器 - - echo "同步到服务器" - - echo "Deploying to remote server using rsync... $BinPath" - - rsync -rvz --delete ./temp/ $REMOTE_USER@$REMOTE_HOST:$BinPath - - # 触发部署 - - "curl -X POST --fail -F token=$SERVER_CI_TOKEN -F ref=release -F variables[ServerName]=$ServerName https://git.pogorockgames.com/api/v4/projects/31/trigger/pipeline" + # 拷贝文件 + - 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://git.pogorockgames.com/api/v4/projects/31/trigger/pipeline" # 解锁作业,释放锁定 unlock_job: stage: unlock script: - - rm -f /tmp/ci_lock - - echo "释放锁定,流水线结束。" + - rm -f /tmp/ci_lock_$CI_COMMIT_REF_NAME + - echo "释放锁定,流水线($CI_COMMIT_REF_NAME)结束。" when: always \ No newline at end of file