AI TOOLS

EP14. "wp-ci-cd-and-release-engineering CI/CD 与发版审查"

首页 AI 工具 Claude · Skills · WordPress Skills · EP14
约 14 分钟· #EP14#Claude#WordPress Skills
🔒 登录后可标记已读
  • 你打包上传到 WordPress.org 的那个 zip,真的是审核通过的那个 commit 打出来的吗?还是本地东改改西改改再手动上传的?wp-ci-cd-and-release-engineering 就是专门抓这种「代码审查通过的版本」跟「实际发出去的版本」对不上的坑
  • 这是 jorgerosal/wordpress-skills 开源 skill 包里的其中一个,专门审查 WordPress 插件/主题的 CI/CD 流水线和发版流程
  • 核心原则:发版要可复现(reproducible)、打包范围要对应真正要发出去的产物、环境/权限/验证关卡要讲清楚——不能等东西发到用户手上或生产环境才发现出错
  • 前置知识:先看过 Overview 系列的「Claude Code 是什么与新手上手」「进阶功能:Skills、Plugins 与 Routines」两篇,知道 Skill 是什么、怎么装

重点内容


这个 Skill 是做什么的

wp-ci-cd-and-release-engineering 审查的是「代码之外」的东西:GitHub Actions workflow、打包脚本、WordPress.org 的 SVN 发版流程、部署时的密钥/环境处理、回滚方案。跟 wp-security-review 抓的是同一批代码里有没有漏洞不同,这个 skill 抓的是「这批代码怎么变成用户手上的那个 zip 或那次生产部署」这整条链路有没有断掉、有没有漏洞。

适合用在:

  • 审查 WordPress 插件/主题/headless 项目的 GitHub Actions 或其他 CI/CD workflow
  • 审计打包脚本、发版脚本、部署 job
  • 检查 WordPress.org 的 SVN 发版流程、产物生成、release tag
  • 审查部署/构建步骤/预览环境的密钥(secret)处理
  • 规划分阶段上线、回滚、发版前验证流程

