From 12d3a366237013ea2cae6e2a8a109b1f1daa2b97 Mon Sep 17 00:00:00 2001 From: gxl Date: Wed, 3 Jun 2026 10:50:38 +0800 Subject: [PATCH] 29 --- .woodpecker/build.yaml | 6 ++++-- .woodpecker/deploy.yaml | 40 ++++++++++++++++++---------------------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index a37d877..ad07576 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -1,6 +1,5 @@ # .woodpecker/build.yaml -kind: pipeline -name: build-pipeline +# 🛑 注意:文件夹多管线模式下,顶层不要写 kind: pipeline 和 name steps: - name: Java 构建 @@ -10,6 +9,9 @@ steps: - mvn clean package -DskipTests volumes: - /tmp/maven-cache:/root/.m2 + when: + event: [ push, pull_request, manual ] + branch: master - name: 镜像构建与推送 image: docker.m.daocloud.io/woodpeckerci/plugin-docker-buildx:latest diff --git a/.woodpecker/deploy.yaml b/.woodpecker/deploy.yaml index f852f59..fbc6ec0 100644 --- a/.woodpecker/deploy.yaml +++ b/.woodpecker/deploy.yaml @@ -1,55 +1,51 @@ # .woodpecker/deploy.yaml -kind: pipeline -name: deploy-pipeline +# 🛑 注意:文件夹多管线模式下,顶层不要写 kind: pipeline 和 name -# 🛑 依赖铁律:必须等上游的 build-pipeline 构建推送成功,这里才开始轰鸣 +# 🔗 显式声明:必须等同目录下的 build.yaml 执行成功才触发当前部署 depends_on: - - build-pipeline + - build.yaml -# 🛠️ 核心策略:集群矩阵定义 -# 在这里配置你所有不同的服务器 IP,以及它们在 Woodpecker Web UI 后台对应的专属 Secret 名字 +# 🛠️ 你的专属集群矩阵定义(IP、账密全部完美隐藏进 Secret) matrix: include: - NODE_NAME: "集群节点A (136服务器)" SECRET_NODE_IP: "136_ssh_host" - # 👇 告诉插件:此节点去读名为 node_a_user 和 node_a_pass 的 Secret SECRET_USER_NAME: "136_ssh_user" SECRET_PASS_NAME: "136_ssh_password" - NODE_NAME: "集群节点B (114服务器)" SECRET_NODE_IP: "114_ssh_host" - # 👇 告诉插件:此节点去读名为 node_b_user 和 node_b_pass 的 Secret SECRET_USER_NAME: "114_ssh_user" SECRET_PASS_NAME: "114_ssh_password" steps: - name: 远程终端集群部署 image: docker.m.daocloud.io/appleboy/drone-ssh:latest - environment: - # 将公共的阿里云密文注入到临时环境变量中 - MY_ALIYUN_USER: - from_secret: aliyun_acr_username - MY_ALIYUN_PASS: - from_secret: aliyun_acr_password settings: - # 👇 动态读取矩阵中当前节点的真实 IP + # 👇 1. 完美支持:动态读取你矩阵中填写的各个 Secret 键名 host: from_secret: ${SECRET_NODE_IP} - # 👇 动态读取矩阵中指定的、各不相同的 SSH 账号密码 Secret 名字 username: from_secret: ${SECRET_USER_NAME} password: from_secret: ${SECRET_PASS_NAME} port: 22 - # 告诉插件,把上面的这两个公共变量强行带到远程各服务器的终端里去 - envs: [ MY_ALIYUN_USER, MY_ALIYUN_PASS ] + + # 👇 2. 完美修复 Linter 报错:把公共的阿里云账密直接作为 secrets 属性传入插件内部! + # 这样完全不需要在外层写 environment,插件会自动将它们注入成远程主机的环境变量 + secrets: [ aliyun_acr_username, aliyun_acr_password ] + + # 把矩阵变量和公共账密同时下发到远程 136/114 终端 + envs: [ NODE_NAME, SECRET_NODE_IP, aliyun_acr_username, aliyun_acr_password ] + script: - echo "=========================================" - - echo "🚀 开始部署节点:${NODE_NAME} (${SECRET_NODE_IP})" + - echo "🚀 开始部署节点:$NODE_NAME" + - echo "🔒 节点 IP 密文键名:$SECRET_NODE_IP" - echo "=========================================" - # 1. 在各自的远程服务器本土直接登录阿里云,由于变量被 envs 带过去了,值绝对真实有效! - - docker login --username "$MY_ALIYUN_USER" --password "$MY_ALIYUN_PASS" registry.cn-zhangjiakou.aliyuncs.com + # 1. 在各自的远程服务器本土直接登录阿里云(变量由 secrets/envs 安全带入) + - docker login --username "$aliyun_acr_username" --password "$aliyun_acr_password" registry.cn-zhangjiakou.aliyuncs.com # 2. 清理远程旧容器(防止重名冲突,加 || true 防止第一次找不到报错) - docker stop demo-container || true @@ -61,7 +57,7 @@ steps: # 4. 直接原生 docker run 轰起来!不需要任何额外文件,不需要 compose - docker run -d --name demo-container -p 8080:8080 --restart always registry.cn-zhangjiakou.aliyuncs.com/abhors/demo:latest - - echo "🎉 ${NODE_NAME} 部署成功!" + - echo "🎉 $NODE_NAME 部署成功!" when: event: [push, pull_request, manual]