diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 56cb3c9..aef6f4d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,18 +1,35 @@ stages: + - lock - build - - deploy - - push + - save + - sync + - unlock variables: ProjectPath: "mongo.games.com/game" - DeployPath: "mongo.games.com/deploy" default: tags: - gitlab +# 锁定作业,防止并发流水线执行 +lock_job: + stage: lock + script: + - | + if [ -f /tmp/ci_lock ]; then + echo "流水线已在运行,等待..." + exit 1 + else + touch /tmp/ci_lock + echo "获得锁定,开始流水线。" + fi + build-job: stage: build + only: + - develop + - release script: - git checkout $CI_COMMIT_REF_NAME # 拷贝到GOPATH @@ -32,48 +49,71 @@ build-job: cd .. done < shell/programs.txt -deploy-job: - stage: deploy +save-job: + stage: save + only: + - develop + - release script: - # 拉取 - - echo "拉取deploy" - - cd $GOPATH/src/$DeployPath - - git checkout $CI_COMMIT_REF_NAME - - git pull - - # 拷贝data目录 - - echo '拷贝data目录' - cd $GOPATH/src/$ProjectPath - - cp -rfvp data/* $GOPATH/src/$DeployPath/data - + # 拷贝文件 + - echo '拷贝文件' + - rm -rf ./temp + - mkdir ./temp + - mkdir ./temp/data + - cp -rfp ./data/* ./temp/data # 删除自定义配置 - echo '删除自定义配置' - | while IFS= read -r line do - echo "删除 $line 配置" - rm $GOPATH/src/$DeployPath/data/$line - done < shell/exclude.txt - + echo "删除 $line 配置" + rm ./temp/data/$line + done < ./shell/exclude.txt # 拷贝可执行程序 - echo '拷贝可执行程序' - | while IFS= read -r line do - echo "拷贝 $line" - cp -rf $line/$line $GOPATH/src/$DeployPath/ - echo "删除 $line" - rm -rf $line/$line - done < shell/programs.txt + echo "拷贝 $line" + mv ./$line/$line ./temp/$line + done < ./shell/programs.txt -push_job: - stage: push +sync_job: + stage: sync + only: + - develop + - release script: - # 提交代码 - - echo '提交代码' - - cd $GOPATH/src/$DeployPath - - git config user.email "ci@example.com" # 设置提交者的 email - - git config user.name "GitLab CI" # 设置提交者的名称 - - git add . - - git commit -m "auto commit pipelineId $CI_PIPELINE_ID" - - git push origin $CI_COMMIT_REF_NAME \ No newline at end of file + - 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 + +# 解锁作业,释放锁定 +unlock_job: + stage: unlock + script: + - rm -f /tmp/ci_lock + - echo "释放锁定,流水线结束。" \ No newline at end of file