diff --git a/.woodpecker/my-first-workflow.yaml b/.woodpecker/my-first-workflow.yaml index 5eea37e06..304c3d19b 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