update ci

This commit is contained in:
sk 2024-12-27 13:30:47 +08:00
parent cb7bb8feea
commit a64c341e82
1 changed files with 85 additions and 89 deletions

View File

@ -1,12 +1,12 @@
stages: stages:
- lock - lock
- build - build
- save
- sync
- unlock - unlock
variables: 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环境部署路径 BetaBinPath: "/home/game/" # beta环境部署路径
DevelopBinPath: "/home/game/" # develop环境部署路径 DevelopBinPath: "/home/game/" # develop环境部署路径
@ -25,12 +25,12 @@ lock_job:
stage: lock stage: lock
script: script:
- | - |
if [ -f /tmp/ci_lock ]; then if [ -f /tmp/ci_lock_$CI_COMMIT_REF_NAME ]; then
echo "流水线已在运行,等待..." echo "流水线($CI_COMMIT_REF_NAME)已在运行,等待..."
exit 1 exit 1
else else
touch /tmp/ci_lock touch /tmp/ci_lock_$CI_COMMIT_REF_NAME
echo "获得锁定,开始流水线。" echo "获得锁定,开始流水线($CI_COMMIT_REF_NAME)。"
fi fi
build-job: build-job:
@ -38,95 +38,91 @@ build-job:
only: only:
- dev_login - dev_login
script: script:
- git checkout $CI_COMMIT_REF_NAME # 拉取代码
- git pull origin $CI_COMMIT_REF_NAME - echo "拉取代码"
- if [ ! -z "$(git status --porcelain go.mod go.sum)" ]; then - git checkout $CI_COMMIT_REF_NAME
GOMODTIDY=1; - git pull origin $CI_COMMIT_REF_NAME
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
save-job: # 替换 go.mod 中的 ../goserver
stage: save - echo "替换 go.mod 中的 ../goserver"
only: - sed -i "s|mongo.games.com/goserver => .*|mongo.games.com/goserver => $GOPATH/src/$GoServerSrcPath|" go.mod
- 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
sync_job: - if [ ! -z "$(git status --porcelain go.mod go.sum)" ]; then
stage: sync GOMODTIDY=1;
only: fi
- 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
# 设置 .ssh 目录并写入 SSH 私钥 # 编译
- echo "设置 SSH keys..." - echo "编译"
- mkdir -p ~/.ssh - if [ "$GOMODTIDY" == 1 ]; then
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa go mod tidy;
- chmod 600 ~/.ssh/id_rsa fi
- ssh-keyscan -H "$REMOTE_HOST" >> ~/.ssh/known_hosts - |
while IFS= read -r line || [[ -n $line ]]
do
cd $line
echo "编译 $line"
go build -v
cd ..
done < ./programs.txt
# 使用 rsync 将文件同步到远程服务器 # 拷贝文件
- echo "同步到服务器" - echo "拷贝文件"
- echo "Deploying to remote server using rsync... $BinPath" - rm -rf ./temp
- rsync -rvz --delete ./temp/ $REMOTE_USER@$REMOTE_HOST:$BinPath - mkdir ./temp
- mkdir ./temp/data
# 触发部署 - cp -rfp ./data/* ./temp/data
- "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 "删除自定义配置"
- |
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: unlock_job:
stage: unlock stage: unlock
script: script:
- rm -f /tmp/ci_lock - rm -f /tmp/ci_lock_$CI_COMMIT_REF_NAME
- echo "释放锁定,流水线结束。" - echo "释放锁定,流水线($CI_COMMIT_REF_NAME)结束。"
when: always when: always