Files
bl/.cnb.yml
xinian 2bcad5d101 1
2026-01-28 00:55:05 +08:00

157 lines
5.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

main:
push:
- runner:
cpus: 1
stages:
# ========== 同步到GitHub ==========
- name: sync to github
image: tencentcom/git-sync
cpus: 1
imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml
settings:
target_url: https://github.com/72wo/blazing.git
auth_type: https
username: ${GIT_USERNAME}
password: ${GIT_ACCESS_TOKEN}
# ========== 生成版本号作为前置步骤 ==========
- name: set version
image: golang:1.23
commands:
- VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")"
- mkdir -p .build-info
- echo "BUILD_VERSION=${VERSION}" >> .build-info/.env
- echo "构建版本号:${VERSION}"
depends_on:
- sync to github
# ========== 缓存Go依赖 ==========
- name: cache go modules
image: meltwater/drone-cache:latest
settings:
restore: true
mount:
- /go/pkg/mod
- /root/.cache/go-build
cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "go.mod" }}-{{ checksum "login/go.mod" }}'
depends_on:
- sync to github
# ========== 编译Logic和Login服务 ==========
- name: build
image: golang:1.25
environment:
CGO_ENABLED: 0
GO111MODULE: on
GOSUMDB: off
commands:
- mkdir -p build
- |
# 编译Logic服务
BIN_NAME="logic_${BUILD_VERSION}"
go mod download -x
go build -v -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic
chmod +x ./build/${BIN_NAME}
ls -lh ./build/${BIN_NAME}
file ./build/${BIN_NAME}
- |
# 编译Login服务
cd login
BIN_NAME="login_${BUILD_VERSION}"
go mod download -x
go build -v -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} .
chmod +x ./build/${BIN_NAME}
ls -lh ./build/${BIN_NAME}
mv ./build/${BIN_NAME} ../build/
cd ..
ls -lh ./build/
depends_on:
- cache go modules
- set version
# ========== 重建缓存 ==========
- name: rebuild cache
image: meltwater/drone-cache:latest
settings:
rebuild: true
mount:
- /go/pkg/mod
- /root/.cache/go-build
cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "go.mod" }}-{{ checksum "login/go.mod" }}'
depends_on:
- build
# ========== SCP推送Login和Logic到指定服务器 ==========
- name: deploy to login server
image: appleboy/drone-scp:1.6.2
imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml
settings:
host: ${LOGIN_SERVER_HOST}
username: ${LOGIN_SERVER_USER}
password: ${LOGIN_SERVER_PASSWORD}
port: ${LOGIN_SERVER_PORT}
source:
- ./build/login_*
- ./build/logic_*
target: /opt/login/
strip_components: 1
depends_on:
- rebuild cache
# ========== SSH启动Login服务并上传Logic到Public ==========
- name: start login and move logic
image: appleboy/drone-ssh:1.6.2
imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml
settings:
host: ${LOGIN_SERVER_HOST}
username: ${LOGIN_SERVER_USER}
password: ${LOGIN_SERVER_PASSWORD}
port: ${LOGIN_SERVER_PORT}
script:
- cd /opt/login
- |
# 获取最新的login二进制文件
BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1)
if [ -z "$BIN_NAME" ]; then
echo "❌ 未找到可执行的login文件"
exit 1
fi
- echo "📦 启动Login服务 | Binary: ${BIN_NAME}"
- |
# 停止旧的screen会话
session_name="login"
session=$(screen -ls 2>/dev/null | grep -o "[0-9]*\.${session_name}" || true)
if [[ ! -z "$session" ]]; then
screen -X -S "$session_name" stuff "^C"
expect -c "exec screen -x ${session_name}; wait; exit" 2>/dev/null || true
screen -X -S "$session_name" quit 2>/dev/null || true
echo "Info: Stopped login app."
fi
- sleep 1
- |
# 启动新进程
screen -dmS ${session_name} ./${BIN_NAME}
- echo "✅ Login服务启动成功 | Screen: ${session_name}"
- |
# 等待服务启动并进行健康检查
sleep 3
if screen -list 2>/dev/null | grep -q "${session_name}"; then
echo "✅ 服务健康检查通过 | Screen: ${session_name}"
else
echo "❌ 服务健康检查失败 | Screen: ${session_name} 不存在"
exit 1
fi
- |
# 移动logic产物到public目录
LOGIC_BIN=$(ls -t logic_v* 2>/dev/null | head -1)
if [ -n "$LOGIC_BIN" ]; then
mkdir -p /opt/login/public
mv ${LOGIC_BIN} /opt/login/public/
echo "✅ Logic产物已移动到 /opt/login/public/ | 文件: $(basename ${LOGIC_BIN})"
else
echo "⚠️ 未找到Logic产物"
fi
depends_on:
- deploy to login server