game_sync/.gitlab-ci.yml

102 lines
2.3 KiB
YAML

stages:
- lock
- build
- save
- unlock
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
# 锁定作业,防止并发流水线执行
lock_job:
stage: lock
script:
- |
if [ -f /tmp/ci_lock_$CI_COMMIT_REF_NAME ]; then
echo "流水线($CI_COMMIT_REF_NAME)已在运行,等待..."
exit 1
else
touch /tmp/ci_lock_$CI_COMMIT_REF_NAME
echo "获得锁定,开始流水线($CI_COMMIT_REF_NAME)。"
fi
build-job:
stage: build
only:
- develop
- release
script:
- git checkout $CI_COMMIT_REF_NAME
- git pull origin $CI_COMMIT_REF_NAME
# 替换 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
save-job:
stage: save
only:
- develop
- release
script:
# 拷贝文件
- 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
# 解锁作业,释放锁定
unlock_job:
stage: unlock
script:
- rm -f /tmp/ci_lock_$CI_COMMIT_REF_NAME
- echo "释放锁定,流水线结束(/$CI_COMMIT_REF_NAME)。"
when: always