Update my-first-workflow.yaml

This commit is contained in:
2026-01-26 14:28:21 +08:00
committed by GitHub
parent 93fe4ab22d
commit c42650145d

View File

@@ -1,11 +1,11 @@
# 触发规则仅main分支的push/手动触发
# Woodpecker原生顶层字段1触发条件
when:
event:
- push
- manual
branch: main
# 代码克隆配置SSH拉取深度50
# Woodpecker原生顶层字段2代码克隆配置
clone:
git:
image: woodpeckerci/plugin-git
@@ -14,15 +14,15 @@ clone:
lfs: false
use-ssh: true
# 核心流水线所有部署步骤
# Woodpecker原生顶层字段3核心流水线唯一步骤容器
pipeline:
# 全局配置按需修改以下4项即可
# 全局配置仅在pipeline内按需修改4项即可
SCREEN_NAME: logic_service
REMOTE_EXE_DIR: /opt/logic
JSON_CONFIG_URL: "https://your-config-addr.com/deploy-config.json"
JSON_CONFIG_URL: "https://你的JSON配置地址.com/deploy.json"
LOG_PATH: "$HOME/run.log"
# 1. 缓存Go依赖加速构建
# 1. 缓存Go依赖加速构建
cache-go-mod:
image: woodpeckerci/plugin-cache
settings:
@@ -33,20 +33,20 @@ pipeline:
restore_keys:
- ${CI_OS}-go-
# 2. 初始化Go环境预下载依赖
# 2. 初始化Go环境 & 预下载依赖
prepare-go:
image: golang:1.25
commands:
- go version
- go mod download -x
# 3. 生成构建版本号短SHA8位
# 3. 生成构建版本号8短SHA
set-version:
image: golang:1.25
commands:
- VERSION="v$(git rev-parse --short=8 HEAD)"
- echo "BUILD_VERSION=${VERSION}" >> $CI_ENV_FILE
- echo "构建版本号生成${VERSION}"
- echo "✅ 生成版本号:${VERSION}"
# 4. 编译Go服务静态编译无系统依赖
build-logic:
@@ -70,15 +70,14 @@ pipeline:
- ls -lh ./build/
- echo "✅ Go服务编译完成"
# 5. 拉取JSON配置解析服务器/账号/密码/online_id
# 5. 拉取JSON & 解析服务器/账号/密码/online_id
fetch-deploy-config:
image: alpine:latest
commands:
- apk add --no-cache curl jq
- echo "🔧 拉取部署配置:${JSON_CONFIG_URL}"
- curl -sSL ${JSON_CONFIG_URL} -o /tmp/deploy-config.json || { echo "❌ 拉取JSON配置失败"; exit 1; }
- curl -sSL ${JSON_CONFIG_URL} -o /tmp/deploy-config.json || { echo "❌ 拉取JSON失败"; exit 1; }
- |
# 检测JSON格式单对象/数组解析配置
JSON_TYPE=$(jq -r 'type' /tmp/deploy-config.json)
if [ "$JSON_TYPE" = "array" ]; then
REMOTE_HOSTS=$(jq -r '.[].loginaddr' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//')
@@ -97,7 +96,7 @@ pipeline:
- echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> $CI_ENV_FILE
- echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> $CI_ENV_FILE
# 6. SCP推送编译产物到远程服务器密码认证
# 6. SCP推送产物到远程服务器密码认证
scp-exe-to-servers:
image: appleboy/drone-scp
settings:
@@ -112,7 +111,7 @@ pipeline:
- build-logic
- fetch-deploy-config
# 7. 远程部署安装Screen + 优雅启动程序 + 状态验证
# 7. 远程部署安装Screen + 优雅启动 + 状态验证
deploy-to-servers:
image: appleboy/drone-ssh
settings:
@@ -121,12 +120,12 @@ pipeline:
password: ${REMOTE_PASSWORDS}
skip_verify: true
script:
# 检查并安装Screen兼容apt/yum/dnf
- |
# 检查/安装Screen兼容apt/yum/dnf
if command -v screen &> /dev/null; then
echo "✅ Screen已安装,无需操作"
echo "✅ Screen已安装"
else
echo "🔧 开始安装Screen..."
echo "🔧 安装Screen..."
if command -v apt &> /dev/null; then
apt update -y && apt install -y screen -qq
elif command -v yum &> /dev/null; then
@@ -134,45 +133,41 @@ pipeline:
elif command -v dnf &> /dev/null; then
dnf install -y screen -q
else
echo "❌ 不支持的包管理器,安装Screen失败"
echo "❌ 不支持的包管理器,安装失败"
exit 1
fi
command -v screen || { echo "❌ Screen安装后检测失败"; exit 1; }
fi
# 创建目录 + 设置程序执行权限
- mkdir -p ${REMOTE_EXE_DIR}
- chmod +x ${REMOTE_EXE_DIR}/${BIN_NAME} || { echo "❌ 设置程序执行权限失败"; exit 1; }
# 优雅停止旧会话避免端口/进程冲突
- chmod +x ${REMOTE_EXE_DIR}/${BIN_NAME} || { echo "❌ 设置执行权限失败"; exit 1; }
- screen -S ${SCREEN_NAME} -X quit || true
# 启动新程序并验证Screen会话
- |
echo "🚀 启动程序:${REMOTE_EXE_DIR}/${BIN_NAME} -id=${REMOTE_ONLINE_IDS}"
screen -dmS ${SCREEN_NAME} bash -c "\"${REMOTE_EXE_DIR}/${BIN_NAME}\" -id=${REMOTE_ONLINE_IDS} | tee -a ${LOG_PATH}"
sleep 2
if screen -ls | grep -q "${SCREEN_NAME}"; then
echo "✅ 程序启动成功!当前Screen会话列表"
echo "✅ 启动成功Screen会话"
screen -ls
else
echo "❌ 程序启动失败,未检测到${SCREEN_NAME}会话"
screen -ls
exit 1
echo "❌ 启动失败,${SCREEN_NAME}会话"
screen -ls && exit 1
fi
depends_on:
- scp-exe-to-servers
# 8. 打印部署完成汇总信息
# 8. 打印部署完成汇总
print-deploy-info:
image: alpine:latest
commands:
- echo "======================================"
- echo "🎉 全量部署流程执行完成!"
- echo "📌 构建版本号:${BUILD_VERSION}"
- echo "🎉 全量部署完成!"
- echo "📌 版本号:${BUILD_VERSION}"
- echo "📌 触发方式:${CI_EVENT_NAME}"
- echo "📌 部署服务器:${REMOTE_HOSTS}"
- echo "📌 服务器OnlineID${REMOTE_ONLINE_IDS}"
- echo "📌 Screen会话${SCREEN_NAME}"
- echo "📌 远程程序目录:${REMOTE_EXE_DIR}"
- echo "📌 程序日志路径:${LOG_PATH}"
- echo "📌 OnlineID${REMOTE_ONLINE_IDS}"
- echo "📌 Screen会话${SCREEN_NAME}"
- echo "📌 程序目录:${REMOTE_EXE_DIR}"
- echo "📌 日志路径:${LOG_PATH}"
- echo "📌 对应Commit${CI_COMMIT_SHA}"
- echo "======================================"
depends_on: