From f82d42cc0aa69bdf2a72382beafabccb07a7d704 Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 27 Jan 2026 23:04:23 +0800 Subject: [PATCH 01/98] 1 --- .cnb.yml | 54 +++++++++++++++++++- .woodpecker/my-first-workflow.yaml | 82 +++++++++++++++--------------- 2 files changed, 93 insertions(+), 43 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index b500aaa3..dff899f1 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -1,11 +1,61 @@ main: push: - stages: + # ========== 同步到GitHub ========== - name: sync to github image: tencentcom/git-sync - 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} \ No newline at end of file + password: ${GIT_ACCESS_TOKEN} + + # ========== 生成版本号 ========== + - name: set version + image: golang:1.25 + commands: + - VERSION="v$(git rev-parse --short=8 HEAD)" + - echo "BUILD_VERSION=${VERSION}" + + # ========== 编译Logic服务 ========== + - name: build logic + image: golang:1.25 + environment: + CGO_ENABLED: 0 + GO111MODULE: on + GOSUMDB: off + commands: + - mkdir -p build + - BIN_NAME="logic_${BUILD_VERSION}" + - go build -v -p=4 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic + - ls -lh ./build/ + + # ========== 拉取部署配置 ========== + - name: fetch deploy config + image: alpine:latest + commands: + - apk add --no-cache curl jq + - for i in 1 2 3; do curl -sSL --connect-timeout 10 --max-time 30 "https://你的JSON配置地址.com/deploy.json" -o /tmp/deploy-config.json && break || sleep 2; done + - JSON_TYPE=$(jq -r 'type' /tmp/deploy-config.json 2>/dev/null || echo "invalid") + - | + if [ "$JSON_TYPE" = "array" ]; then + REMOTE_HOSTS=$(jq -r '.[].loginaddr' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') + REMOTE_USERS=$(jq -r '.[].user' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') + REMOTE_PASSWORDS=$(jq -r '.[].password' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') + elif [ "$JSON_TYPE" = "object" ]; then + REMOTE_HOSTS=$(jq -r '.loginaddr' /tmp/deploy-config.json) + REMOTE_USERS=$(jq -r '.user' /tmp/deploy-config.json) + REMOTE_PASSWORDS=$(jq -r '.password' /tmp/deploy-config.json) + fi + + # ========== SCP推送产物到服务器 ========== + - name: scp to servers + image: appleboy/drone-scp:1.6.2 + settings: + host: ${REMOTE_HOSTS} + username: ${REMOTE_USERS} + password: ${REMOTE_PASSWORDS} + source: ./build/logic_${BUILD_VERSION} + target: /opt/logic/ + strip_components: 1 + skip_verify: true \ No newline at end of file diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index ef0b262a..ca1a6c0e 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -17,6 +17,20 @@ variables: # 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 steps: + # ========== 0. 同步代码到GitHub(与prepare并行执行) ========== + sync-to-github: + image: tencentcom/git-sync + settings: + target_url: https://github.com/72wo/blazing.git + auth_type: https + username: ${GIT_USERNAME} + password: ${GIT_ACCESS_TOKEN} + when: + event: + - push + branch: + - main + # ========== 1. 替代clone:拉取代码(核心依赖) ========== prepare: image: debian:bookworm @@ -64,58 +78,44 @@ steps: - echo "✅ 代码拉取完成" - # # ========== 2. 初始化Go环境(依赖prepare:代码拉取完成) ========== - # prepare-go: # 与prepare同级,缩进2个空格 - # image: golang:1.25 # 子元素,缩进4个空格 - # depends_on: [prepare] # 子元素,缩进4个空格 - # commands: # 子元素,缩进4个空格 - # - go version # commands内的项,缩进6个空格 - # - go mod download -x || { echo "❌ 下载Go依赖失败"; exit 1; } # 统一缩进6个空格 - # - go mod verify || { echo "❌ 验证Go依赖失败"; exit 1; } # 统一缩进6个空格 - # - echo "✅ Go环境初始化完成" # 统一缩进6个空格 + # ========== 3. 生成版本号(依赖prepare:代码拉取完成) ========== + set-version: + image: golang:1.25 + depends_on: [prepare] + commands: + - | + VERSION="v$(git rev-parse --short=8 HEAD)" + echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" + echo "构建版本号:${VERSION}" + echo "✅ 生成版本号:${VERSION}" - # # ========== 3. 生成版本号(依赖prepare-go:Go环境就绪) ========== - # set-version: # 与prepare-go同级,缩进2个空格 - # image: golang:1.25 # 子元素,缩进4个空格 - # depends_on: [prepare-go] # 子元素,缩进4个空格 - # commands: # 子元素,缩进4个空格 - # - | # commands内的项,缩进6个空格 - # if [ -n "${CI_COMMIT_TAG}" ]; then - # VERSION="${CI_COMMIT_TAG}" - # else - # VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - # fi - # mkdir -p "$(dirname "$CI_ENV_FILE")" - # echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" - # echo "✅ 生成版本号:${VERSION}" - - # ========== 4. 编译Go服务(核心依赖:prepare+prepare-go+set-version) ========== - build_logic: # 与set-version同级,缩进2个空格 - image: golang:1.25 # 子元素,缩进4个空格 - depends_on: [prepare] # 子元素,缩进4个空格 - environment: # 子元素,缩进4个空格 - CGO_ENABLED: 0 # environment内的项,缩进6个空格 - GO111MODULE: on # 统一缩进6个空格 - GOSUMDB: off # 统一缩进6个空格 - commands: # 子元素,缩进4个空格 - - mkdir -p build # commands内的项,缩进6个空格 - - BIN_NAME="logic_${CI_STEP_STARTED}" # 缩进6个空格 - - | # 缩进6个空格 + # ========== 4. 编译Logic服务(完全参考GitHub Actions编译配置) ========== + build_logic: + image: golang:1.25 + depends_on: [prepare] + environment: + CGO_ENABLED: 0 + GO111MODULE: on + GOSUMDB: off + commands: + - mkdir -p build + - BIN_NAME="logic_${BUILD_VERSION}" + - | go build -v \ -p=4 \ -trimpath \ -buildvcs=false \ - -ldflags "-s -w -buildid= -extldflags '-static' -X main.version=${CI_STEP_STARTED}" \ + -ldflags "-s -w -buildid= -extldflags '-static'" \ -o ./build/${BIN_NAME} \ ./logic - - | # 缩进6个空格 + - | if [ ! -f ./build/${BIN_NAME} ]; then echo "❌ 编译失败:产物${BIN_NAME}不存在" exit 1 fi - - ls -lh ./build/ # 缩进6个空格 - - ./build/${BIN_NAME} -v || true # 缩进6个空格 - - echo "✅ Go服务编译完成" # 缩进6个空格 + - ls -lh ./build/ + - echo "产物名称:${BIN_NAME}" + - echo "✅ Logic服务编译完成" # ========== 5. 拉取部署配置(可并行,依赖prepare确保代码拉取完成) ========== fetch-deploy-config: # 与build_logic同级,缩进2个空格 From fc55a237ed1efed93e1af173f35a019186ed277e Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 27 Jan 2026 23:05:40 +0800 Subject: [PATCH 02/98] 1 --- .cnb.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.cnb.yml b/.cnb.yml index dff899f1..d53fa90f 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -1,9 +1,11 @@ main: push: + - stages: # ========== 同步到GitHub ========== - name: sync to github image: tencentcom/git-sync + imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml settings: target_url: https://github.com/72wo/blazing.git auth_type: https From 830d2647577bd4dd73d4a7e738020ad1d894c21c Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 27 Jan 2026 23:10:41 +0800 Subject: [PATCH 03/98] 4 --- .cnb.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.cnb.yml b/.cnb.yml index d53fa90f..765a2b85 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -19,6 +19,16 @@ main: - VERSION="v$(git rev-parse --short=8 HEAD)" - echo "BUILD_VERSION=${VERSION}" + # ========== 缓存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" }}' + # ========== 编译Logic服务 ========== - name: build logic image: golang:1.25 @@ -29,8 +39,19 @@ main: commands: - mkdir -p build - BIN_NAME="logic_${BUILD_VERSION}" + - go mod download -x - go build -v -p=4 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic - ls -lh ./build/ + + # ========== 重建缓存 ========== + - 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" }}' # ========== 拉取部署配置 ========== - name: fetch deploy config From 5b09a182ed148a3bf9bae81d903d9970868fc265 Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 27 Jan 2026 23:22:12 +0800 Subject: [PATCH 04/98] 1 --- .cnb.yml | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 137 insertions(+), 5 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 765a2b85..5e0ce1f2 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -17,7 +17,9 @@ main: image: golang:1.25 commands: - VERSION="v$(git rev-parse --short=8 HEAD)" - - echo "BUILD_VERSION=${VERSION}" + - mkdir -p /tmp/build-info + - echo "BUILD_VERSION=${VERSION}" >> /tmp/build-info/.env + - echo "构建版本号:${VERSION}" # ========== 缓存Go依赖 ========== - name: cache go modules @@ -37,11 +39,33 @@ main: GO111MODULE: on GOSUMDB: off commands: + - source /tmp/build-info/.env || true - mkdir -p build - - BIN_NAME="logic_${BUILD_VERSION}" + - BIN_NAME="logic_${BUILD_VERSION:-unknown}" - go mod download -x - go build -v -p=4 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic - ls -lh ./build/ + - echo "BUILD_VERSION=${BUILD_VERSION}" >> /tmp/build-info/.env + - cat /tmp/build-info/.env + + # ========== 编译Login服务 ========== + - name: build login + image: golang:1.25 + environment: + CGO_ENABLED: 0 + GO111MODULE: on + GOSUMDB: off + commands: + - source /tmp/build-info/.env || true + - cd login + - mkdir -p build + - BIN_NAME="login_${BUILD_VERSION:-unknown}" + - go mod download -x + - go build -v -p=4 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} . + - ls -lh ./build/ + - mv ./build/${BIN_NAME} ../build/ + - cd .. + - ls -lh ./build/ # ========== 重建缓存 ========== - name: rebuild cache @@ -65,11 +89,19 @@ main: REMOTE_HOSTS=$(jq -r '.[].loginaddr' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') REMOTE_USERS=$(jq -r '.[].user' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') REMOTE_PASSWORDS=$(jq -r '.[].password' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') + REMOTE_ONLINE_IDS=$(jq -r '.[].online_id' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') elif [ "$JSON_TYPE" = "object" ]; then REMOTE_HOSTS=$(jq -r '.loginaddr' /tmp/deploy-config.json) REMOTE_USERS=$(jq -r '.user' /tmp/deploy-config.json) REMOTE_PASSWORDS=$(jq -r '.password' /tmp/deploy-config.json) + REMOTE_ONLINE_IDS=$(jq -r '.online_id' /tmp/deploy-config.json) fi + - mkdir -p /tmp/build-info + - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> /tmp/build-info/.env + - echo "REMOTE_USERS=${REMOTE_USERS}" >> /tmp/build-info/.env + - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> /tmp/build-info/.env + - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> /tmp/build-info/.env + - cat /tmp/build-info/.env # ========== SCP推送产物到服务器 ========== - name: scp to servers @@ -78,7 +110,107 @@ main: host: ${REMOTE_HOSTS} username: ${REMOTE_USERS} password: ${REMOTE_PASSWORDS} - source: ./build/logic_${BUILD_VERSION} + source: + - ./build/logic_* + - /tmp/build-info/.env target: /opt/logic/ - strip_components: 1 - skip_verify: true \ No newline at end of file + strip_components: 3 + skip_verify: true + + # ========== SCP推送Login到指定服务器 ========== + - name: scp login to login server + image: appleboy/drone-scp:1.6.2 + settings: + host: ${LOGIN_SERVER_HOST} + username: ${LOGIN_SERVER_USER} + password: ${LOGIN_SERVER_PASSWORD} + port: ${LOGIN_SERVER_PORT} + source: ./build/login_* + target: /opt/login/ + strip_components: 2 + skip_verify: true + + # ========== SSH启动Login服务 ========== + - name: start login service + image: appleboy/drone-ssh:1.6.2 + 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* | head -1) + if [ -z "$BIN_NAME" ]; then + echo "❌ 未找到可执行的login文件" + exit 1 + fi + - echo "📦 启动Login服务 | Binary: ${BIN_NAME}" + - | + # 停止旧的screen会话(使用expect命令) + session_name="login" + session=$(screen -ls | grep -o "[0-9]*\.${session_name}") + if [[ ! -z "$session" ]]; then + screen -X -S "$session_name" stuff "^C" + sleep 2 + screen -X -S "$session_name" quit + echo "Info: Stopped login app." + fi + - sleep 1 + - | + # 启动新进程 + screen -dmS ${session_name} ./${BIN_NAME} + - echo "✅ Login服务启动成功 | Screen: ${session_name}" + + # ========== SSH执行启动命令 ========== + - name: start service on servers + image: appleboy/drone-ssh:1.6.2 + settings: + host: ${REMOTE_HOSTS} + username: ${REMOTE_USERS} + password: ${REMOTE_PASSWORDS} + script: + - cd /opt/logic + - source /opt/logic/.env || { echo "❌ 找不到.env文件"; exit 1; } + - | + # 获取当前服务器在数组中的索引(通过IP匹配) + CURRENT_HOST=$(hostname -I | awk '{print $1}') + IFS=',' read -ra ADDR <<< "${REMOTE_HOSTS}" + IFS=',' read -ra USERS <<< "${REMOTE_USERS}" + IFS=',' read -ra IDS <<< "${REMOTE_ONLINE_IDS}" + + # 找到当前服务器索引 + for i in "${!ADDR[@]}"; do + if [[ "${ADDR[$i]}" == *"$CURRENT_HOST"* ]] || [[ "$CURRENT_HOST" == *"${ADDR[$i]}"* ]]; then + IDX=$i + break + fi + done + + # 如果无法匹配,默认使用第一个 + if [ -z "$IDX" ]; then + IDX=0 + fi + + ONLINE_ID="${IDS[$IDX]}" + BIN_NAME="logic_${BUILD_VERSION}" + SCREEN_NAME="logic_${ONLINE_ID}" + + echo "📦 启动服务 | 服务器: ${ADDR[$IDX]} | OnlineID: ${ONLINE_ID}" + + # 停止旧进程 + screen -S ${SCREEN_NAME} -X quit 2>/dev/null || true + sleep 1 + + # 启动新进程 + screen -dmS ${SCREEN_NAME} ./${BIN_NAME} -id=${ONLINE_ID} + + # 检查启动状态 + sleep 2 + if screen -ls | grep -q "${SCREEN_NAME}"; then + echo "✅ 服务启动成功 | Screen: ${SCREEN_NAME} | OnlineID: ${ONLINE_ID}" + else + echo "❌ 服务启动失败 | Screen: ${SCREEN_NAME}" + fi \ No newline at end of file From fe6dcab27ead461a08dbd828c8fb21bdb8d38c0c Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 27 Jan 2026 23:25:35 +0800 Subject: [PATCH 05/98] 1 --- .cnb.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 5e0ce1f2..150adbe3 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -16,7 +16,7 @@ main: - name: set version image: golang:1.25 commands: - - VERSION="v$(git rev-parse --short=8 HEAD)" + - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - mkdir -p /tmp/build-info - echo "BUILD_VERSION=${VERSION}" >> /tmp/build-info/.env - echo "构建版本号:${VERSION}" @@ -96,12 +96,12 @@ main: REMOTE_PASSWORDS=$(jq -r '.password' /tmp/deploy-config.json) REMOTE_ONLINE_IDS=$(jq -r '.online_id' /tmp/deploy-config.json) fi - - mkdir -p /tmp/build-info - - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> /tmp/build-info/.env - - echo "REMOTE_USERS=${REMOTE_USERS}" >> /tmp/build-info/.env - - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> /tmp/build-info/.env - - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> /tmp/build-info/.env - - cat /tmp/build-info/.env + - mkdir -p /tmp/build-info || true + - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> /tmp/build-info/.env 2>/dev/null || true + - echo "REMOTE_USERS=${REMOTE_USERS}" >> /tmp/build-info/.env 2>/dev/null || true + - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> /tmp/build-info/.env 2>/dev/null || true + - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> /tmp/build-info/.env 2>/dev/null || true + - cat /tmp/build-info/.env 2>/dev/null || true # ========== SCP推送产物到服务器 ========== - name: scp to servers From 926f5d65dac9b66d8b5bcc4e4c575c1147166814 Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 27 Jan 2026 23:28:42 +0800 Subject: [PATCH 06/98] 1 --- .cnb.yml | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 150adbe3..1646afb9 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -12,13 +12,13 @@ main: username: ${GIT_USERNAME} password: ${GIT_ACCESS_TOKEN} - # ========== 生成版本号 ========== + # ========== 生成版本号(作为前置步骤) ========== - name: set version image: golang:1.25 commands: - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - - mkdir -p /tmp/build-info - - echo "BUILD_VERSION=${VERSION}" >> /tmp/build-info/.env + - mkdir -p .build-info + - echo "BUILD_VERSION=${VERSION}" >> .build-info/.env - echo "构建版本号:${VERSION}" # ========== 缓存Go依赖 ========== @@ -39,14 +39,15 @@ main: GO111MODULE: on GOSUMDB: off commands: - - source /tmp/build-info/.env || true + - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" + - BUILD_VERSION="${VERSION}" - mkdir -p build - - BIN_NAME="logic_${BUILD_VERSION:-unknown}" + - BIN_NAME="logic_${BUILD_VERSION}" - go mod download -x - go build -v -p=4 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic - ls -lh ./build/ - - echo "BUILD_VERSION=${BUILD_VERSION}" >> /tmp/build-info/.env - - cat /tmp/build-info/.env + - echo "BUILD_VERSION=${BUILD_VERSION}" >> .build-info/.env + - cat .build-info/.env # ========== 编译Login服务 ========== - name: build login @@ -56,7 +57,8 @@ main: GO111MODULE: on GOSUMDB: off commands: - - source /tmp/build-info/.env || true + - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" + - BUILD_VERSION="${VERSION}" - cd login - mkdir -p build - BIN_NAME="login_${BUILD_VERSION:-unknown}" @@ -96,12 +98,12 @@ main: REMOTE_PASSWORDS=$(jq -r '.password' /tmp/deploy-config.json) REMOTE_ONLINE_IDS=$(jq -r '.online_id' /tmp/deploy-config.json) fi - - mkdir -p /tmp/build-info || true - - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> /tmp/build-info/.env 2>/dev/null || true - - echo "REMOTE_USERS=${REMOTE_USERS}" >> /tmp/build-info/.env 2>/dev/null || true - - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> /tmp/build-info/.env 2>/dev/null || true - - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> /tmp/build-info/.env 2>/dev/null || true - - cat /tmp/build-info/.env 2>/dev/null || true + - mkdir -p .build-info + - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> .build-info/.env + - echo "REMOTE_USERS=${REMOTE_USERS}" >> .build-info/.env + - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> .build-info/.env + - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> .build-info/.env + - cat .build-info/.env # ========== SCP推送产物到服务器 ========== - name: scp to servers @@ -112,9 +114,9 @@ main: password: ${REMOTE_PASSWORDS} source: - ./build/logic_* - - /tmp/build-info/.env + - .build-info/.env target: /opt/logic/ - strip_components: 3 + strip_components: 2 skip_verify: true # ========== SCP推送Login到指定服务器 ========== @@ -173,7 +175,7 @@ main: password: ${REMOTE_PASSWORDS} script: - cd /opt/logic - - source /opt/logic/.env || { echo "❌ 找不到.env文件"; exit 1; } + - source .env || { echo "❌ 找不到.env文件"; exit 1; } - | # 获取当前服务器在数组中的索引(通过IP匹配) CURRENT_HOST=$(hostname -I | awk '{print $1}') From 5a5a28d2b46b6b1e13911d5edcc3d688913754d1 Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 27 Jan 2026 23:36:48 +0800 Subject: [PATCH 07/98] 1 --- .cnb.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 1646afb9..2e92253c 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -105,21 +105,7 @@ main: - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> .build-info/.env - cat .build-info/.env - # ========== SCP推送产物到服务器 ========== - - name: scp to servers - image: appleboy/drone-scp:1.6.2 - settings: - host: ${REMOTE_HOSTS} - username: ${REMOTE_USERS} - password: ${REMOTE_PASSWORDS} - source: - - ./build/logic_* - - .build-info/.env - target: /opt/logic/ - strip_components: 2 - skip_verify: true - - # ========== SCP推送Login到指定服务器 ========== + # ========== SCP推送Login到指定服务器(优先部署)========== - name: scp login to login server image: appleboy/drone-scp:1.6.2 settings: @@ -166,7 +152,21 @@ main: screen -dmS ${session_name} ./${BIN_NAME} - echo "✅ Login服务启动成功 | Screen: ${session_name}" - # ========== SSH执行启动命令 ========== + # ========== SCP推送Logic产物到服务器(后部署)========== + - name: scp logic to servers + image: appleboy/drone-scp:1.6.2 + settings: + host: ${REMOTE_HOSTS} + username: ${REMOTE_USERS} + password: ${REMOTE_PASSWORDS} + source: + - ./build/logic_* + - .build-info/.env + target: /opt/logic/ + strip_components: 2 + skip_verify: true + + # ========== SSH执行Logic启动命令(后部署)========== - name: start service on servers image: appleboy/drone-ssh:1.6.2 settings: From 1d54ba8a87caab70135010d3feb6009456f5eb66 Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 27 Jan 2026 23:50:40 +0800 Subject: [PATCH 08/98] =?UTF-8?q?=E4=BD=A0=E8=BF=99=E6=A0=B7,=E4=BD=A0?= =?UTF-8?q?=E6=94=B9=E6=88=901?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cnb.yml | 111 ++++++++----------------------------------------------- 1 file changed, 16 insertions(+), 95 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 2e92253c..8c27b8b0 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -79,47 +79,23 @@ main: - /root/.cache/go-build cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "go.mod" }}' - # ========== 拉取部署配置 ========== - - name: fetch deploy config - image: alpine:latest - commands: - - apk add --no-cache curl jq - - for i in 1 2 3; do curl -sSL --connect-timeout 10 --max-time 30 "https://你的JSON配置地址.com/deploy.json" -o /tmp/deploy-config.json && break || sleep 2; done - - JSON_TYPE=$(jq -r 'type' /tmp/deploy-config.json 2>/dev/null || echo "invalid") - - | - if [ "$JSON_TYPE" = "array" ]; then - REMOTE_HOSTS=$(jq -r '.[].loginaddr' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_USERS=$(jq -r '.[].user' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_PASSWORDS=$(jq -r '.[].password' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_ONLINE_IDS=$(jq -r '.[].online_id' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - elif [ "$JSON_TYPE" = "object" ]; then - REMOTE_HOSTS=$(jq -r '.loginaddr' /tmp/deploy-config.json) - REMOTE_USERS=$(jq -r '.user' /tmp/deploy-config.json) - REMOTE_PASSWORDS=$(jq -r '.password' /tmp/deploy-config.json) - REMOTE_ONLINE_IDS=$(jq -r '.online_id' /tmp/deploy-config.json) - fi - - mkdir -p .build-info - - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> .build-info/.env - - echo "REMOTE_USERS=${REMOTE_USERS}" >> .build-info/.env - - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> .build-info/.env - - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> .build-info/.env - - cat .build-info/.env - - # ========== SCP推送Login到指定服务器(优先部署)========== - - name: scp login to login server + # ========== SCP推送Login和Logic到指定服务器 ========== + - name: deploy to login server image: appleboy/drone-scp:1.6.2 settings: host: ${LOGIN_SERVER_HOST} username: ${LOGIN_SERVER_USER} password: ${LOGIN_SERVER_PASSWORD} port: ${LOGIN_SERVER_PORT} - source: ./build/login_* - target: /opt/login/ + source: + - ./build/login_* + - ./build/logic_* + target: /opt/ strip_components: 2 skip_verify: true - # ========== SSH启动Login服务 ========== - - name: start login service + # ========== SSH启动Login服务并上传Logic到Public ========== + - name: start login and move logic image: appleboy/drone-ssh:1.6.2 settings: host: ${LOGIN_SERVER_HOST} @@ -137,7 +113,7 @@ main: fi - echo "📦 启动Login服务 | Binary: ${BIN_NAME}" - | - # 停止旧的screen会话(使用expect命令) + # 停止旧的screen会话 session_name="login" session=$(screen -ls | grep -o "[0-9]*\.${session_name}") if [[ ! -z "$session" ]]; then @@ -151,68 +127,13 @@ main: # 启动新进程 screen -dmS ${session_name} ./${BIN_NAME} - echo "✅ Login服务启动成功 | Screen: ${session_name}" - - # ========== SCP推送Logic产物到服务器(后部署)========== - - name: scp logic to servers - image: appleboy/drone-scp:1.6.2 - settings: - host: ${REMOTE_HOSTS} - username: ${REMOTE_USERS} - password: ${REMOTE_PASSWORDS} - source: - - ./build/logic_* - - .build-info/.env - target: /opt/logic/ - strip_components: 2 - skip_verify: true - - # ========== SSH执行Logic启动命令(后部署)========== - - name: start service on servers - image: appleboy/drone-ssh:1.6.2 - settings: - host: ${REMOTE_HOSTS} - username: ${REMOTE_USERS} - password: ${REMOTE_PASSWORDS} - script: - - cd /opt/logic - - source .env || { echo "❌ 找不到.env文件"; exit 1; } - | - # 获取当前服务器在数组中的索引(通过IP匹配) - CURRENT_HOST=$(hostname -I | awk '{print $1}') - IFS=',' read -ra ADDR <<< "${REMOTE_HOSTS}" - IFS=',' read -ra USERS <<< "${REMOTE_USERS}" - IFS=',' read -ra IDS <<< "${REMOTE_ONLINE_IDS}" - - # 找到当前服务器索引 - for i in "${!ADDR[@]}"; do - if [[ "${ADDR[$i]}" == *"$CURRENT_HOST"* ]] || [[ "$CURRENT_HOST" == *"${ADDR[$i]}"* ]]; then - IDX=$i - break - fi - done - - # 如果无法匹配,默认使用第一个 - if [ -z "$IDX" ]; then - IDX=0 - fi - - ONLINE_ID="${IDS[$IDX]}" - BIN_NAME="logic_${BUILD_VERSION}" - SCREEN_NAME="logic_${ONLINE_ID}" - - echo "📦 启动服务 | 服务器: ${ADDR[$IDX]} | OnlineID: ${ONLINE_ID}" - - # 停止旧进程 - screen -S ${SCREEN_NAME} -X quit 2>/dev/null || true - sleep 1 - - # 启动新进程 - screen -dmS ${SCREEN_NAME} ./${BIN_NAME} -id=${ONLINE_ID} - - # 检查启动状态 - sleep 2 - if screen -ls | grep -q "${SCREEN_NAME}"; then - echo "✅ 服务启动成功 | Screen: ${SCREEN_NAME} | OnlineID: ${ONLINE_ID}" + # 移动logic产物到public目录 + LOGIC_BIN=$(ls -t /opt/logic_v* | 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 "❌ 服务启动失败 | Screen: ${SCREEN_NAME}" + echo "⚠️ 未找到Logic产物" fi \ No newline at end of file From 58c7d74ca11d5fa392baeccf750160fb1d2a4772 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:00:02 +0800 Subject: [PATCH 09/98] 1 --- .cnb.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.cnb.yml b/.cnb.yml index 8c27b8b0..c6d022f7 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -82,6 +82,7 @@ main: # ========== 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} From 5f0c6026e1ff348a5633dfe9933d652c48adc9eb Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:05:59 +0800 Subject: [PATCH 10/98] 1 --- .cnb.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.cnb.yml b/.cnb.yml index c6d022f7..08f1341e 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -1,6 +1,9 @@ main: push: - + - runner: + # 指定在 amd64 架构构建节点上执行 + tags: cnb:arch:amd64 + cpus: 1 - stages: # ========== 同步到GitHub ========== - name: sync to github From 8635b5e6a57e03e6ffe892c0e9455900e2d2f4a7 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:20:22 +0800 Subject: [PATCH 11/98] 1 --- .cnb.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 08f1341e..b1b6cf7f 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -87,14 +87,14 @@ main: 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: + SCP_HOST: ${LOGIN_SERVER_HOST} + SCP_USERNAME: ${LOGIN_SERVER_USER} + SCP_PASSWORD: ${LOGIN_SERVER_PASSWORD} + SCP_PORT: ${LOGIN_SERVER_PORT} + SCP_SOURCE: - ./build/login_* - ./build/logic_* - target: /opt/ + SCP_TARGET: /opt/ strip_components: 2 skip_verify: true From d4abb172241095a6e30bd7e6256ca6d4aff6142c Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:24:02 +0800 Subject: [PATCH 12/98] 1 --- .cnb.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index b1b6cf7f..49b79948 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -87,16 +87,15 @@ main: image: appleboy/drone-scp:1.6.2 imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml settings: - SCP_HOST: ${LOGIN_SERVER_HOST} - SCP_USERNAME: ${LOGIN_SERVER_USER} - SCP_PASSWORD: ${LOGIN_SERVER_PASSWORD} - SCP_PORT: ${LOGIN_SERVER_PORT} - SCP_SOURCE: + host: ${LOGIN_SERVER_HOST} + username: ${LOGIN_SERVER_USER} + password: ${LOGIN_SERVER_PASSWORD} + port: ${LOGIN_SERVER_PORT} + source: - ./build/login_* - ./build/logic_* - SCP_TARGET: /opt/ + target: /opt/ strip_components: 2 - skip_verify: true # ========== SSH启动Login服务并上传Logic到Public ========== - name: start login and move logic From b7e21a4038150c5a5f8b6408349e527c18e1cb98 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:31:35 +0800 Subject: [PATCH 13/98] 1 --- .cnb.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.cnb.yml b/.cnb.yml index 49b79948..8d80eaa3 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -100,6 +100,7 @@ main: # ========== 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} From 24577a819e58f8386c9e918fc6ea72ff6754a8f4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:44:02 +0800 Subject: [PATCH 14/98] 1 --- .cnb.yml | 80 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 8d80eaa3..fdc23184 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -8,6 +8,7 @@ main: # ========== 同步到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 @@ -17,74 +18,92 @@ main: # ========== 生成版本号(作为前置步骤) ========== - name: set version - image: golang:1.25 + image: golang:1.23 + cpus: 1 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 + cpus: 1 settings: restore: true mount: - /go/pkg/mod - /root/.cache/go-build - cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "go.mod" }}' + cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "go.mod" }}-{{ checksum "login/go.mod" }}' + depends_on: + - sync to github # ========== 编译Logic服务 ========== - name: build logic - image: golang:1.25 + image: golang:1.23 + cpus: 1 environment: CGO_ENABLED: 0 GO111MODULE: on GOSUMDB: off commands: - - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - - BUILD_VERSION="${VERSION}" + - source .build-info/.env && BUILD_VERSION="${BUILD_VERSION}" - mkdir -p build - BIN_NAME="logic_${BUILD_VERSION}" - go mod download -x - - go build -v -p=4 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic + - go build -v -p=1 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic + - chmod +x ./build/${BIN_NAME} - ls -lh ./build/ - - echo "BUILD_VERSION=${BUILD_VERSION}" >> .build-info/.env - - cat .build-info/.env + - file ./build/${BIN_NAME} + depends_on: + - cache go modules + - set version # ========== 编译Login服务 ========== - name: build login - image: golang:1.25 + image: golang:1.23 + cpus: 1 environment: CGO_ENABLED: 0 GO111MODULE: on GOSUMDB: off commands: - - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - - BUILD_VERSION="${VERSION}" + - source .build-info/.env && BUILD_VERSION="${BUILD_VERSION}" - cd login - mkdir -p build - - BIN_NAME="login_${BUILD_VERSION:-unknown}" + - BIN_NAME="login_${BUILD_VERSION}" - go mod download -x - - go build -v -p=4 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} . + - go build -v -p=1 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} . + - chmod +x ./build/${BIN_NAME} - ls -lh ./build/ - mv ./build/${BIN_NAME} ../build/ - cd .. - ls -lh ./build/ - + depends_on: + - cache go modules + - set version + # ========== 重建缓存 ========== - name: rebuild cache image: meltwater/drone-cache:latest + cpus: 1 settings: rebuild: true mount: - /go/pkg/mod - /root/.cache/go-build - cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "go.mod" }}' + cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "go.mod" }}-{{ checksum "login/go.mod" }}' + depends_on: + - build logic + - build login # ========== SCP推送Login和Logic到指定服务器 ========== - name: deploy to login server image: appleboy/drone-scp:1.6.2 + cpus: 1 imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml settings: host: ${LOGIN_SERVER_HOST} @@ -94,12 +113,15 @@ main: source: - ./build/login_* - ./build/logic_* - target: /opt/ - strip_components: 2 + 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 + cpus: 1 imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml settings: host: ${LOGIN_SERVER_HOST} @@ -110,7 +132,7 @@ main: - cd /opt/login - | # 获取最新的login二进制文件 - BIN_NAME=$(ls -t login_v* | head -1) + BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) if [ -z "$BIN_NAME" ]; then echo "❌ 未找到可执行的login文件" exit 1 @@ -119,11 +141,10 @@ main: - | # 停止旧的screen会话 session_name="login" - session=$(screen -ls | grep -o "[0-9]*\.${session_name}") + session=$(screen -ls 2>/dev/null | grep -o "[0-9]*\.${session_name}" || true) if [[ ! -z "$session" ]]; then - screen -X -S "$session_name" stuff "^C" - sleep 2 - screen -X -S "$session_name" quit + screen -X -S "$session_name" quit 2>/dev/null || true + sleep 1 echo "Info: Stopped login app." fi - sleep 1 @@ -131,13 +152,24 @@ main: # 启动新进程 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 /opt/logic_v* | head -1) + 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 \ No newline at end of file + fi + depends_on: + - deploy to login server \ No newline at end of file From 3885ac3a8d6ef4d5493424765db966ed5d0186ea Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:46:12 +0800 Subject: [PATCH 15/98] 1 --- .cnb.yml | 56 ++++++++++++++++++++++---------------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index fdc23184..e2f6dac5 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -41,8 +41,8 @@ main: depends_on: - sync to github - # ========== 编译Logic服务 ========== - - name: build logic + # ========== 编译Logic和Login服务 ========== + - name: build image: golang:1.23 cpus: 1 environment: @@ -52,36 +52,25 @@ main: commands: - source .build-info/.env && BUILD_VERSION="${BUILD_VERSION}" - mkdir -p build - - BIN_NAME="logic_${BUILD_VERSION}" - - go mod download -x - - go build -v -p=1 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic - - chmod +x ./build/${BIN_NAME} - - ls -lh ./build/ - - file ./build/${BIN_NAME} - depends_on: - - cache go modules - - set version - - # ========== 编译Login服务 ========== - - name: build login - image: golang:1.23 - cpus: 1 - environment: - CGO_ENABLED: 0 - GO111MODULE: on - GOSUMDB: off - commands: - - source .build-info/.env && BUILD_VERSION="${BUILD_VERSION}" - - cd login - - mkdir -p build - - BIN_NAME="login_${BUILD_VERSION}" - - go mod download -x - - go build -v -p=1 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} . - - chmod +x ./build/${BIN_NAME} - - ls -lh ./build/ - - mv ./build/${BIN_NAME} ../build/ - - cd .. - - ls -lh ./build/ + - | + # 编译Logic服务 + BIN_NAME="logic_${BUILD_VERSION}" + go mod download -x + go build -v -p=1 -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 -p=1 -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 @@ -97,8 +86,7 @@ main: - /root/.cache/go-build cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "go.mod" }}-{{ checksum "login/go.mod" }}' depends_on: - - build logic - - build login + - build # ========== SCP推送Login和Logic到指定服务器 ========== - name: deploy to login server From 878bd523c54b43160b6cf3d20bdfa1eeaccc422c Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:48:12 +0800 Subject: [PATCH 16/98] 1 --- .cnb.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index e2f6dac5..d6504d55 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -1,10 +1,8 @@ main: push: - runner: - # 指定在 amd64 架构构建节点上执行 - tags: cnb:arch:amd64 cpus: 1 - - stages: + stages: # ========== 同步到GitHub ========== - name: sync to github image: tencentcom/git-sync From 2375de2daa1b965b6badc350f9cc09d85343dad0 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:49:15 +0800 Subject: [PATCH 17/98] 1 --- .cnb.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index d6504d55..bc67d971 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -41,14 +41,13 @@ main: # ========== 编译Logic和Login服务 ========== - name: build - image: golang:1.23 + image: golang:1.25 cpus: 1 environment: CGO_ENABLED: 0 GO111MODULE: on GOSUMDB: off commands: - - source .build-info/.env && BUILD_VERSION="${BUILD_VERSION}" - mkdir -p build - | # 编译Logic服务 From 2bcad5d10169aad399db5584a9be6119309d5f0c Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:55:05 +0800 Subject: [PATCH 18/98] 1 --- .cnb.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index bc67d971..be5ea927 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -17,7 +17,6 @@ main: # ========== 生成版本号(作为前置步骤) ========== - name: set version image: golang:1.23 - cpus: 1 commands: - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - mkdir -p .build-info @@ -29,7 +28,7 @@ main: # ========== 缓存Go依赖 ========== - name: cache go modules image: meltwater/drone-cache:latest - cpus: 1 + settings: restore: true mount: @@ -42,7 +41,7 @@ main: # ========== 编译Logic和Login服务 ========== - name: build image: golang:1.25 - cpus: 1 + environment: CGO_ENABLED: 0 GO111MODULE: on @@ -53,7 +52,7 @@ main: # 编译Logic服务 BIN_NAME="logic_${BUILD_VERSION}" go mod download -x - go build -v -p=1 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} ./logic + 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} @@ -62,7 +61,7 @@ main: cd login BIN_NAME="login_${BUILD_VERSION}" go mod download -x - go build -v -p=1 -trimpath -buildvcs=false -ldflags "-s -w -buildid= -extldflags '-static'" -o ./build/${BIN_NAME} . + 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/ @@ -75,7 +74,6 @@ main: # ========== 重建缓存 ========== - name: rebuild cache image: meltwater/drone-cache:latest - cpus: 1 settings: rebuild: true mount: @@ -88,7 +86,6 @@ main: # ========== SCP推送Login和Logic到指定服务器 ========== - name: deploy to login server image: appleboy/drone-scp:1.6.2 - cpus: 1 imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml settings: host: ${LOGIN_SERVER_HOST} @@ -106,7 +103,6 @@ main: # ========== SSH启动Login服务并上传Logic到Public ========== - name: start login and move logic image: appleboy/drone-ssh:1.6.2 - cpus: 1 imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml settings: host: ${LOGIN_SERVER_HOST} @@ -128,8 +124,9 @@ main: 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 - sleep 1 echo "Info: Stopped login app." fi - sleep 1 From d83affdc792e9805c7de94290090f5a710cbc4de Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 00:55:46 +0800 Subject: [PATCH 19/98] 1 --- .cnb.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.cnb.yml b/.cnb.yml index be5ea927..dcc86437 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -55,7 +55,6 @@ main: 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 From 0e79b2f961f03e4a61aecb0c7f8fdd656a5f8272 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 01:05:34 +0800 Subject: [PATCH 20/98] 1 --- .cnb.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.cnb.yml b/.cnb.yml index dcc86437..5b1d7310 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -47,6 +47,7 @@ main: GO111MODULE: on GOSUMDB: off commands: + - . .build-info/.env - mkdir -p build - | # 编译Logic服务 From deb53196d5ba102fe3ad1e4f820d3f92a80d5876 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 01:18:18 +0800 Subject: [PATCH 21/98] 1 --- .cnb.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 5b1d7310..42c8df73 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -50,14 +50,12 @@ main: - . .build-info/.env - 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} - | - # 编译Login服务 cd login BIN_NAME="login_${BUILD_VERSION}" go mod download -x From a4f85f33a507824f66850e1c0451dee37c35445b Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 01:26:14 +0800 Subject: [PATCH 22/98] 1 --- .cnb.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.cnb.yml b/.cnb.yml index 42c8df73..6bfc7fca 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -50,12 +50,13 @@ main: - . .build-info/.env - 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} - - | + # 编译Login服务 cd login BIN_NAME="login_${BUILD_VERSION}" go mod download -x From ffd4ef5d8d8c7fa7489adfc03a34f6001e1808a6 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 01:37:24 +0800 Subject: [PATCH 23/98] 1 --- .cnb.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.cnb.yml b/.cnb.yml index 6bfc7fca..d328205d 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -110,6 +110,7 @@ main: port: ${LOGIN_SERVER_PORT} script: - cd /opt/login + - ls - | # 获取最新的login二进制文件 BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) From 20b55c4acad32f24d20a11a5612e8c4f466c292b Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 02:00:01 +0800 Subject: [PATCH 24/98] 1 --- .cnb.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index d328205d..f08353be 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -109,17 +109,16 @@ main: password: ${LOGIN_SERVER_PASSWORD} port: ${LOGIN_SERVER_PORT} script: - - cd /opt/login - - ls - | + cd /opt/login + ls # 获取最新的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}" - - | + echo "📦 启动Login服务 | Binary: ${BIN_NAME}" # 停止旧的screen会话 session_name="login" session=$(screen -ls 2>/dev/null | grep -o "[0-9]*\.${session_name}" || true) @@ -129,12 +128,10 @@ main: screen -X -S "$session_name" quit 2>/dev/null || true echo "Info: Stopped login app." fi - - sleep 1 - - | + sleep 1 # 启动新进程 screen -dmS ${session_name} ./${BIN_NAME} - - echo "✅ Login服务启动成功 | Screen: ${session_name}" - - | + echo "✅ Login服务启动成功 | Screen: ${session_name}" # 等待服务启动并进行健康检查 sleep 3 if screen -list 2>/dev/null | grep -q "${session_name}"; then @@ -143,7 +140,6 @@ main: 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 From 7129af5f35e9b638bb8f4fdbeb34a64c1dd9cef8 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 02:09:30 +0800 Subject: [PATCH 25/98] 1 --- .cnb.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cnb.yml b/.cnb.yml index f08353be..3658dc65 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -111,7 +111,7 @@ main: script: - | cd /opt/login - ls + ls -t login_v* 2>/dev/null | head -1 # 获取最新的login二进制文件 BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) if [ -z "$BIN_NAME" ]; then From 6b5ba5851a998675322ae9de47f0d6118da8cb43 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 02:17:58 +0800 Subject: [PATCH 26/98] 1 --- .cnb.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.cnb.yml b/.cnb.yml index 3658dc65..79e44d7c 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -114,6 +114,7 @@ main: ls -t login_v* 2>/dev/null | head -1 # 获取最新的login二进制文件 BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) + echo ${BIN_NAME} if [ -z "$BIN_NAME" ]; then echo "❌ 未找到可执行的login文件" exit 1 From c1a8ba15d9d735dc9c98ee5587dbc1f7560b90ef Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 02:28:05 +0800 Subject: [PATCH 27/98] 1 --- .cnb.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 79e44d7c..3f420e6b 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -111,15 +111,13 @@ main: script: - | cd /opt/login - ls -t login_v* 2>/dev/null | head -1 - # 获取最新的login二进制文件 BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) - echo ${BIN_NAME} + echo "BIN_NAME: $BIN_NAME" if [ -z "$BIN_NAME" ]; then echo "❌ 未找到可执行的login文件" exit 1 fi - echo "📦 启动Login服务 | Binary: ${BIN_NAME}" + echo "📦 启动Login服务 | Binary: $BIN_NAME" # 停止旧的screen会话 session_name="login" session=$(screen -ls 2>/dev/null | grep -o "[0-9]*\.${session_name}" || true) @@ -145,8 +143,8 @@ main: 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})" + mv $LOGIC_BIN /opt/login/public/ + echo "✅ Logic产物已移动到 /opt/login/public/ | 文件: $(basename $LOGIC_BIN)" else echo "⚠️ 未找到Logic产物" fi From 772f433ef0205f12956aca6d630ca53928f470aa Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 09:34:52 +0800 Subject: [PATCH 28/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index ca1a6c0e..24d3551c 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -21,10 +21,10 @@ steps: sync-to-github: image: tencentcom/git-sync settings: - target_url: https://github.com/72wo/blazing.git + target_url: https://cnb.cool/blzing/blazing auth_type: https - username: ${GIT_USERNAME} - password: ${GIT_ACCESS_TOKEN} + username: cnb + password: ${CNB_ACCK} when: event: - push From ce6083e7b06dbfc64dcb2d39b40594040d2bdce4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 09:35:23 +0800 Subject: [PATCH 29/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20.c?= =?UTF-8?q?nb.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cnb.yml | 137 ------------------------------------------------------- 1 file changed, 137 deletions(-) diff --git a/.cnb.yml b/.cnb.yml index 3f420e6b..1f516774 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -13,140 +13,3 @@ main: 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: - - . .build-info/.env - - 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} - # 编译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 - BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) - echo "BIN_NAME: $BIN_NAME" - 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 \ No newline at end of file From 0748fa009db7d9841b68b6f0517e156d46032453 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 09:53:10 +0800 Subject: [PATCH 30/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 120 +++++++++++------------------ 1 file changed, 46 insertions(+), 74 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 24d3551c..7122cc9b 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -12,25 +12,11 @@ skip_clone: true variables: SCREEN_NAME: "logic_service" REMOTE_EXE_DIR: "/opt/logic" - JSON_CONFIG_URL: "https://你的JSON配置地址.com/deploy.json" + GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" LOG_PATH: "$HOME/run.log" - + # 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 steps: - # ========== 0. 同步代码到GitHub(与prepare并行执行) ========== - sync-to-github: - image: tencentcom/git-sync - settings: - target_url: https://cnb.cool/blzing/blazing - auth_type: https - username: cnb - password: ${CNB_ACCK} - when: - event: - - push - branch: - - main - # ========== 1. 替代clone:拉取代码(核心依赖) ========== prepare: image: debian:bookworm @@ -38,84 +24,70 @@ steps: WOODPECKER_SSH_KEY: from_secret: WOODPECKER_SSH_KEY commands: - # 调试:验证变量是否传递 - - echo "🔍 调试:WOODPECKER_SSH_KEY变量长度 = ${#WOODPECKER_SSH_KEY}" - - echo "🔍 调试:当前环境变量列表(筛选SSH相关)" - - env | grep -i ssh || echo "⚠️ 无SSH相关环境变量" + # 系统初始化 - apt update -y - - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev - - # 清理旧SSH文件,严格配置权限 - - rm -rf /root/.ssh/* - - mkdir -p /root/.ssh && chmod 700 /root/.ssh - - DEPLOY_KEY_FILE="$HOME/.ssh/deploy_key" - - # 关键修复:SSH密钥写入(EOF内无缩进) - - | - cat > /root/.ssh/id_ed25519 << EOF - $WOODPECKER_SSH_KEY - EOF - chmod 600 /root/.ssh/id_ed25519 - echo "✅ ED25519密钥写入完成" - - # 添加GitHub主机密钥 - - SSH_KNOWN_HOSTS_FILE="$HOME/.ssh/known_hosts" - - ssh-keyscan -H github.com > /root/.ssh/known_hosts - - chmod 600 /root/.ssh/known_hosts - - +# 格式:git clone https://用户名:密码@仓库地址 - - - - echo "🔍 ${#CI_REPO_CLONE_SSH_URL}调试: ${CI_REPO_CLONE_SSH_URL}" - - git config --global core.compression 0 - - - git clone --depth 1 --progress -v ${CI_REPO_CLONE_SSH_URL} + - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} # 拉取代码 - echo "✅ 代码拉取完成" - # ========== 3. 生成版本号(依赖prepare:代码拉取完成) ========== - set-version: - image: golang:1.25 - depends_on: [prepare] - commands: - - | - VERSION="v$(git rev-parse --short=8 HEAD)" - echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" - echo "构建版本号:${VERSION}" - echo "✅ 生成版本号:${VERSION}" + # # ========== 2. 初始化Go环境(依赖prepare:代码拉取完成) ========== + # prepare-go: # 与prepare同级,缩进2个空格 + # image: golang:1.25 # 子元素,缩进4个空格 + # depends_on: [prepare] # 子元素,缩进4个空格 + # commands: # 子元素,缩进4个空格 + # - go version # commands内的项,缩进6个空格 + # - go mod download -x || { echo "❌ 下载Go依赖失败"; exit 1; } # 统一缩进6个空格 + # - go mod verify || { echo "❌ 验证Go依赖失败"; exit 1; } # 统一缩进6个空格 + # - echo "✅ Go环境初始化完成" # 统一缩进6个空格 - # ========== 4. 编译Logic服务(完全参考GitHub Actions编译配置) ========== - build_logic: - image: golang:1.25 - depends_on: [prepare] - environment: - CGO_ENABLED: 0 - GO111MODULE: on - GOSUMDB: off - commands: - - mkdir -p build - - BIN_NAME="logic_${BUILD_VERSION}" - - | + # # ========== 3. 生成版本号(依赖prepare-go:Go环境就绪) ========== + # set-version: # 与prepare-go同级,缩进2个空格 + # image: golang:1.25 # 子元素,缩进4个空格 + # depends_on: [prepare-go] # 子元素,缩进4个空格 + # commands: # 子元素,缩进4个空格 + # - | # commands内的项,缩进6个空格 + # if [ -n "${CI_COMMIT_TAG}" ]; then + # VERSION="${CI_COMMIT_TAG}" + # else + # VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" + # fi + # mkdir -p "$(dirname "$CI_ENV_FILE")" + # echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" + # echo "✅ 生成版本号:${VERSION}" + + # ========== 4. 编译Go服务(核心依赖:prepare+prepare-go+set-version) ========== + build_logic: # 与set-version同级,缩进2个空格 + image: golang:1.25 # 子元素,缩进4个空格 + depends_on: [prepare] # 子元素,缩进4个空格 + environment: # 子元素,缩进4个空格 + CGO_ENABLED: 0 # environment内的项,缩进6个空格 + GO111MODULE: on # 统一缩进6个空格 + GOSUMDB: off # 统一缩进6个空格 + commands: # 子元素,缩进4个空格 + - mkdir -p build # commands内的项,缩进6个空格 + - BIN_NAME="logic_${CI_STEP_STARTED}" # 缩进6个空格 + - | # 缩进6个空格 go build -v \ -p=4 \ -trimpath \ -buildvcs=false \ - -ldflags "-s -w -buildid= -extldflags '-static'" \ + -ldflags "-s -w -buildid= -extldflags '-static' -X main.version=${CI_STEP_STARTED}" \ -o ./build/${BIN_NAME} \ ./logic - - | + - | # 缩进6个空格 if [ ! -f ./build/${BIN_NAME} ]; then echo "❌ 编译失败:产物${BIN_NAME}不存在" exit 1 fi - - ls -lh ./build/ - - echo "产物名称:${BIN_NAME}" - - echo "✅ Logic服务编译完成" + - ls -lh ./build/ # 缩进6个空格 + - ./build/${BIN_NAME} -v || true # 缩进6个空格 + - echo "✅ Go服务编译完成" # 缩进6个空格 # ========== 5. 拉取部署配置(可并行,依赖prepare确保代码拉取完成) ========== fetch-deploy-config: # 与build_logic同级,缩进2个空格 From bf007cb4ed7664cf82b824b520b315db0e1362b4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 09:56:27 +0800 Subject: [PATCH 31/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 7122cc9b..0846ee18 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -9,7 +9,7 @@ skip_clone: true # 全局配置变量(替换占位符即可使用) -variables: +environment: SCREEN_NAME: "logic_service" REMOTE_EXE_DIR: "/opt/logic" GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" From 4b018101176d37af7ff39d9ea1cf51c016112f14 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 09:59:06 +0800 Subject: [PATCH 32/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 0846ee18..14a57a33 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -12,7 +12,6 @@ skip_clone: true environment: SCREEN_NAME: "logic_service" REMOTE_EXE_DIR: "/opt/logic" - GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" LOG_PATH: "$HOME/run.log" # 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 @@ -23,6 +22,7 @@ steps: environment: WOODPECKER_SSH_KEY: from_secret: WOODPECKER_SSH_KEY + GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" commands: From df344d17c2e642a87ecb72692a51c89fbb267526 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:00:27 +0800 Subject: [PATCH 33/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 14a57a33..6193b1f7 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -28,6 +28,8 @@ steps: # 系统初始化 - apt update -y + # 系统初始化 + - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev # 格式:git clone https://用户名:密码@仓库地址 From ce4a69537e900c8da86560a286ad8e288fa2e33a Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:03:14 +0800 Subject: [PATCH 34/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 6193b1f7..dbc3c38c 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -24,6 +24,7 @@ steps: from_secret: WOODPECKER_SSH_KEY GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" commands: + - export GIT_CONFIG_URL=$${GIT_CONFIG_URL} # 系统初始化 From 0a3d81050a233c2f955e0d33cb93ddb40bf6315d Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:14:04 +0800 Subject: [PATCH 35/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index dbc3c38c..ea8d0f97 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -8,11 +8,7 @@ when: skip_clone: true -# 全局配置变量(替换占位符即可使用) -environment: - SCREEN_NAME: "logic_service" - REMOTE_EXE_DIR: "/opt/logic" - LOG_PATH: "$HOME/run.log" + # 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 steps: @@ -24,7 +20,6 @@ steps: from_secret: WOODPECKER_SSH_KEY GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" commands: - - export GIT_CONFIG_URL=$${GIT_CONFIG_URL} # 系统初始化 @@ -34,7 +29,7 @@ steps: # 格式:git clone https://用户名:密码@仓库地址 - - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} + - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} # 拉取代码 - echo "✅ 代码拉取完成" From 770641e7e1e69542f7b2afbe415562b589af923a Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:15:58 +0800 Subject: [PATCH 36/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index ea8d0f97..fa169761 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -16,8 +16,6 @@ steps: prepare: image: debian:bookworm environment: - WOODPECKER_SSH_KEY: - from_secret: WOODPECKER_SSH_KEY GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" commands: From 2b2031fc40557b8a691eca55ea2dbd00a9e80246 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:19:07 +0800 Subject: [PATCH 37/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index fa169761..f7a28708 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -26,6 +26,7 @@ steps: - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev # 格式:git clone https://用户名:密码@仓库地址 + - echo "🔍 ${#GIT_CONFIG_URL}调试: ${GIT_CONFIG_URL}" - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} # 拉取代码 From 157d7f464ecf01c2195791b03c394d292bbeebf4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:23:46 +0800 Subject: [PATCH 38/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index f7a28708..29072b8f 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -12,11 +12,12 @@ skip_clone: true # 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 steps: + environment: + GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" # ========== 1. 替代clone:拉取代码(核心依赖) ========== prepare: image: debian:bookworm - environment: - GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" + commands: From a7a33e3ad85eaa65d78f094db1f7d46a1888a26f Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:31:29 +0800 Subject: [PATCH 39/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 29072b8f..e82a9884 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -12,14 +12,12 @@ skip_clone: true # 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 steps: +- name: prepare environment: GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" # ========== 1. 替代clone:拉取代码(核心依赖) ========== - prepare: image: debian:bookworm - commands: - # 系统初始化 - apt update -y From 32673e7d18f54678f1ea1c3db7a25f0ee71018f4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:32:28 +0800 Subject: [PATCH 40/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index e82a9884..741b645f 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -13,10 +13,11 @@ skip_clone: true # 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 steps: - name: prepare + image: debian:bookworm environment: GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" # ========== 1. 替代clone:拉取代码(核心依赖) ========== - image: debian:bookworm + commands: # 系统初始化 From cd9b4c1a3e9c8c019f584b50ebca1c6acdc8997c Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:34:19 +0800 Subject: [PATCH 41/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 741b645f..b0b11ee7 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -18,7 +18,7 @@ steps: GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" # ========== 1. 替代clone:拉取代码(核心依赖) ========== - commands: + commands: # 系统初始化 - apt update -y From 9fe627078e94a98e9d781ad34a7e89b102879198 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:35:47 +0800 Subject: [PATCH 42/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index b0b11ee7..5df8a870 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -19,19 +19,18 @@ steps: # ========== 1. 替代clone:拉取代码(核心依赖) ========== commands: - # 系统初始化 - - apt update -y + - apt update -y # 系统初始化 - - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev + - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev # 格式:git clone https://用户名:密码@仓库地址 - - echo "🔍 ${#GIT_CONFIG_URL}调试: ${GIT_CONFIG_URL}" + - echo "🔍 ${#GIT_CONFIG_URL}调试: ${GIT_CONFIG_URL}" - - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} + - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} # 拉取代码 - - echo "✅ 代码拉取完成" + - echo "✅ 代码拉取完成" # # ========== 2. 初始化Go环境(依赖prepare:代码拉取完成) ========== # prepare-go: # 与prepare同级,缩进2个空格 From e9403e2fb6cc998e6e4591b14cb46beffc169c42 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:38:27 +0800 Subject: [PATCH 43/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 5df8a870..dbf922fc 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -15,10 +15,10 @@ steps: - name: prepare image: debian:bookworm environment: - GIT_CONFIG_URL: "https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" # ========== 1. 替代clone:拉取代码(核心依赖) ========== commands: + - export GIT_CONFIG_URL="https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" # 系统初始化 - apt update -y # 系统初始化 From 8699ab5a6772312316da94b78fe122f6d5543d2f Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:40:20 +0800 Subject: [PATCH 44/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index dbf922fc..3c210739 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -18,7 +18,7 @@ steps: # ========== 1. 替代clone:拉取代码(核心依赖) ========== commands: - - export GIT_CONFIG_URL="https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" + - export GIT_CONFIG_URL="https://cnb:"+$CNB_ACCK"@cnb.cool/blzing/blazing" # 系统初始化 - apt update -y # 系统初始化 From 11705eeba9166432bbfee850fbc64c00426c4762 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:52:09 +0800 Subject: [PATCH 45/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 188 +++++++++++++++-------------- 1 file changed, 98 insertions(+), 90 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 3c210739..6fa05212 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -5,94 +5,99 @@ when: - manual branch: main -skip_clone: true +skip_clone: true # 关闭默认clone,手动拉取代码 - - - -# 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 +# 流水线核心步骤:修复层级缩进+依赖链+变量传递 steps: -- name: prepare - image: debian:bookworm - environment: # ========== 1. 替代clone:拉取代码(核心依赖) ========== - - commands: - - export GIT_CONFIG_URL="https://cnb:"+$CNB_ACCK"@cnb.cool/blzing/blazing" + - name: prepare + image: debian:bookworm + commands: + # 修复:Shell变量拼接错误(移除多余"+"和引号,用${}规范引用) + - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" # 系统初始化 - - apt update -y - # 系统初始化 - - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev + - apt update -y + - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev + # 调试变量(可选,上线后可删除) + - echo "🔍 调试:GIT_CONFIG_URL长度=${#GIT_CONFIG_URL},值=${GIT_CONFIG_URL}" + # 拉取代码(--depth 1 浅克隆提速) + - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} blazing-project + # 修复:必须进入项目目录,否则后续go build找不到代码 + - cd blazing-project + - echo "✅ 代码拉取完成,当前目录:$(pwd)" -# 格式:git clone https://用户名:密码@仓库地址 - - echo "🔍 ${#GIT_CONFIG_URL}调试: ${GIT_CONFIG_URL}" + # ========== 2. 初始化Go环境(依赖prepare:代码拉取完成) ========== + - name: prepare-go + image: golang:1.25 + depends_on: [prepare] + commands: + - cd blazing-project # 同步进入项目目录 + - go version + # 增强容错:失败时输出详细信息 + - go mod download -x || { echo "❌ 下载Go依赖失败"; ls -lh go.mod; exit 1; } + - go mod verify || { echo "❌ 验证Go依赖失败"; exit 1; } + - echo "✅ Go环境初始化完成" - - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} - # 拉取代码 - - - echo "✅ 代码拉取完成" + # ========== 3. 生成版本号(依赖prepare-go:Go环境就绪) ========== + - name: set-version + image: golang:1.25 + depends_on: [prepare-go] + commands: + - cd blazing-project + - | + if [ -n "${CI_COMMIT_TAG}" ]; then + VERSION="${CI_COMMIT_TAG}" + else + VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" + fi + # 确保CI_ENV_FILE目录存在(Woodpecker预定义变量,用于跨步骤传参) + mkdir -p "$(dirname "${CI_ENV_FILE}")" + echo "BUILD_VERSION=${VERSION}" >> "${CI_ENV_FILE}" + echo "✅ 生成版本号:${VERSION}" - # # ========== 2. 初始化Go环境(依赖prepare:代码拉取完成) ========== - # prepare-go: # 与prepare同级,缩进2个空格 - # image: golang:1.25 # 子元素,缩进4个空格 - # depends_on: [prepare] # 子元素,缩进4个空格 - # commands: # 子元素,缩进4个空格 - # - go version # commands内的项,缩进6个空格 - # - go mod download -x || { echo "❌ 下载Go依赖失败"; exit 1; } # 统一缩进6个空格 - # - go mod verify || { echo "❌ 验证Go依赖失败"; exit 1; } # 统一缩进6个空格 - # - echo "✅ Go环境初始化完成" # 统一缩进6个空格 - - # # ========== 3. 生成版本号(依赖prepare-go:Go环境就绪) ========== - # set-version: # 与prepare-go同级,缩进2个空格 - # image: golang:1.25 # 子元素,缩进4个空格 - # depends_on: [prepare-go] # 子元素,缩进4个空格 - # commands: # 子元素,缩进4个空格 - # - | # commands内的项,缩进6个空格 - # if [ -n "${CI_COMMIT_TAG}" ]; then - # VERSION="${CI_COMMIT_TAG}" - # else - # VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - # fi - # mkdir -p "$(dirname "$CI_ENV_FILE")" - # echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" - # echo "✅ 生成版本号:${VERSION}" - - # ========== 4. 编译Go服务(核心依赖:prepare+prepare-go+set-version) ========== - build_logic: # 与set-version同级,缩进2个空格 - image: golang:1.25 # 子元素,缩进4个空格 - depends_on: [prepare] # 子元素,缩进4个空格 - environment: # 子元素,缩进4个空格 - CGO_ENABLED: 0 # environment内的项,缩进6个空格 - GO111MODULE: on # 统一缩进6个空格 - GOSUMDB: off # 统一缩进6个空格 - commands: # 子元素,缩进4个空格 - - mkdir -p build # commands内的项,缩进6个空格 - - BIN_NAME="logic_${CI_STEP_STARTED}" # 缩进6个空格 - - | # 缩进6个空格 + # ========== 4. 编译Go服务(依赖:prepare+prepare-go+set-version) ========== + - name: build_logic + image: golang:1.25 + depends_on: [prepare, prepare-go, set-version] + environment: + CGO_ENABLED: 0 + GO111MODULE: on + GOSUMDB: off + commands: + - cd blazing-project + - mkdir -p build + # 定义二进制文件名(加入版本号更易追溯) + - BIN_NAME="logic_${BUILD_VERSION}_${CI_STEP_STARTED}" + - | go build -v \ -p=4 \ -trimpath \ -buildvcs=false \ - -ldflags "-s -w -buildid= -extldflags '-static' -X main.version=${CI_STEP_STARTED}" \ + -ldflags "-s -w -buildid= -extldflags '-static' -X main.version=${BUILD_VERSION}" \ -o ./build/${BIN_NAME} \ ./logic - - | # 缩进6个空格 + # 校验编译产物 + - | if [ ! -f ./build/${BIN_NAME} ]; then echo "❌ 编译失败:产物${BIN_NAME}不存在" + ls -lh ./build/ exit 1 fi - - ls -lh ./build/ # 缩进6个空格 - - ./build/${BIN_NAME} -v || true # 缩进6个空格 - - echo "✅ Go服务编译完成" # 缩进6个空格 + - ls -lh ./build/ + - ./build/${BIN_NAME} -v || true + # 修复:将BIN_NAME写入CI_ENV_FILE,供后续scp步骤使用 + - echo "BIN_NAME=${BIN_NAME}" >> "${CI_ENV_FILE}" + - echo "✅ Go服务编译完成,产物:${BIN_NAME}" # ========== 5. 拉取部署配置(可并行,依赖prepare确保代码拉取完成) ========== - fetch-deploy-config: # 与build_logic同级,缩进2个空格 - image: alpine:latest # 子元素,缩进4个空格 - depends_on: [prepare] # 子元素,缩进4个空格 - commands: # 子元素,缩进4个空格 - - apk add --no-cache curl jq # commands内的项,缩进6个空格 - - echo "🔧 拉取部署配置:${JSON_CONFIG_URL}" # 缩进6个空格 - - | # 缩进6个空格 + - name: fetch-deploy-config + image: alpine:latest + depends_on: [prepare] + commands: + - apk add --no-cache curl jq + - echo "🔧 拉取部署配置:${JSON_CONFIG_URL}" + # 增强重试逻辑(3次重试) + - | for i in 1 2 3; do curl -sSL --connect-timeout 10 --max-time 30 "${JSON_CONFIG_URL}" -o /tmp/deploy-config.json && break echo "⚠️ 第${i}次拉取失败,重试中..." @@ -102,7 +107,8 @@ steps: echo "❌ 拉取JSON配置失败" exit 1 fi - - | # 缩进6个空格 + # 解析JSON配置(兼容数组/对象格式) + - | JSON_TYPE=$(jq -r 'type' /tmp/deploy-config.json 2>/dev/null || echo "invalid") if [ "$JSON_TYPE" = "array" ]; then REMOTE_HOSTS=$(jq -r '.[].loginaddr' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') @@ -119,30 +125,32 @@ steps: cat /tmp/deploy-config.json exit 1 fi - - | # 缩进6个空格 + # 校验解析结果 + - | if [ -z "$REMOTE_HOSTS" ] || [ -z "$REMOTE_USERS" ]; then echo "❌ 解析配置失败:服务器/用户名为空" cat /tmp/deploy-config.json exit 1 fi - - echo "✅ 配置解析完成 | 服务器:${REMOTE_HOSTS} | OnlineID:${REMOTE_ONLINE_IDS}" # 缩进6个空格 - - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> "$CI_ENV_FILE" # 缩进6个空格 - - echo "REMOTE_USERS=${REMOTE_USERS}" >> "$CI_ENV_FILE" # 缩进6个空格 - - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> "$CI_ENV_FILE" # 缩进6个空格 - - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> "$CI_ENV_FILE" # 缩进6个空格 + - echo "✅ 配置解析完成 | 服务器:${REMOTE_HOSTS} | OnlineID:${REMOTE_ONLINE_IDS}" + # 写入环境文件供后续步骤使用 + - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> "${CI_ENV_FILE}" + - echo "REMOTE_USERS=${REMOTE_USERS}" >> "${CI_ENV_FILE}" + - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> "${CI_ENV_FILE}" + - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> "${CI_ENV_FILE}" # ========== 6. SCP推送产物(依赖编译+配置解析) ========== - scp-exe-to-servers: # 与fetch-deploy-config同级,缩进2个空格 - image: appleboy/drone-scp:1.6.2 # 子元素,缩进4个空格 - settings: # 子元素,缩进4个空格 - host: ${REMOTE_HOSTS} # settings内的项,缩进6个空格 - username: ${REMOTE_USERS} # 统一缩进6个空格 - password: ${REMOTE_PASSWORDS} # 统一缩进6个空格 - source: ./build/${BIN_NAME} # 统一缩进6个空格 - target: ${REMOTE_EXE_DIR}/ # 统一缩进6个空格 - strip_components: 1 # 统一缩进6个空格 - skip_verify: true # 统一缩进6个空格 - timeout: 30s # 统一缩进6个空格 - depends_on: # 子元素,缩进4个空格 - - build_logic # depends_on内的项,缩进6个空格 - - fetch-deploy-config # 统一缩进6个空格 + - name: scp-exe-to-servers + image: appleboy/drone-scp:1.6.2 + depends_on: + - build_logic + - fetch-deploy-config + settings: + host: ${REMOTE_HOSTS} + username: ${REMOTE_USERS} + password: ${REMOTE_PASSWORDS} + source: ./blazing-project/build/${BIN_NAME} # 修复:补充项目目录路径 + target: ${REMOTE_EXE_DIR}/ + strip_components: 3 # 修复:路径层级调整(blazing-project/build/xxx → 直接取xxx) + skip_verify: true + timeout: 30s From 46da95184485019340a5352495ea9ea549356047 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:55:32 +0800 Subject: [PATCH 46/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 48 +++++++++++++----------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 6fa05212..d3ffbd54 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -7,38 +7,36 @@ when: skip_clone: true # 关闭默认clone,手动拉取代码 -# 流水线核心步骤:修复层级缩进+依赖链+变量传递 +# 流水线核心步骤:修复变量解析+YAML语法 steps: # ========== 1. 替代clone:拉取代码(核心依赖) ========== - name: prepare image: debian:bookworm commands: - # 修复:Shell变量拼接错误(移除多余"+"和引号,用${}规范引用) + # 修复:变量拼接语法(Shell规范,避免解析错误) - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" # 系统初始化 - apt update -y - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev - # 调试变量(可选,上线后可删除) - - echo "🔍 调试:GIT_CONFIG_URL长度=${#GIT_CONFIG_URL},值=${GIT_CONFIG_URL}" - # 拉取代码(--depth 1 浅克隆提速) + # 修复:移除${#VAR}的#(避免YAML误解析注释符),改用wc -c统计长度 + - echo "🔍 调试:GIT_CONFIG_URL长度=$(echo -n "${GIT_CONFIG_URL}" | wc -c),值=${GIT_CONFIG_URL}" + # 拉取代码(指定目录,避免路径混乱) - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} blazing-project - # 修复:必须进入项目目录,否则后续go build找不到代码 - cd blazing-project - echo "✅ 代码拉取完成,当前目录:$(pwd)" - # ========== 2. 初始化Go环境(依赖prepare:代码拉取完成) ========== + # ========== 2. 初始化Go环境(依赖prepare) ========== - name: prepare-go image: golang:1.25 depends_on: [prepare] commands: - - cd blazing-project # 同步进入项目目录 + - cd blazing-project - go version - # 增强容错:失败时输出详细信息 - go mod download -x || { echo "❌ 下载Go依赖失败"; ls -lh go.mod; exit 1; } - go mod verify || { echo "❌ 验证Go依赖失败"; exit 1; } - echo "✅ Go环境初始化完成" - # ========== 3. 生成版本号(依赖prepare-go:Go环境就绪) ========== + # ========== 3. 生成版本号(依赖prepare-go) ========== - name: set-version image: golang:1.25 depends_on: [prepare-go] @@ -50,12 +48,11 @@ steps: else VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" fi - # 确保CI_ENV_FILE目录存在(Woodpecker预定义变量,用于跨步骤传参) mkdir -p "$(dirname "${CI_ENV_FILE}")" echo "BUILD_VERSION=${VERSION}" >> "${CI_ENV_FILE}" echo "✅ 生成版本号:${VERSION}" - # ========== 4. 编译Go服务(依赖:prepare+prepare-go+set-version) ========== + # ========== 4. 编译Go服务(依赖prepare+prepare-go+set-version) ========== - name: build_logic image: golang:1.25 depends_on: [prepare, prepare-go, set-version] @@ -66,8 +63,8 @@ steps: commands: - cd blazing-project - mkdir -p build - # 定义二进制文件名(加入版本号更易追溯) - - BIN_NAME="logic_${BUILD_VERSION}_${CI_STEP_STARTED}" + # 修复:变量名仅包含字母/数字/下划线(避免解析错误) + - BIN_NAME="logic_${BUILD_VERSION}_$(echo ${CI_STEP_STARTED} | tr -cd 'a-zA-Z0-9_')" - | go build -v \ -p=4 \ @@ -76,7 +73,6 @@ steps: -ldflags "-s -w -buildid= -extldflags '-static' -X main.version=${BUILD_VERSION}" \ -o ./build/${BIN_NAME} \ ./logic - # 校验编译产物 - | if [ ! -f ./build/${BIN_NAME} ]; then echo "❌ 编译失败:产物${BIN_NAME}不存在" @@ -85,18 +81,16 @@ steps: fi - ls -lh ./build/ - ./build/${BIN_NAME} -v || true - # 修复:将BIN_NAME写入CI_ENV_FILE,供后续scp步骤使用 - echo "BIN_NAME=${BIN_NAME}" >> "${CI_ENV_FILE}" - echo "✅ Go服务编译完成,产物:${BIN_NAME}" - # ========== 5. 拉取部署配置(可并行,依赖prepare确保代码拉取完成) ========== + # ========== 5. 拉取部署配置(依赖prepare) ========== - name: fetch-deploy-config image: alpine:latest depends_on: [prepare] commands: - apk add --no-cache curl jq - echo "🔧 拉取部署配置:${JSON_CONFIG_URL}" - # 增强重试逻辑(3次重试) - | for i in 1 2 3; do curl -sSL --connect-timeout 10 --max-time 30 "${JSON_CONFIG_URL}" -o /tmp/deploy-config.json && break @@ -107,7 +101,6 @@ steps: echo "❌ 拉取JSON配置失败" exit 1 fi - # 解析JSON配置(兼容数组/对象格式) - | JSON_TYPE=$(jq -r 'type' /tmp/deploy-config.json 2>/dev/null || echo "invalid") if [ "$JSON_TYPE" = "array" ]; then @@ -125,7 +118,6 @@ steps: cat /tmp/deploy-config.json exit 1 fi - # 校验解析结果 - | if [ -z "$REMOTE_HOSTS" ] || [ -z "$REMOTE_USERS" ]; then echo "❌ 解析配置失败:服务器/用户名为空" @@ -133,24 +125,24 @@ steps: exit 1 fi - echo "✅ 配置解析完成 | 服务器:${REMOTE_HOSTS} | OnlineID:${REMOTE_ONLINE_IDS}" - # 写入环境文件供后续步骤使用 - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> "${CI_ENV_FILE}" - echo "REMOTE_USERS=${REMOTE_USERS}" >> "${CI_ENV_FILE}" - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> "${CI_ENV_FILE}" - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> "${CI_ENV_FILE}" - # ========== 6. SCP推送产物(依赖编译+配置解析) ========== + # ========== 6. SCP推送产物(核心修复:变量引用格式) ========== - name: scp-exe-to-servers image: appleboy/drone-scp:1.6.2 depends_on: - build_logic - fetch-deploy-config settings: - host: ${REMOTE_HOSTS} - username: ${REMOTE_USERS} - password: ${REMOTE_PASSWORDS} - source: ./blazing-project/build/${BIN_NAME} # 修复:补充项目目录路径 - target: ${REMOTE_EXE_DIR}/ - strip_components: 3 # 修复:路径层级调整(blazing-project/build/xxx → 直接取xxx) + # 核心修复:Woodpecker settings块必须用Go模板语法 {{ VAR }},而非${VAR} + host: {{ REMOTE_HOSTS }} + username: {{ REMOTE_USERS }} + password: {{ REMOTE_PASSWORDS }} + source: ./blazing-project/build/{{ BIN_NAME }} + target: {{ REMOTE_EXE_DIR }}/ + strip_components: 3 skip_verify: true timeout: 30s From e218debe25be16b252e97ce8a33cf8adf0d8817f Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 10:58:58 +0800 Subject: [PATCH 47/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 245 +++++++++++++++-------------- 1 file changed, 130 insertions(+), 115 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index d3ffbd54..f7c700f1 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -7,142 +7,157 @@ when: skip_clone: true # 关闭默认clone,手动拉取代码 -# 流水线核心步骤:修复变量解析+YAML语法 +# 流水线核心步骤:整合新的编译+部署流程 steps: - # ========== 1. 替代clone:拉取代码(核心依赖) ========== + # ========== 1. 替代clone:拉取代码(对应原sync to github) ========== - name: prepare image: debian:bookworm commands: - # 修复:变量拼接语法(Shell规范,避免解析错误) + # 拉取代码(替换为你的仓库地址变量) - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" # 系统初始化 - apt update -y - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev - # 修复:移除${#VAR}的#(避免YAML误解析注释符),改用wc -c统计长度 - - echo "🔍 调试:GIT_CONFIG_URL长度=$(echo -n "${GIT_CONFIG_URL}" | wc -c),值=${GIT_CONFIG_URL}" - # 拉取代码(指定目录,避免路径混乱) + # 拉取代码到项目目录 - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} blazing-project - cd blazing-project - echo "✅ 代码拉取完成,当前目录:$(pwd)" - # ========== 2. 初始化Go环境(依赖prepare) ========== - - name: prepare-go - image: golang:1.25 - depends_on: [prepare] + # ========== 2. 生成版本号(前置步骤) ========== + - name: set version + image: golang:1.23 + depends_on: [prepare] # 替换原sync to github为prepare commands: - - cd blazing-project - - go version - - go mod download -x || { echo "❌ 下载Go依赖失败"; ls -lh go.mod; exit 1; } - - go mod verify || { echo "❌ 验证Go依赖失败"; exit 1; } - - echo "✅ Go环境初始化完成" + - cd blazing-project # 进入项目目录 + - 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}" - # ========== 3. 生成版本号(依赖prepare-go) ========== - - name: set-version - image: golang:1.25 - depends_on: [prepare-go] - commands: - - cd blazing-project - - | - if [ -n "${CI_COMMIT_TAG}" ]; then - VERSION="${CI_COMMIT_TAG}" - else - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - fi - mkdir -p "$(dirname "${CI_ENV_FILE}")" - echo "BUILD_VERSION=${VERSION}" >> "${CI_ENV_FILE}" - echo "✅ 生成版本号:${VERSION}" + # ========== 3. 缓存Go依赖 ========== + - name: cache go modules + image: meltwater/drone-cache:latest + depends_on: [prepare] # 替换原sync to github为prepare + settings: + restore: true + mount: + - /go/pkg/mod + - /root/.cache/go-build + cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' # 补充项目目录 - # ========== 4. 编译Go服务(依赖prepare+prepare-go+set-version) ========== - - name: build_logic + # ========== 4. 编译Logic和Login服务 ========== + - name: build image: golang:1.25 - depends_on: [prepare, prepare-go, set-version] environment: CGO_ENABLED: 0 GO111MODULE: on GOSUMDB: off - commands: - - cd blazing-project - - mkdir -p build - # 修复:变量名仅包含字母/数字/下划线(避免解析错误) - - BIN_NAME="logic_${BUILD_VERSION}_$(echo ${CI_STEP_STARTED} | tr -cd 'a-zA-Z0-9_')" - - | - go build -v \ - -p=4 \ - -trimpath \ - -buildvcs=false \ - -ldflags "-s -w -buildid= -extldflags '-static' -X main.version=${BUILD_VERSION}" \ - -o ./build/${BIN_NAME} \ - ./logic - - | - if [ ! -f ./build/${BIN_NAME} ]; then - echo "❌ 编译失败:产物${BIN_NAME}不存在" - ls -lh ./build/ - exit 1 - fi - - ls -lh ./build/ - - ./build/${BIN_NAME} -v || true - - echo "BIN_NAME=${BIN_NAME}" >> "${CI_ENV_FILE}" - - echo "✅ Go服务编译完成,产物:${BIN_NAME}" - - # ========== 5. 拉取部署配置(依赖prepare) ========== - - name: fetch-deploy-config - image: alpine:latest - depends_on: [prepare] - commands: - - apk add --no-cache curl jq - - echo "🔧 拉取部署配置:${JSON_CONFIG_URL}" - - | - for i in 1 2 3; do - curl -sSL --connect-timeout 10 --max-time 30 "${JSON_CONFIG_URL}" -o /tmp/deploy-config.json && break - echo "⚠️ 第${i}次拉取失败,重试中..." - sleep 2 - done - if [ ! -f /tmp/deploy-config.json ]; then - echo "❌ 拉取JSON配置失败" - exit 1 - fi - - | - JSON_TYPE=$(jq -r 'type' /tmp/deploy-config.json 2>/dev/null || echo "invalid") - if [ "$JSON_TYPE" = "array" ]; then - REMOTE_HOSTS=$(jq -r '.[].loginaddr' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_USERS=$(jq -r '.[].user' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_PASSWORDS=$(jq -r '.[].password' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_ONLINE_IDS=$(jq -r '.[].online_id' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - elif [ "$JSON_TYPE" = "object" ]; then - REMOTE_HOSTS=$(jq -r '.loginaddr' /tmp/deploy-config.json) - REMOTE_USERS=$(jq -r '.user' /tmp/deploy-config.json) - REMOTE_PASSWORDS=$(jq -r '.password' /tmp/deploy-config.json) - REMOTE_ONLINE_IDS=$(jq -r '.online_id' /tmp/deploy-config.json) - else - echo "❌ JSON配置格式错误(非数组/对象)" - cat /tmp/deploy-config.json - exit 1 - fi - - | - if [ -z "$REMOTE_HOSTS" ] || [ -z "$REMOTE_USERS" ]; then - echo "❌ 解析配置失败:服务器/用户名为空" - cat /tmp/deploy-config.json - exit 1 - fi - - echo "✅ 配置解析完成 | 服务器:${REMOTE_HOSTS} | OnlineID:${REMOTE_ONLINE_IDS}" - - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> "${CI_ENV_FILE}" - - echo "REMOTE_USERS=${REMOTE_USERS}" >> "${CI_ENV_FILE}" - - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> "${CI_ENV_FILE}" - - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> "${CI_ENV_FILE}" - - # ========== 6. SCP推送产物(核心修复:变量引用格式) ========== - - name: scp-exe-to-servers - image: appleboy/drone-scp:1.6.2 depends_on: - - build_logic - - fetch-deploy-config + - cache go modules + - set version + commands: + - cd blazing-project # 进入项目目录 + - . .build-info/.env # 加载版本号 + - 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} + # 编译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/ + # 写入BIN_NAME到环境文件,供后续步骤使用 + - echo "LOGIC_BIN=logic_${BUILD_VERSION}" >> "${CI_ENV_FILE}" + - echo "LOGIN_BIN=login_${BUILD_VERSION}" >> "${CI_ENV_FILE}" + + # ========== 5. 重建缓存 ========== + - name: rebuild cache + image: meltwater/drone-cache:latest + depends_on: [build] settings: - # 核心修复:Woodpecker settings块必须用Go模板语法 {{ VAR }},而非${VAR} - host: {{ REMOTE_HOSTS }} - username: {{ REMOTE_USERS }} - password: {{ REMOTE_PASSWORDS }} - source: ./blazing-project/build/{{ BIN_NAME }} - target: {{ REMOTE_EXE_DIR }}/ - strip_components: 3 + rebuild: true + mount: + - /go/pkg/mod + - /root/.cache/go-build + cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' # 补充项目目录 + + # ========== 6. 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 + depends_on: [rebuild cache] + settings: + # 核心修复:settings块用Go模板语法 {{}} 引用变量 + host: {{ LOGIN_SERVER_HOST }} + username: {{ LOGIN_SERVER_USER }} + password: {{ LOGIN_SERVER_PASSWORD }} + port: {{ LOGIN_SERVER_PORT }} + source: + - ./blazing-project/build/login_* + - ./blazing-project/build/logic_* + target: /opt/login/ + strip_components: 2 # 调整层级:blazing-project/build/xxx → 取xxx skip_verify: true timeout: 30s + + # ========== 7. 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 + depends_on: [deploy to login server] + settings: + # 核心修复:settings块用Go模板语法 {{}} 引用变量 + host: {{ LOGIN_SERVER_HOST }} + username: {{ LOGIN_SERVER_USER }} + password: {{ LOGIN_SERVER_PASSWORD }} + port: {{ LOGIN_SERVER_PORT }} + script: + - | + cd /opt/login + BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) + echo "BIN_NAME: $BIN_NAME" + 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 From 6f8747b174634b23efb009caea453cdc8a4f2fe3 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 11:02:10 +0800 Subject: [PATCH 48/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 51 ++++++++++++++---------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index f7c700f1..5eea37e0 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -7,28 +7,25 @@ when: skip_clone: true # 关闭默认clone,手动拉取代码 -# 流水线核心步骤:整合新的编译+部署流程 +# 流水线核心步骤:修复变量解析+YAML格式 steps: - # ========== 1. 替代clone:拉取代码(对应原sync to github) ========== + # ========== 1. 替代clone:拉取代码 ========== - name: prepare image: debian:bookworm commands: - # 拉取代码(替换为你的仓库地址变量) - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" - # 系统初始化 - apt update -y - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev - # 拉取代码到项目目录 - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} blazing-project - cd blazing-project - echo "✅ 代码拉取完成,当前目录:$(pwd)" - # ========== 2. 生成版本号(前置步骤) ========== + # ========== 2. 生成版本号 ========== - name: set version image: golang:1.23 - depends_on: [prepare] # 替换原sync to github为prepare + depends_on: [prepare] commands: - - cd blazing-project # 进入项目目录 + - cd blazing-project - VERSION="v$(git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")" - mkdir -p .build-info - echo "BUILD_VERSION=${VERSION}" >> .build-info/.env @@ -37,13 +34,13 @@ steps: # ========== 3. 缓存Go依赖 ========== - name: cache go modules image: meltwater/drone-cache:latest - depends_on: [prepare] # 替换原sync to github为prepare + depends_on: [prepare] settings: restore: true mount: - /go/pkg/mod - /root/.cache/go-build - cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' # 补充项目目录 + cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' # ========== 4. 编译Logic和Login服务 ========== - name: build @@ -56,8 +53,8 @@ steps: - cache go modules - set version commands: - - cd blazing-project # 进入项目目录 - - . .build-info/.env # 加载版本号 + - cd blazing-project + - . .build-info/.env - mkdir -p build - | # 编译Logic服务 @@ -76,7 +73,6 @@ steps: mv ./build/${BIN_NAME} ../build/ cd .. ls -lh ./build/ - # 写入BIN_NAME到环境文件,供后续步骤使用 - echo "LOGIC_BIN=logic_${BUILD_VERSION}" >> "${CI_ENV_FILE}" - echo "LOGIN_BIN=login_${BUILD_VERSION}" >> "${CI_ENV_FILE}" @@ -89,38 +85,39 @@ steps: mount: - /go/pkg/mod - /root/.cache/go-build - cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' # 补充项目目录 + cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' - # ========== 6. SCP推送Login和Logic到指定服务器 ========== + # ========== 6. 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 depends_on: [rebuild cache] settings: - # 核心修复:settings块用Go模板语法 {{}} 引用变量 - host: {{ LOGIN_SERVER_HOST }} - username: {{ LOGIN_SERVER_USER }} - password: {{ LOGIN_SERVER_PASSWORD }} - port: {{ LOGIN_SERVER_PORT }} + # 核心修复1:变量前加.,符合Woodpecker模板语法规范 + # 核心修复2:增加默认值,避免变量为空导致解析错误 + host: {{ .LOGIN_SERVER_HOST | default "127.0.0.1" }} + username: {{ .LOGIN_SERVER_USER | default "root" }} + password: {{ .LOGIN_SERVER_PASSWORD | default "" }} + port: {{ .LOGIN_SERVER_PORT | default "22" }} source: - ./blazing-project/build/login_* - ./blazing-project/build/logic_* target: /opt/login/ - strip_components: 2 # 调整层级:blazing-project/build/xxx → 取xxx + strip_components: 2 skip_verify: true timeout: 30s - # ========== 7. SSH启动Login服务并上传Logic到Public ========== + # ========== 7. 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 depends_on: [deploy to login server] settings: - # 核心修复:settings块用Go模板语法 {{}} 引用变量 - host: {{ LOGIN_SERVER_HOST }} - username: {{ LOGIN_SERVER_USER }} - password: {{ LOGIN_SERVER_PASSWORD }} - port: {{ LOGIN_SERVER_PORT }} + # 核心修复:变量前加. + 增加默认值 + host: {{ .LOGIN_SERVER_HOST | default "127.0.0.1" }} + username: {{ .LOGIN_SERVER_USER | default "root" }} + password: {{ .LOGIN_SERVER_PASSWORD | default "" }} + port: {{ .LOGIN_SERVER_PORT | default "22" }} script: - | cd /opt/login From ac4e2943442ae5c12b68891aea1a77eb09251f79 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 11:11:32 +0800 Subject: [PATCH 49/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 54 ++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 5eea37e0..304c3d19 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -7,11 +7,38 @@ when: skip_clone: true # 关闭默认clone,手动拉取代码 -# 流水线核心步骤:修复变量解析+YAML格式 +# 流水线核心步骤:修复插件模板兼容+变量验证 steps: + # ========== 0. 变量验证(新增:提前检查关键变量,避免后续解析错误) ========== + - name: validate env vars + image: alpine:latest + commands: + - | + # 检查核心部署变量是否配置 + REQUIRED_VARS=("LOGIN_SERVER_HOST" "LOGIN_SERVER_USER" "LOGIN_SERVER_PASSWORD") + for var in "${REQUIRED_VARS[@]}"; do + if [ -z "${!var}" ]; then + echo "❌ 错误:未配置变量 $var,请在Woodpecker项目设置中补充" + exit 1 + fi + done + # 给可选变量设置默认值 + export LOGIN_SERVER_PORT=${LOGIN_SERVER_PORT:-22} + # 打印变量(调试用,生产可删除) + echo "✅ 变量验证通过:" + echo "LOGIN_SERVER_HOST: ${LOGIN_SERVER_HOST}" + echo "LOGIN_SERVER_USER: ${LOGIN_SERVER_USER}" + echo "LOGIN_SERVER_PORT: ${LOGIN_SERVER_PORT}" + # 写入CI_ENV_FILE供后续步骤使用 + echo "LOGIN_SERVER_HOST=${LOGIN_SERVER_HOST}" >> "${CI_ENV_FILE}" + echo "LOGIN_SERVER_USER=${LOGIN_SERVER_USER}" >> "${CI_ENV_FILE}" + echo "LOGIN_SERVER_PASSWORD=${LOGIN_SERVER_PASSWORD}" >> "${CI_ENV_FILE}" + echo "LOGIN_SERVER_PORT=${LOGIN_SERVER_PORT}" >> "${CI_ENV_FILE}" + # ========== 1. 替代clone:拉取代码 ========== - name: prepare image: debian:bookworm + depends_on: [validate env vars] commands: - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" - apt update -y @@ -87,18 +114,17 @@ steps: - /root/.cache/go-build cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' - # ========== 6. SCP推送Login和Logic到指定服务器(核心修复:变量引用) ========== + # ========== 6. 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 depends_on: [rebuild cache] settings: - # 核心修复1:变量前加.,符合Woodpecker模板语法规范 - # 核心修复2:增加默认值,避免变量为空导致解析错误 - host: {{ .LOGIN_SERVER_HOST | default "127.0.0.1" }} - username: {{ .LOGIN_SERVER_USER | default "root" }} - password: {{ .LOGIN_SERVER_PASSWORD | default "" }} - port: {{ .LOGIN_SERVER_PORT | default "22" }} + # 核心修复:仅使用最简模板语法 {{ .变量名 }},移除管道符 + host: {{ .LOGIN_SERVER_HOST }} + username: {{ .LOGIN_SERVER_USER }} + password: {{ .LOGIN_SERVER_PASSWORD }} + port: {{ .LOGIN_SERVER_PORT }} source: - ./blazing-project/build/login_* - ./blazing-project/build/logic_* @@ -107,17 +133,17 @@ steps: skip_verify: true timeout: 30s - # ========== 7. SSH启动Login服务并移动Logic到Public(核心修复:变量引用) ========== + # ========== 7. 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 depends_on: [deploy to login server] settings: - # 核心修复:变量前加. + 增加默认值 - host: {{ .LOGIN_SERVER_HOST | default "127.0.0.1" }} - username: {{ .LOGIN_SERVER_USER | default "root" }} - password: {{ .LOGIN_SERVER_PASSWORD | default "" }} - port: {{ .LOGIN_SERVER_PORT | default "22" }} + # 核心修复:仅使用最简模板语法 {{ .变量名 }} + host: {{ .LOGIN_SERVER_HOST }} + username: {{ .LOGIN_SERVER_USER }} + password: {{ .LOGIN_SERVER_PASSWORD }} + port: {{ .LOGIN_SERVER_PORT }} script: - | cd /opt/login From b88c8a5dcc0f7f2e9b2e61fc585f638c62be1d2e Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 11:17:31 +0800 Subject: [PATCH 50/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 304c3d19..c77c9b82 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -7,9 +7,9 @@ when: skip_clone: true # 关闭默认clone,手动拉取代码 -# 流水线核心步骤:修复插件模板兼容+变量验证 +# 流水线核心步骤:修复所有模板括号缺失问题 steps: - # ========== 0. 变量验证(新增:提前检查关键变量,避免后续解析错误) ========== + # ========== 0. 变量验证(提前检查关键变量) ========== - name: validate env vars image: alpine:latest commands: @@ -24,7 +24,7 @@ steps: done # 给可选变量设置默认值 export LOGIN_SERVER_PORT=${LOGIN_SERVER_PORT:-22} - # 打印变量(调试用,生产可删除) + # 打印变量(调试用) echo "✅ 变量验证通过:" echo "LOGIN_SERVER_HOST: ${LOGIN_SERVER_HOST}" echo "LOGIN_SERVER_USER: ${LOGIN_SERVER_USER}" @@ -67,6 +67,7 @@ steps: mount: - /go/pkg/mod - /root/.cache/go-build + # 关键:检查此处{{ }}完全闭合,无缺失 cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' # ========== 4. 编译Logic和Login服务 ========== @@ -112,15 +113,15 @@ steps: mount: - /go/pkg/mod - /root/.cache/go-build + # 关键:检查{{ }}完全闭合 cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' - # ========== 6. SCP推送Login和Logic到指定服务器(核心修复:最简模板语法) ========== + # ========== 6. SCP推送产物(检查所有{{ }}闭合) ========== - name: deploy to login server image: appleboy/drone-scp:1.6.2 imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml depends_on: [rebuild cache] settings: - # 核心修复:仅使用最简模板语法 {{ .变量名 }},移除管道符 host: {{ .LOGIN_SERVER_HOST }} username: {{ .LOGIN_SERVER_USER }} password: {{ .LOGIN_SERVER_PASSWORD }} @@ -133,13 +134,12 @@ steps: skip_verify: true timeout: 30s - # ========== 7. SSH启动Login服务并移动Logic到Public(核心修复:最简模板语法) ========== + # ========== 7. SSH启动服务(检查所有{{ }}闭合) ========== - name: start login and move logic image: appleboy/drone-ssh:1.6.2 imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml depends_on: [deploy to login server] settings: - # 核心修复:仅使用最简模板语法 {{ .变量名 }} host: {{ .LOGIN_SERVER_HOST }} username: {{ .LOGIN_SERVER_USER }} password: {{ .LOGIN_SERVER_PASSWORD }} @@ -167,7 +167,7 @@ steps: # 启动新进程 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}" @@ -175,7 +175,7 @@ steps: echo "❌ 服务健康检查失败 | Screen: ${session_name} 不存在" exit 1 fi - # 移动logic产物到public目录 + # 移动logic产物 LOGIC_BIN=$(ls -t logic_v* 2>/dev/null | head -1) if [ -n "$LOGIC_BIN" ]; then mkdir -p /opt/login/public From 4a5142d568b75fce11352445f612a9a199b65b06 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 11:21:46 +0800 Subject: [PATCH 51/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index c77c9b82..d489c934 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -184,3 +184,4 @@ steps: else echo "⚠ 未找到Logic产物" fi + From 1881b54692b67885deffce62a21e77d098558b89 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:15:35 +0800 Subject: [PATCH 52/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 232 ++++++++--------------------- 1 file changed, 62 insertions(+), 170 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index d489c934..c27b5eff 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -5,183 +5,75 @@ when: - manual branch: main -skip_clone: true # 关闭默认clone,手动拉取代码 +skip_clone: true -# 流水线核心步骤:修复所有模板括号缺失问题 + +# 全局配置变量(替换占位符即可使用) +variables: + SCREEN_NAME: "logic_service" + REMOTE_EXE_DIR: "/opt/logic" + JSON_CONFIG_URL: "https://你的JSON配置地址.com/deploy.json" + LOG_PATH: "$HOME/run.log" + +# 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 steps: - # ========== 0. 变量验证(提前检查关键变量) ========== - - name: validate env vars - image: alpine:latest - commands: - - | - # 检查核心部署变量是否配置 - REQUIRED_VARS=("LOGIN_SERVER_HOST" "LOGIN_SERVER_USER" "LOGIN_SERVER_PASSWORD") - for var in "${REQUIRED_VARS[@]}"; do - if [ -z "${!var}" ]; then - echo "❌ 错误:未配置变量 $var,请在Woodpecker项目设置中补充" - exit 1 - fi - done - # 给可选变量设置默认值 - export LOGIN_SERVER_PORT=${LOGIN_SERVER_PORT:-22} - # 打印变量(调试用) - echo "✅ 变量验证通过:" - echo "LOGIN_SERVER_HOST: ${LOGIN_SERVER_HOST}" - echo "LOGIN_SERVER_USER: ${LOGIN_SERVER_USER}" - echo "LOGIN_SERVER_PORT: ${LOGIN_SERVER_PORT}" - # 写入CI_ENV_FILE供后续步骤使用 - echo "LOGIN_SERVER_HOST=${LOGIN_SERVER_HOST}" >> "${CI_ENV_FILE}" - echo "LOGIN_SERVER_USER=${LOGIN_SERVER_USER}" >> "${CI_ENV_FILE}" - echo "LOGIN_SERVER_PASSWORD=${LOGIN_SERVER_PASSWORD}" >> "${CI_ENV_FILE}" - echo "LOGIN_SERVER_PORT=${LOGIN_SERVER_PORT}" >> "${CI_ENV_FILE}" + # ========== 0. 同步代码到GitHub(与prepare并行执行) ========== + sync-to-github: + image: tencentcom/git-sync + settings: + target_url: https://github.com/72wo/blazing.git + auth_type: https + username: ${GIT_USERNAME} + password: ${GIT_ACCESS_TOKEN} + when: + event: + - push + branch: + - main - # ========== 1. 替代clone:拉取代码 ========== - - name: prepare + # ========== 1. 替代clone:拉取代码(核心依赖) ========== + prepare: image: debian:bookworm - depends_on: [validate env vars] + environment: + WOODPECKER_SSH_KEY: + from_secret: WOODPECKER_SSH_KEY commands: - - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" + # 调试:验证变量是否传递 + - echo "🔍 调试:WOODPECKER_SSH_KEY变量长度 = ${#WOODPECKER_SSH_KEY}" + - echo "🔍 调试:当前环境变量列表(筛选SSH相关)" + - env | grep -i ssh || echo "⚠️ 无SSH相关环境变量" + + # 系统初始化 - apt update -y - apt install -y --no-install-recommends ca-certificates curl git openssh-client openssl libssl-dev - - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} blazing-project - - cd blazing-project - - echo "✅ 代码拉取完成,当前目录:$(pwd)" - - # ========== 2. 生成版本号 ========== - - name: set version - image: golang:1.23 - depends_on: [prepare] - commands: - - cd blazing-project - - 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}" - - # ========== 3. 缓存Go依赖 ========== - - name: cache go modules - image: meltwater/drone-cache:latest - depends_on: [prepare] - settings: - restore: true - mount: - - /go/pkg/mod - - /root/.cache/go-build - # 关键:检查此处{{ }}完全闭合,无缺失 - cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' - - # ========== 4. 编译Logic和Login服务 ========== - - name: build - image: golang:1.25 - environment: - CGO_ENABLED: 0 - GO111MODULE: on - GOSUMDB: off - depends_on: - - cache go modules - - set version - commands: - - cd blazing-project - - . .build-info/.env - - mkdir -p build + + # 清理旧SSH文件,严格配置权限 + - rm -rf /root/.ssh/* + - mkdir -p /root/.ssh && chmod 700 /root/.ssh + - DEPLOY_KEY_FILE="$HOME/.ssh/deploy_key" + + # 关键修复:SSH密钥写入(EOF内无缩进) - | - # 编译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} - # 编译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/ - - echo "LOGIC_BIN=logic_${BUILD_VERSION}" >> "${CI_ENV_FILE}" - - echo "LOGIN_BIN=login_${BUILD_VERSION}" >> "${CI_ENV_FILE}" + cat > /root/.ssh/id_ed25519 << EOF + $WOODPECKER_SSH_KEY + EOF + chmod 600 /root/.ssh/id_ed25519 + echo "✅ ED25519密钥写入完成" - # ========== 5. 重建缓存 ========== - - name: rebuild cache - image: meltwater/drone-cache:latest - depends_on: [build] - settings: - rebuild: true - mount: - - /go/pkg/mod - - /root/.cache/go-build - # 关键:检查{{ }}完全闭合 - cache_key: '{{ .Repo.Name }}-{{ .Commit.Branch }}-{{ checksum "blazing-project/go.mod" }}-{{ checksum "blazing-project/login/go.mod" }}' - - # ========== 6. SCP推送产物(检查所有{{ }}闭合) ========== - - name: deploy to login server - image: appleboy/drone-scp:1.6.2 - imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml - depends_on: [rebuild cache] - settings: - host: {{ .LOGIN_SERVER_HOST }} - username: {{ .LOGIN_SERVER_USER }} - password: {{ .LOGIN_SERVER_PASSWORD }} - port: {{ .LOGIN_SERVER_PORT }} - source: - - ./blazing-project/build/login_* - - ./blazing-project/build/logic_* - target: /opt/login/ - strip_components: 2 - skip_verify: true - timeout: 30s - - # ========== 7. SSH启动服务(检查所有{{ }}闭合) ========== - - name: start login and move logic - image: appleboy/drone-ssh:1.6.2 - imports: https://cnb.cool/blzing/key/-/blob/main/githubkey.yml - depends_on: [deploy to login server] - settings: - host: {{ .LOGIN_SERVER_HOST }} - username: {{ .LOGIN_SERVER_USER }} - password: {{ .LOGIN_SERVER_PASSWORD }} - port: {{ .LOGIN_SERVER_PORT }} - script: - - | - cd /opt/login - BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) - echo "BIN_NAME: $BIN_NAME" - 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产物 - 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 + + # 添加GitHub主机密钥 + - SSH_KNOWN_HOSTS_FILE="$HOME/.ssh/known_hosts" + - ssh-keyscan -H github.com > /root/.ssh/known_hosts + - chmod 600 /root/.ssh/known_hosts + + + + + - echo "🔍 ${#CI_REPO_CLONE_SSH_URL}调试: ${CI_REPO_CLONE_SSH_URL}" + - git config --global core.compression 0 + - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" + - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} + # 拉取代码 + + - echo "✅ 代码拉取完成" \ No newline at end of file From e9c30dc5f6b15f03e06f452a01dad1c1b84e84d6 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:16:25 +0800 Subject: [PATCH 53/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index c27b5eff..e18606a3 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -73,7 +73,7 @@ steps: - echo "🔍 ${#CI_REPO_CLONE_SSH_URL}调试: ${CI_REPO_CLONE_SSH_URL}" - git config --global core.compression 0 - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" - - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} + - git clone --depth 1 --progress -v $GIT_CONFIG_URL # 拉取代码 - echo "✅ 代码拉取完成" \ No newline at end of file From fde2ac6fe2592788d00647bbef2ac8222e3e64b6 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:17:56 +0800 Subject: [PATCH 54/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index e18606a3..dd5c66fd 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -17,20 +17,6 @@ variables: # 流水线核心步骤:理顺依赖链,确保各步骤依赖正确 steps: - # ========== 0. 同步代码到GitHub(与prepare并行执行) ========== - sync-to-github: - image: tencentcom/git-sync - settings: - target_url: https://github.com/72wo/blazing.git - auth_type: https - username: ${GIT_USERNAME} - password: ${GIT_ACCESS_TOKEN} - when: - event: - - push - branch: - - main - # ========== 1. 替代clone:拉取代码(核心依赖) ========== prepare: image: debian:bookworm @@ -73,7 +59,7 @@ steps: - echo "🔍 ${#CI_REPO_CLONE_SSH_URL}调试: ${CI_REPO_CLONE_SSH_URL}" - git config --global core.compression 0 - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" - - git clone --depth 1 --progress -v $GIT_CONFIG_URL + - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} # 拉取代码 - - echo "✅ 代码拉取完成" \ No newline at end of file + - echo "✅ 代码拉取完成" From 754b4942c47d66c760af665fa133e0480f1d4800 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:21:08 +0800 Subject: [PATCH 55/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index dd5c66fd..4b2ce3dc 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -23,9 +23,10 @@ steps: environment: WOODPECKER_SSH_KEY: from_secret: WOODPECKER_SSH_KEY + CNB_ACCK: + from_secret: CNB_ACCK commands: # 调试:验证变量是否传递 - - echo "🔍 调试:WOODPECKER_SSH_KEY变量长度 = ${#WOODPECKER_SSH_KEY}" - echo "🔍 调试:当前环境变量列表(筛选SSH相关)" - env | grep -i ssh || echo "⚠️ 无SSH相关环境变量" From 57e2662697fa69fe500533a5b8fad5f1fb2f2e8a Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:23:48 +0800 Subject: [PATCH 56/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 4b2ce3dc..3a9f3eb3 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -60,6 +60,7 @@ steps: - echo "🔍 ${#CI_REPO_CLONE_SSH_URL}调试: ${CI_REPO_CLONE_SSH_URL}" - git config --global core.compression 0 - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" + - echo "🔍 ${CNB_ACCK}调试: ${GIT_CONFIG_URL}" - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} # 拉取代码 From 726247791a09b0e0dec162486c156e521eb02379 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:26:17 +0800 Subject: [PATCH 57/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 3a9f3eb3..72fed129 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -60,8 +60,8 @@ steps: - echo "🔍 ${#CI_REPO_CLONE_SSH_URL}调试: ${CI_REPO_CLONE_SSH_URL}" - git config --global core.compression 0 - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" - - echo "🔍 ${CNB_ACCK}调试: ${GIT_CONFIG_URL}" - - git clone --depth 1 --progress -v ${GIT_CONFIG_URL} + - echo "🔍 $CNB_ACCK调试: $GIT_CONFIG_URL" + - git clone --depth 1 --progress -v $GIT_CONFIG_URL # 拉取代码 - echo "✅ 代码拉取完成" From e76c2293a23e9bbb8bc96f69dbe2b79152c3e627 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:29:07 +0800 Subject: [PATCH 58/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 72fed129..6eaa5385 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -59,7 +59,7 @@ steps: - echo "🔍 ${#CI_REPO_CLONE_SSH_URL}调试: ${CI_REPO_CLONE_SSH_URL}" - git config --global core.compression 0 - - export GIT_CONFIG_URL="https://cnb:${CNB_ACCK}@cnb.cool/blzing/blazing" + - export GIT_CONFIG_URL="https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" - echo "🔍 $CNB_ACCK调试: $GIT_CONFIG_URL" - git clone --depth 1 --progress -v $GIT_CONFIG_URL # 拉取代码 From e1913e882b828ba7352f441fc8e090a9b2c8005d Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:33:04 +0800 Subject: [PATCH 59/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 100 +++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 6eaa5385..a8de02a8 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -65,3 +65,103 @@ steps: # 拉取代码 - echo "✅ 代码拉取完成" + # ========== 3. 生成版本号(依赖prepare:代码拉取完成) ========== + set-version: + image: golang:1.25 + depends_on: [prepare] + commands: + - | + VERSION="v$(git rev-parse --short=8 HEAD)" + echo "BUILD_VERSION=$VERSION" >> "$CI_ENV_FILE" + echo "构建版本号:$VERSION" + echo "✅ 生成版本号:{VERSION" + + # ========== 4. 编译Logic服务(完全参考GitHub Actions编译配置) ========== + build_logic: + image: golang:1.25 + depends_on: [prepare] + environment: + CGO_ENABLED: 0 + GO111MODULE: on + GOSUMDB: off + commands: + - mkdir -p build + - BIN_NAME="logic_${BUILD_VERSION}" + - | + go build -v \ + -p=4 \ + -trimpath \ + -buildvcs=false \ + -ldflags "-s -w -buildid= -extldflags '-static'" \ + -o ./build/${BIN_NAME} \ + ./logic + - | + if [ ! -f ./build/${BIN_NAME} ]; then + echo "❌ 编译失败:产物${BIN_NAME}不存在" + exit 1 + fi + - ls -lh ./build/ + - echo "产物名称:${BIN_NAME}" + - echo "✅ Logic服务编译完成" + + # ========== 5. 拉取部署配置(可并行,依赖prepare确保代码拉取完成) ========== + fetch-deploy-config: # 与build_logic同级,缩进2个空格 + image: alpine:latest # 子元素,缩进4个空格 + depends_on: [prepare] # 子元素,缩进4个空格 + commands: # 子元素,缩进4个空格 + - apk add --no-cache curl jq # commands内的项,缩进6个空格 + - echo "🔧 拉取部署配置:${JSON_CONFIG_URL}" # 缩进6个空格 + - | # 缩进6个空格 + for i in 1 2 3; do + curl -sSL --connect-timeout 10 --max-time 30 "${JSON_CONFIG_URL}" -o /tmp/deploy-config.json && break + echo "⚠️ 第${i}次拉取失败,重试中..." + sleep 2 + done + if [ ! -f /tmp/deploy-config.json ]; then + echo "❌ 拉取JSON配置失败" + exit 1 + fi + - | # 缩进6个空格 + JSON_TYPE=$(jq -r 'type' /tmp/deploy-config.json 2>/dev/null || echo "invalid") + if [ "$JSON_TYPE" = "array" ]; then + REMOTE_HOSTS=$(jq -r '.[].loginaddr' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') + REMOTE_USERS=$(jq -r '.[].user' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') + REMOTE_PASSWORDS=$(jq -r '.[].password' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') + REMOTE_ONLINE_IDS=$(jq -r '.[].online_id' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') + elif [ "$JSON_TYPE" = "object" ]; then + REMOTE_HOSTS=$(jq -r '.loginaddr' /tmp/deploy-config.json) + REMOTE_USERS=$(jq -r '.user' /tmp/deploy-config.json) + REMOTE_PASSWORDS=$(jq -r '.password' /tmp/deploy-config.json) + REMOTE_ONLINE_IDS=$(jq -r '.online_id' /tmp/deploy-config.json) + else + echo "❌ JSON配置格式错误(非数组/对象)" + cat /tmp/deploy-config.json + exit 1 + fi + - | # 缩进6个空格 + if [ -z "$REMOTE_HOSTS" ] || [ -z "$REMOTE_USERS" ]; then + echo "❌ 解析配置失败:服务器/用户名为空" + cat /tmp/deploy-config.json + exit 1 + fi + - echo "✅ 配置解析完成 | 服务器:${REMOTE_HOSTS} | OnlineID:${REMOTE_ONLINE_IDS}" # 缩进6个空格 + - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> "$CI_ENV_FILE" # 缩进6个空格 + - echo "REMOTE_USERS=${REMOTE_USERS}" >> "$CI_ENV_FILE" # 缩进6个空格 + - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> "$CI_ENV_FILE" # 缩进6个空格 + - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> "$CI_ENV_FILE" # 缩进6个空格 + + # ========== 6. SCP推送产物(依赖编译+配置解析) ========== + scp-exe-to-servers: # 与fetch-deploy-config同级,缩进2个空格 + image: appleboy/drone-scp:1.6.2 # 子元素,缩进4个空格 + settings: # 子元素,缩进4个空格 + host: ${REMOTE_HOSTS} # settings内的项,缩进6个空格 + username: ${REMOTE_USERS} # 统一缩进6个空格 + password: ${REMOTE_PASSWORDS} # 统一缩进6个空格 + source: ./build/${BIN_NAME} # 统一缩进6个空格 + target: ${REMOTE_EXE_DIR}/ # 统一缩进6个空格 + strip_components: 1 # 统一缩进6个空格 + skip_verify: true # 统一缩进6个空格 + timeout: 30s # 统一缩进6个空格 + depends_on: # 子元素,缩进4个空格 + - build_logic # depends_on内的项,缩进6个空格 + - fetch-deploy-config # 统一缩进6个空格 \ No newline at end of file From 3fba9c73ae49630c0e464824d5fdc88e270ebeca Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:34:54 +0800 Subject: [PATCH 60/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 56 ++---------------------------- 1 file changed, 3 insertions(+), 53 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index a8de02a8..23ad2d1c 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -52,11 +52,6 @@ steps: - SSH_KNOWN_HOSTS_FILE="$HOME/.ssh/known_hosts" - ssh-keyscan -H github.com > /root/.ssh/known_hosts - chmod 600 /root/.ssh/known_hosts - - - - - - echo "🔍 ${#CI_REPO_CLONE_SSH_URL}调试: ${CI_REPO_CLONE_SSH_URL}" - git config --global core.compression 0 - export GIT_CONFIG_URL="https://cnb:$CNB_ACCK@cnb.cool/blzing/blazing" @@ -72,9 +67,9 @@ steps: commands: - | VERSION="v$(git rev-parse --short=8 HEAD)" - echo "BUILD_VERSION=$VERSION" >> "$CI_ENV_FILE" - echo "构建版本号:$VERSION" - echo "✅ 生成版本号:{VERSION" + echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" + echo "构建版本号:${VERSION}" + echo "✅ 生成版本号:${VERSION}" # ========== 4. 编译Logic服务(完全参考GitHub Actions编译配置) ========== build_logic: @@ -104,51 +99,6 @@ steps: - echo "产物名称:${BIN_NAME}" - echo "✅ Logic服务编译完成" - # ========== 5. 拉取部署配置(可并行,依赖prepare确保代码拉取完成) ========== - fetch-deploy-config: # 与build_logic同级,缩进2个空格 - image: alpine:latest # 子元素,缩进4个空格 - depends_on: [prepare] # 子元素,缩进4个空格 - commands: # 子元素,缩进4个空格 - - apk add --no-cache curl jq # commands内的项,缩进6个空格 - - echo "🔧 拉取部署配置:${JSON_CONFIG_URL}" # 缩进6个空格 - - | # 缩进6个空格 - for i in 1 2 3; do - curl -sSL --connect-timeout 10 --max-time 30 "${JSON_CONFIG_URL}" -o /tmp/deploy-config.json && break - echo "⚠️ 第${i}次拉取失败,重试中..." - sleep 2 - done - if [ ! -f /tmp/deploy-config.json ]; then - echo "❌ 拉取JSON配置失败" - exit 1 - fi - - | # 缩进6个空格 - JSON_TYPE=$(jq -r 'type' /tmp/deploy-config.json 2>/dev/null || echo "invalid") - if [ "$JSON_TYPE" = "array" ]; then - REMOTE_HOSTS=$(jq -r '.[].loginaddr' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_USERS=$(jq -r '.[].user' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_PASSWORDS=$(jq -r '.[].password' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - REMOTE_ONLINE_IDS=$(jq -r '.[].online_id' /tmp/deploy-config.json | tr '\n' ',' | sed 's/,$//') - elif [ "$JSON_TYPE" = "object" ]; then - REMOTE_HOSTS=$(jq -r '.loginaddr' /tmp/deploy-config.json) - REMOTE_USERS=$(jq -r '.user' /tmp/deploy-config.json) - REMOTE_PASSWORDS=$(jq -r '.password' /tmp/deploy-config.json) - REMOTE_ONLINE_IDS=$(jq -r '.online_id' /tmp/deploy-config.json) - else - echo "❌ JSON配置格式错误(非数组/对象)" - cat /tmp/deploy-config.json - exit 1 - fi - - | # 缩进6个空格 - if [ -z "$REMOTE_HOSTS" ] || [ -z "$REMOTE_USERS" ]; then - echo "❌ 解析配置失败:服务器/用户名为空" - cat /tmp/deploy-config.json - exit 1 - fi - - echo "✅ 配置解析完成 | 服务器:${REMOTE_HOSTS} | OnlineID:${REMOTE_ONLINE_IDS}" # 缩进6个空格 - - echo "REMOTE_HOSTS=${REMOTE_HOSTS}" >> "$CI_ENV_FILE" # 缩进6个空格 - - echo "REMOTE_USERS=${REMOTE_USERS}" >> "$CI_ENV_FILE" # 缩进6个空格 - - echo "REMOTE_PASSWORDS=${REMOTE_PASSWORDS}" >> "$CI_ENV_FILE" # 缩进6个空格 - - echo "REMOTE_ONLINE_IDS=${REMOTE_ONLINE_IDS}" >> "$CI_ENV_FILE" # 缩进6个空格 # ========== 6. SCP推送产物(依赖编译+配置解析) ========== scp-exe-to-servers: # 与fetch-deploy-config同级,缩进2个空格 From f036628ceaac479ccb60187d9810be53d232c8a4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:36:40 +0800 Subject: [PATCH 61/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 23ad2d1c..c9faf05d 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -113,5 +113,4 @@ steps: skip_verify: true # 统一缩进6个空格 timeout: 30s # 统一缩进6个空格 depends_on: # 子元素,缩进4个空格 - - build_logic # depends_on内的项,缩进6个空格 - - fetch-deploy-config # 统一缩进6个空格 \ No newline at end of file + - build_logic # depends_on内的项,缩进6个空格 \ No newline at end of file From 82acdb1860895887e6ebf579309abc0035422c95 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:38:34 +0800 Subject: [PATCH 62/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index c9faf05d..d78c785b 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -67,6 +67,7 @@ steps: commands: - | VERSION="v$(git rev-parse --short=8 HEAD)" + echo v$(git rev-parse --short=8 HEAD) echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" echo "构建版本号:${VERSION}" echo "✅ 生成版本号:${VERSION}" From 372c913d1908353e1402090808c5ce5f8b05035f Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:40:19 +0800 Subject: [PATCH 63/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index d78c785b..2df9e063 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -67,7 +67,7 @@ steps: commands: - | VERSION="v$(git rev-parse --short=8 HEAD)" - echo v$(git rev-parse --short=8 HEAD) + echo git rev-parse --short=8 HEAD echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" echo "构建版本号:${VERSION}" echo "✅ 生成版本号:${VERSION}" From 01801632443ffb2fd1bea62779ec7ab7802ee396 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:43:28 +0800 Subject: [PATCH 64/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 2df9e063..ebd93f64 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -67,7 +67,7 @@ steps: commands: - | VERSION="v$(git rev-parse --short=8 HEAD)" - echo git rev-parse --short=8 HEAD + git rev-parse --short=8 HEAD echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" echo "构建版本号:${VERSION}" echo "✅ 生成版本号:${VERSION}" From fa69e7bdce98feb2899bd4a5d3aacce9cddac615 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:46:20 +0800 Subject: [PATCH 65/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index ebd93f64..a5639882 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -66,7 +66,7 @@ steps: depends_on: [prepare] commands: - | - VERSION="v$(git rev-parse --short=8 HEAD)" + VERSION="$(git rev-parse --short=8 HEAD)" git rev-parse --short=8 HEAD echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" echo "构建版本号:${VERSION}" From 9766b57f11f18a98f03c93d62775a9dda7473786 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 12:51:37 +0800 Subject: [PATCH 66/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 40 ++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index a5639882..06735b75 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -66,12 +66,48 @@ steps: depends_on: [prepare] commands: - | + #!/bin/bash + # 强制开启输出(避免CI环境静默) + set -o pipefail # 管道命令失败则整体失败 + echo "===== 开始生成构建版本号 =====" # 初始输出,确保脚本已执行 + + # 1. 获取Git短版本号(取消错误屏蔽,让失败原因显示) + echo "🔍 正在获取Git提交短版本号..." VERSION="$(git rev-parse --short=8 HEAD)" - git rev-parse --short=8 HEAD - echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" + + # 2. 检查版本号是否获取成功(无输出的核心排查点) + if [ -z "$VERSION" ]; then + echo "❌ 版本号获取失败!原因:" + echo " - 可能当前目录不是Git仓库" + echo " - 可能未安装git命令" + echo " - 可能Git仓库无提交记录" + # 手动输出一个兜底版本号(避免完全无输出) + VERSION="unknown-$(date +%Y%m%d%H%M%S)" + echo "📌 兜底版本号:${VERSION}" + else + echo "✅ 成功获取Git版本号:${VERSION}" + fi + + # 3. 检查CI_ENV_FILE(即使未定义,也输出提示,不直接exit) + echo "🔍 检查CI_ENV_FILE环境变量:$CI_ENV_FILE" + if [ -z "$CI_ENV_FILE" ]; then + echo "⚠️ 警告:CI_ENV_FILE未定义,跳过写入环境文件" + else + # 尝试写入文件,失败也输出原因 + if echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE"; then + echo "✅ 已写入版本号到${CI_ENV_FILE}:BUILD_VERSION=${VERSION}" + else + echo "❌ 写入${CI_ENV_FILE}失败!请检查文件权限/路径" + fi + fi + + # 4. 强制输出版本号(核心诉求:确保有输出) + echo "===== 构建版本号最终输出 =====" echo "构建版本号:${VERSION}" echo "✅ 生成版本号:${VERSION}" + + # ========== 4. 编译Logic服务(完全参考GitHub Actions编译配置) ========== build_logic: image: golang:1.25 From 718ddf1ce6d221134cdddcb5ff8a5b9544bd88a9 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:11:26 +0800 Subject: [PATCH 67/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 46 ++---------------------------- 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 06735b75..0189faf2 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -60,52 +60,10 @@ steps: # 拉取代码 - echo "✅ 代码拉取完成" - # ========== 3. 生成版本号(依赖prepare:代码拉取完成) ========== - set-version: - image: golang:1.25 - depends_on: [prepare] - commands: - - | - #!/bin/bash - # 强制开启输出(避免CI环境静默) - set -o pipefail # 管道命令失败则整体失败 - echo "===== 开始生成构建版本号 =====" # 初始输出,确保脚本已执行 - - # 1. 获取Git短版本号(取消错误屏蔽,让失败原因显示) - echo "🔍 正在获取Git提交短版本号..." - VERSION="$(git rev-parse --short=8 HEAD)" - - # 2. 检查版本号是否获取成功(无输出的核心排查点) - if [ -z "$VERSION" ]; then - echo "❌ 版本号获取失败!原因:" - echo " - 可能当前目录不是Git仓库" - echo " - 可能未安装git命令" - echo " - 可能Git仓库无提交记录" - # 手动输出一个兜底版本号(避免完全无输出) - VERSION="unknown-$(date +%Y%m%d%H%M%S)" - echo "📌 兜底版本号:${VERSION}" - else - echo "✅ 成功获取Git版本号:${VERSION}" - fi - - # 3. 检查CI_ENV_FILE(即使未定义,也输出提示,不直接exit) - echo "🔍 检查CI_ENV_FILE环境变量:$CI_ENV_FILE" - if [ -z "$CI_ENV_FILE" ]; then - echo "⚠️ 警告:CI_ENV_FILE未定义,跳过写入环境文件" - else - # 尝试写入文件,失败也输出原因 - if echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE"; then - echo "✅ 已写入版本号到${CI_ENV_FILE}:BUILD_VERSION=${VERSION}" - else - echo "❌ 写入${CI_ENV_FILE}失败!请检查文件权限/路径" - fi - fi - - # 4. 强制输出版本号(核心诉求:确保有输出) - echo "===== 构建版本号最终输出 =====" + VERSION="v$(git rev-parse --short=8 HEAD)" + echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" echo "构建版本号:${VERSION}" echo "✅ 生成版本号:${VERSION}" - # ========== 4. 编译Logic服务(完全参考GitHub Actions编译配置) ========== From 64bfd9154b9bc90e48c98cfefe68f4d0d5c5f393 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:16:34 +0800 Subject: [PATCH 68/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 0189faf2..789d49c1 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -60,10 +60,12 @@ steps: # 拉取代码 - echo "✅ 代码拉取完成" - VERSION="v$(git rev-parse --short=8 HEAD)" - echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" - echo "构建版本号:${VERSION}" - echo "✅ 生成版本号:${VERSION}" + - cd ./blazing + - VERSION="v$(git rev-parse --short=8 HEAD)" + + - echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" + - echo "构建版本号:${VERSION}" + - echo "✅ 生成版本号:${VERSION}" # ========== 4. 编译Logic服务(完全参考GitHub Actions编译配置) ========== From 5a0145d98dd64b467f786352964157927d30ae38 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:22:12 +0800 Subject: [PATCH 69/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 789d49c1..1a9c960c 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -60,7 +60,8 @@ steps: # 拉取代码 - echo "✅ 代码拉取完成" - - cd ./blazing + - ls + - cd blazing - VERSION="v$(git rev-parse --short=8 HEAD)" - echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" From 8048531bfec81770491617bf8c57332eeeaa93bc Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:39:04 +0800 Subject: [PATCH 70/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 1a9c960c..2e572a15 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -60,13 +60,7 @@ steps: # 拉取代码 - echo "✅ 代码拉取完成" - - ls - - cd blazing - - VERSION="v$(git rev-parse --short=8 HEAD)" - - - echo "BUILD_VERSION=${VERSION}" >> "$CI_ENV_FILE" - - echo "构建版本号:${VERSION}" - - echo "✅ 生成版本号:${VERSION}" + # ========== 4. 编译Logic服务(完全参考GitHub Actions编译配置) ========== @@ -79,7 +73,7 @@ steps: GOSUMDB: off commands: - mkdir -p build - - BIN_NAME="logic_${BUILD_VERSION}" + - BIN_NAME="logic_${CI_PIPELINE_STARTED}" - | go build -v \ -p=4 \ From 9597f1b7b52cbe331bb914e580e652b1fd71f3fc Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:41:28 +0800 Subject: [PATCH 71/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 2e572a15..e86bbe25 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -72,6 +72,7 @@ steps: GO111MODULE: on GOSUMDB: off commands: + -cd blazing - mkdir -p build - BIN_NAME="logic_${CI_PIPELINE_STARTED}" - | From 8519f9e43dc1fca64e2281665a9dd804123e7459 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:43:57 +0800 Subject: [PATCH 72/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index e86bbe25..3e897f2f 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -72,7 +72,7 @@ steps: GO111MODULE: on GOSUMDB: off commands: - -cd blazing + - cd blazing - mkdir -p build - BIN_NAME="logic_${CI_PIPELINE_STARTED}" - | From 1af9369b3f18cdc481b792d20d7488186e083392 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:47:13 +0800 Subject: [PATCH 73/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 3e897f2f..10bed03e 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -77,7 +77,7 @@ steps: - BIN_NAME="logic_${CI_PIPELINE_STARTED}" - | go build -v \ - -p=4 \ + -p=24 \ -trimpath \ -buildvcs=false \ -ldflags "-s -w -buildid= -extldflags '-static'" \ From 76651eb4b831c4b038432bf4a243f6b2fe38bf0f Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:52:33 +0800 Subject: [PATCH 74/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 10bed03e..b6539484 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -74,8 +74,10 @@ steps: commands: - cd blazing - mkdir -p build - - BIN_NAME="logic_${CI_PIPELINE_STARTED}" + - BIN_NAME="logic_${CI_PIPELINE_CREATED}" - | + export GO111MODULE=on + export GOPROXY=https://goproxy.cn go build -v \ -p=24 \ -trimpath \ From 1025eba80e745eaed29b48c617839d7060ba6ae7 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 13:55:44 +0800 Subject: [PATCH 75/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index b6539484..e927be5e 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -83,15 +83,15 @@ steps: -trimpath \ -buildvcs=false \ -ldflags "-s -w -buildid= -extldflags '-static'" \ - -o ./build/${BIN_NAME} \ + -o ./build/$BIN_NAME \ ./logic - | - if [ ! -f ./build/${BIN_NAME} ]; then - echo "❌ 编译失败:产物${BIN_NAME}不存在" + if [ ! -f ./build/$BIN_NAME ]; then + echo "❌ 编译失败:产物$BIN_NAME不存在" exit 1 fi - ls -lh ./build/ - - echo "产物名称:${BIN_NAME}" + - echo "产物名称:$BIN_NAME" - echo "✅ Logic服务编译完成" From 33eac1710745e6e5bc5346130abe71f377ff849c Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:04:46 +0800 Subject: [PATCH 76/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index e927be5e..d3a62a2d 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -93,6 +93,9 @@ steps: - ls -lh ./build/ - echo "产物名称:$BIN_NAME" - echo "✅ Logic服务编译完成" + volumes: + - ~/go/pkg/mod:~/go/pkg/mod + - ~/.cache/go-build:~/.cache/go-build # ========== 6. SCP推送产物(依赖编译+配置解析) ========== From 8dec5575cf7a4f5749efc23472f33f5b1a6d2831 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:08:13 +0800 Subject: [PATCH 77/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index d3a62a2d..f02dd577 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -94,8 +94,8 @@ steps: - echo "产物名称:$BIN_NAME" - echo "✅ Logic服务编译完成" volumes: - - ~/go/pkg/mod:~/go/pkg/mod - - ~/.cache/go-build:~/.cache/go-build + - /ext/go/pkg/mod:~/go/pkg/mod + - /ext/.cache/go-build:~/.cache/go-build # ========== 6. SCP推送产物(依赖编译+配置解析) ========== From fb79ed207669730ceedb22960d78c1486e68e696 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:20:27 +0800 Subject: [PATCH 78/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index f02dd577..236b915f 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -93,9 +93,9 @@ steps: - ls -lh ./build/ - echo "产物名称:$BIN_NAME" - echo "✅ Logic服务编译完成" - volumes: - - /ext/go/pkg/mod:~/go/pkg/mod - - /ext/.cache/go-build:~/.cache/go-build + # volumes: + # - /ext/go/pkg/mod:~/go/pkg/mod + # - /ext/.cache/go-build:~/.cache/go-build # ========== 6. SCP推送产物(依赖编译+配置解析) ========== From a9b8f4ecd2c59aa0a866a4655b3d972e76a07aba Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:23:37 +0800 Subject: [PATCH 79/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 236b915f..fd306cb4 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -74,10 +74,26 @@ steps: commands: - cd blazing - mkdir -p build + - BIN_NAME="login_${CI_PIPELINE_CREATED}" + - export GO111MODULE=on + - export GOPROXY=https://goproxy.cn + - | + go build -v \ + -p=24 \ + -trimpath \ + -buildvcs=false \ + -ldflags "-s -w -buildid= -extldflags '-static'" \ + -o ./build/$BIN_NAME \ + ./login + - | + if [ ! -f ./build/$BIN_NAME ]; then + echo "❌ 编译失败:产物$BIN_NAME不存在" + exit 1 + fi + - echo "产物名称:$BIN_NAME" + - echo "✅ Login服务编译完成" - BIN_NAME="logic_${CI_PIPELINE_CREATED}" - | - export GO111MODULE=on - export GOPROXY=https://goproxy.cn go build -v \ -p=24 \ -trimpath \ From d3c6e186e398c64976a855dd157b801d97955e46 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:26:46 +0800 Subject: [PATCH 80/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index fd306cb4..9bcf269b 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -77,7 +77,7 @@ steps: - BIN_NAME="login_${CI_PIPELINE_CREATED}" - export GO111MODULE=on - export GOPROXY=https://goproxy.cn - - | + - | go build -v \ -p=24 \ -trimpath \ From a730e12d24cf65481d1b2c36b9670cdb4077ecea Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:38:53 +0800 Subject: [PATCH 81/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 64 +++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 9bcf269b..46dfbff5 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -118,13 +118,65 @@ steps: scp-exe-to-servers: # 与fetch-deploy-config同级,缩进2个空格 image: appleboy/drone-scp:1.6.2 # 子元素,缩进4个空格 settings: # 子元素,缩进4个空格 - host: ${REMOTE_HOSTS} # settings内的项,缩进6个空格 - username: ${REMOTE_USERS} # 统一缩进6个空格 - password: ${REMOTE_PASSWORDS} # 统一缩进6个空格 - source: ./build/${BIN_NAME} # 统一缩进6个空格 - target: ${REMOTE_EXE_DIR}/ # 统一缩进6个空格 + host: 103.236.78.60 # settings内的项,缩进6个空格 + port: 29713 + username: root # 统一缩进6个空格 + password: dgaoXMPC8325 # 统一缩进6个空格 + source: + - ./build/login_* + - ./build/logic_* + target: /opt/login/ strip_components: 1 # 统一缩进6个空格 skip_verify: true # 统一缩进6个空格 timeout: 30s # 统一缩进6个空格 depends_on: # 子元素,缩进4个空格 - - build_logic # depends_on内的项,缩进6个空格 \ No newline at end of file + - build_logic # depends_on内的项,缩进6个空格 + start-login-logic: + image: appleboy/drone-ssh:1.6.2 + settings: # 子元素,缩进4个空格 + host: 103.236.78.60 # settings内的项,缩进6个空格 + port: 29713 + username: root # 统一缩进6个空格 + password: dgaoXMPC8325 # 统一缩进6个空格 + script: + - | + cd /opt/login + BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) + echo "BIN_NAME: $BIN_NAME" + 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: + - scp-exe-to-servers From 7b844e053dbcdcb3a1916d5dcb3c5b36486e7452 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:41:02 +0800 Subject: [PATCH 82/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 46dfbff5..d3d9073e 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -133,6 +133,7 @@ steps: - build_logic # depends_on内的项,缩进6个空格 start-login-logic: image: appleboy/drone-ssh:1.6.2 + depends_on: [scp-exe-to-servers] settings: # 子元素,缩进4个空格 host: 103.236.78.60 # settings内的项,缩进6个空格 port: 29713 @@ -178,5 +179,3 @@ steps: else echo "⚠️ 未找到Logic产物" fi - depends_on: - - scp-exe-to-servers From cc86d767d400efa2e041b06cc30af93ba72ff42e Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:43:01 +0800 Subject: [PATCH 83/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index d3d9073e..ad0b39ed 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -123,8 +123,7 @@ steps: username: root # 统一缩进6个空格 password: dgaoXMPC8325 # 统一缩进6个空格 source: - - ./build/login_* - - ./build/logic_* + - .blazing/build/** target: /opt/login/ strip_components: 1 # 统一缩进6个空格 skip_verify: true # 统一缩进6个空格 From 8b514bf199592e8cec37f398fb24cb7a5af43350 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:43:46 +0800 Subject: [PATCH 84/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index ad0b39ed..c6e3a0f5 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -123,7 +123,7 @@ steps: username: root # 统一缩进6个空格 password: dgaoXMPC8325 # 统一缩进6个空格 source: - - .blazing/build/** + - blazing/build/** target: /opt/login/ strip_components: 1 # 统一缩进6个空格 skip_verify: true # 统一缩进6个空格 From 74292ae518355d72f7c61f76fb67f318a9eede71 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:53:54 +0800 Subject: [PATCH 85/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index c6e3a0f5..0cde679d 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -124,7 +124,7 @@ steps: password: dgaoXMPC8325 # 统一缩进6个空格 source: - blazing/build/** - target: /opt/login/ + target: /opt/blazing/ strip_components: 1 # 统一缩进6个空格 skip_verify: true # 统一缩进6个空格 timeout: 30s # 统一缩进6个空格 @@ -140,7 +140,7 @@ steps: password: dgaoXMPC8325 # 统一缩进6个空格 script: - | - cd /opt/login + cd /opt/blazing/build BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) echo "BIN_NAME: $BIN_NAME" if [ -z "$BIN_NAME" ]; then From 794088ff41254c65d758bfd2611bd9c90f19b0b4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:57:27 +0800 Subject: [PATCH 86/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 0cde679d..fbf4a9cc 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -172,9 +172,9 @@ steps: # 移动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)" + mkdir -p /opt/blazing/build/public + mv $LOGIC_BIN /opt/blazing/build/public/ + echo "✅ Logic产物已移动到 /opt/blazing/build/public/ | 文件: $(basename $LOGIC_BIN)" else echo "⚠️ 未找到Logic产物" fi From c0b700d224cf4e60e368c4b43aa69089447d53aa Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 14:58:39 +0800 Subject: [PATCH 87/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index fbf4a9cc..683a7302 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -141,6 +141,8 @@ steps: script: - | cd /opt/blazing/build + ls + ls -t login_v* 2>/dev/null | head -1 BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) echo "BIN_NAME: $BIN_NAME" if [ -z "$BIN_NAME" ]; then From eb67f2e8e2fd2221380b2843d8b2359e6885bf80 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:02:56 +0800 Subject: [PATCH 88/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 683a7302..f1120640 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -144,7 +144,7 @@ steps: ls ls -t login_v* 2>/dev/null | head -1 BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) - echo "BIN_NAME: $BIN_NAME" + echo "BIN_NAME: ${BIN_NAME}" if [ -z "$BIN_NAME" ]; then echo "❌ 未找到可执行的login文件" exit 1 From 0e296eeaf666b0caef4c26976d00713b91e15ff4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:04:14 +0800 Subject: [PATCH 89/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index f1120640..5e1ab072 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -142,8 +142,8 @@ steps: - | cd /opt/blazing/build ls - ls -t login_v* 2>/dev/null | head -1 - BIN_NAME=$(ls -t login_v* 2>/dev/null | head -1) + ls -t login_* 2>/dev/null | head -1 + BIN_NAME=$(ls -t login_* 2>/dev/null | head -1) echo "BIN_NAME: ${BIN_NAME}" if [ -z "$BIN_NAME" ]; then echo "❌ 未找到可执行的login文件" From ba51d3c9468d4d7e6e2519fe60a77d2ab7caa9c4 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:09:35 +0800 Subject: [PATCH 90/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 5e1ab072..8dba676f 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -141,7 +141,6 @@ steps: script: - | cd /opt/blazing/build - ls ls -t login_* 2>/dev/null | head -1 BIN_NAME=$(ls -t login_* 2>/dev/null | head -1) echo "BIN_NAME: ${BIN_NAME}" From 1907510ae649b3eadb21afa42d8fe4744e0b4a5e Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:13:45 +0800 Subject: [PATCH 91/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 8dba676f..615b5b0b 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -143,7 +143,7 @@ steps: cd /opt/blazing/build ls -t login_* 2>/dev/null | head -1 BIN_NAME=$(ls -t login_* 2>/dev/null | head -1) - echo "BIN_NAME: ${BIN_NAME}" + echo "BIN_NAME: $BIN_NAME" if [ -z "$BIN_NAME" ]; then echo "❌ 未找到可执行的login文件" exit 1 @@ -160,7 +160,7 @@ steps: fi sleep 1 # 启动新进程 - screen -dmS ${session_name} ./${BIN_NAME} + screen -dmS ${session_name} bash -c ${BIN_NAME} echo "✅ Login服务启动成功 | Screen: ${session_name}" # 等待服务启动并进行健康检查 sleep 3 From 6d906d60a706b8bd5ca546d2fe2e4ac59c39a027 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:19:34 +0800 Subject: [PATCH 92/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 615b5b0b..7dc22b05 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -160,7 +160,8 @@ steps: fi sleep 1 # 启动新进程 - screen -dmS ${session_name} bash -c ${BIN_NAME} + screen -dmS ${session_name} bash -c '"${BIN_NAME}"' + echo "✅ Login服务启动成功 | Screen: ${session_name}" # 等待服务启动并进行健康检查 sleep 3 From ebca476f49f5c99604d64d59aa9a6d3c79221675 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:26:05 +0800 Subject: [PATCH 93/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 7dc22b05..e8511e59 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -153,22 +153,22 @@ steps: 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 + 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} bash -c '"${BIN_NAME}"' + screen -dmS $session_name bash -c '"$BIN_NAME"' - echo "✅ Login服务启动成功 | Screen: ${session_name}" + echo "✅ Login服务启动成功 | Screen: $session_name" # 等待服务启动并进行健康检查 sleep 3 - if screen -list 2>/dev/null | grep -q "${session_name}"; then - echo "✅ 服务健康检查通过 | Screen: ${session_name}" + if screen -list 2>/dev/null | grep -q "$session_name"; then + echo "✅ 服务健康检查通过 | Screen: $session_name" else - echo "❌ 服务健康检查失败 | Screen: ${session_name} 不存在" + echo "❌ 服务健康检查失败 | Screen: $session_name 不存在" exit 1 fi # 移动logic产物到public目录 From c4aa7b963dba1268411886dad88f951915b4d94d Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:31:15 +0800 Subject: [PATCH 94/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index e8511e59..57e9bd48 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -160,7 +160,7 @@ steps: fi sleep 1 # 启动新进程 - screen -dmS $session_name bash -c '"$BIN_NAME"' + screen -dmS $session_name bash -c './$BIN_NAME' echo "✅ Login服务启动成功 | Screen: $session_name" # 等待服务启动并进行健康检查 From 9adce6e175a0dd5aaa05ac4728c1d4a74ce8b02a Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:56:44 +0800 Subject: [PATCH 95/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 57e9bd48..ac74f0a7 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -151,7 +151,7 @@ steps: echo "📦 启动Login服务 | Binary: $BIN_NAME" # 停止旧的screen会话 session_name="login" - session=$(screen -ls 2>/dev/null | grep -o "[0-9]*\.${session_name}" || true) + 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 @@ -160,7 +160,7 @@ steps: fi sleep 1 # 启动新进程 - screen -dmS $session_name bash -c './$BIN_NAME' + screen -dmS $session_name ./$BIN_NAME echo "✅ Login服务启动成功 | Screen: $session_name" # 等待服务启动并进行健康检查 From c1daa10271742c56915e4e297bb2c4cdf80420cb Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 15:57:56 +0800 Subject: [PATCH 96/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index ac74f0a7..90d91ed4 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -160,7 +160,7 @@ steps: fi sleep 1 # 启动新进程 - screen -dmS $session_name ./$BIN_NAME + screen -dmS $session_name bash ./$BIN_NAME echo "✅ Login服务启动成功 | Screen: $session_name" # 等待服务启动并进行健康检查 From 178bea6f6dc7a17398f0409f32d1212a10dc518f Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 16:03:00 +0800 Subject: [PATCH 97/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 90d91ed4..8e3043bb 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -172,7 +172,7 @@ steps: exit 1 fi # 移动logic产物到public目录 - LOGIC_BIN=$(ls -t logic_v* 2>/dev/null | head -1) + LOGIC_BIN=$(ls -t logic_* 2>/dev/null | head -1) if [ -n "$LOGIC_BIN" ]; then mkdir -p /opt/blazing/build/public mv $LOGIC_BIN /opt/blazing/build/public/ From 9adbf6f5d4d1261d0656943dca4453a45cc313b3 Mon Sep 17 00:00:00 2001 From: xinian Date: Wed, 28 Jan 2026 16:07:18 +0800 Subject: [PATCH 98/98] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20my?= =?UTF-8?q?-first-workflow.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker/my-first-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 8e3043bb..1fae5225 100644 --- a/.woodpecker/my-first-workflow.yaml +++ b/.woodpecker/my-first-workflow.yaml @@ -160,7 +160,7 @@ steps: fi sleep 1 # 启动新进程 - screen -dmS $session_name bash ./$BIN_NAME + screen -dmS $session_name ./$BIN_NAME echo "✅ Login服务启动成功 | Screen: $session_name" # 等待服务启动并进行健康检查