不适合用在:

  • 纯代码层面的插件架构审查,跟发版流水线无关(交给 wp-plugin-development
  • 只是要设置静态分析(交给 wp-phpstan-review
  • 以 WP-CLI 为主的日常运维任务(交给 wp-wpcli-and-ops
  • headless 项目的缓存/内容更新架构,跟部署流水线本身无关(交给 wp-headless-and-wpgraphql

触发方式

方式写法说明
斜线指令(完整版)/wp-release-review [path]完整审查,按文件、按严重度分组给结果
斜线指令(快速版)/wp-release [path]只抓高风险问题,适合发版前快速过一遍
自然语言「审查一下这个插件的发版流程」「check this GitHub Actions deploy workflow」Claude 判断意图符合就会自动触发

📌 path 留空扫整个当前项目,也可以指定到 .github/workflows 或某个打包脚本所在的文件夹。


审查流程六步

  1. 找出发版相关的面 — CI 配置文件、发版脚本、打包成 zip 的步骤、发版文档/checklist
  2. 先看产物边界 — 到底哪些文件真正发到生产环境或 WordPress.org?产物是一次构建后到处复用,还是每个环境各自重新构建(容易导致「测试的版本」跟「发出去的版本」不是同一份代码)?测试文件、source map、密钥、本地配置有没有混进发版产物
  3. 审查环境与密钥处理 — 密钥有没有限制在真正需要用到的 job;生产部署有没有靠分支/tag/environment protection 卡住;预览/staging 环境是不是用了独立的密钥和目标地址
  4. 审查验证与可复现性 — 打包/部署前有没有先跑过 lint/测试/构建;依赖安装够不够锁定版本;发出去的产物有没有被单独验证过,而不是想当然认为「代码库长什么样,发出去的就是什么样」
  5. 审查回滚与发版操作 — 有没有写好的回滚流程;能不能追溯当前线上是哪个版本/哪个产物;重跑一次发版流程会不会导致部分重复部署
  6. 给严重度分级

严重度分级

严重度定义举例
CRITICAL生产部署完全没保护、密钥外泄、产物跟审查通过的代码对不上、未经审查就直接发生产、每次重新构建可能产出跟通过 CI 的那份不一样的代码每次 push 到没保护的分支就自动部署;密钥被 echo 出来或写进产物里
WARNING卡关机制偏弱、产物没被单独验证过、tag/版本号容易不同步、没有回滚说明、部署步骤依赖本地才有的假设readme.txt 版本号跟实际 tag 没对齐;发版靠人工手动复制文件
INFO可以做得更好,但不是真正的风险可以加缓存、可以用 matrix strategy、可以自动生成 changelog

按面向抓的坑

面向主要检查项
GitHub Actions / CI workflow部署 job 是不是每次 push 到没保护的分支就跑;密钥有没有被 echo 出来、写进产物、或暴露给不需要的 job;build/test/package/deploy 是不是全部揉在一个不透明的 job 里
打包/构建脚本发版 zip 是不是从一个「脏」的工作目录打出来的,或者跟审查通过的那个 commit 不是同一份;node_modules/测试文件/截图/本地配置有没有不小心被打包进去
WordPress.org / SVN 发版流程tag 跟 stable tag 有没有可能不同步导致发错版本;发版脚本是不是依赖本地 SVN 状态或手动复制步骤,没有做验证
环境提升与回滚staging 跟生产是不是共用同一套密钥/目标,没有明确的防呆机制;有没有回滚脚本/操作手册;部署后有没有做生产健康检查

实操示例:GitHub Actions 部署 job 的错法/对法

# ❌ CRITICAL:任何人 push 到 main 都会直接触发生产部署,密钥没有范围限制
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying with token ${{ secrets.SVN_PASSWORD }}"
      - run: ./deploy.sh

# ✅ GOOD:用 environment protection 卡住生产部署,密钥只给需要的 job,部署前先跑验证
on:
  push:
    tags: ['v*']
jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - run: composer install --no-dev --prefer-dist
      - run: npm ci && npm run build
      - run: npm test
  deploy:
    needs: verify
    runs-on: ubuntu-latest
    environment: production
    steps:
      - run: ./deploy.sh
        env:
          SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
# ❌ CRITICAL:发版 zip 直接打包整个工作目录,测试/本地配置一起带走
zip -r release.zip .

# ✅ GOOD:明确列出要打包的文件,排除开发用的文件
rsync -av --exclude-from='.distignore' ./ ./build/
cd build && zip -r ../release.zip .

怎么安装

这个 skill 是 wordpress-skills 这个开源仓库(jorgerosal/wordpress-skills)打包的 18 个技能之一,安装一次,18 个技能一起到位,不用逐个装:

Claude Code:

方式指令适用场景
装进单个项目(推荐)git submodule add https://github.com/jorgerosal/wordpress-skills.git .claude/plugins/wordpress-skills只想在这个项目用,团队成员 clone 项目就一起有
装到自己账号git clone https://github.com/jorgerosal/wordpress-skills.git ~/.claude/plugins/wordpress-skills所有项目都能用
只装这一个 skillcp -r claude-skills/wp-ci-cd-and-release-engineering ~/.claude/skills/只想要发版流程审查这一个功能,不要其他 17 个

装完重启 Claude Code,进到一个 WordPress 项目里跑 /wordpress-skills:wp-release-review 验证有没有装成功(用 marketplace/submodule 方式装的话,指令前面会带插件命名空间 wordpress-skills:;用「只装这一个 skill」的方式则不带命名空间,直接 /wp-release-review)。

Claude Desktop / claude.ai: 走 Settings → Capabilities → Skills,上传技能文件夹(把 claude-skills/wp-ci-cd-and-release-engineering 这个文件夹打包上传,里面要包含 SKILL.md)——跟 Claude Code 的 git submodule/marketplace 安装方式不同,Desktop 端是手动上传 UI,装好之后同样能用自然语言或 slash 指令触发。

常见错误

  • ❌ 把纯代码层面的插件架构问题(跟发版流水线无关)塞进这个 skill 审查——那是 wp-plugin-development 的活
  • ❌ 把「可以加缓存」「可以用 matrix strategy 加速」这类优化建议报成 CRITICAL——这些顶多是 INFO,不影响发版安全
  • ❌ 只看代码库长什么样就断定发出去的产物没问题——真正要验证的是「打包/部署出来的那个产物」本身,代码库干净不代表打包过程没有夹带垃圾文件
  • 💡 判断 CRITICAL 的关键不是「有没有部署 job」,而是「有没有保护机制」——一个会自动部署到生产环境的 job 本身不是问题,没有分支保护/environment protection 卡住它才是问题

Sources

官方文档:

  1. wordpress-skills(GitHub 仓库)— https://github.com/jorgerosal/wordpress-skills
  2. wp-ci-cd-and-release-engineering SKILL.md — https://github.com/jorgerosal/wordpress-skills/blob/main/claude-skills/wp-ci-cd-and-release-engineering/SKILL.md