Jenkins UI 构建任务
本文说明如何让 Jenkins 构建 ShopTNT 8.0 PC、Seller 和 Admin 三端静态制品。任务只负责检出、校验、构建和归档,不包含未经当前部署环境验证的 SSH 上传或远程解压脚本。
warning
8.0 已不再使用旧版多工程目录、独立域名脚本和 build:prod。不要导入旧版 sbcUI.zip 任务,也不要复制旧任务中的 Yarn 构建脚本。
1. 准备 Jenkins 节点
执行节点需要具备:
- Git。
- Node.js 22.13 及以上;本阶段已验证 22.17.0。
- Corepack。
- 访问依赖仓库所需的网络能力。
- 足够容纳 pnpm 依赖缓存和三端
dist的磁盘空间。
仓库声明使用 pnpm@11.7.0,安装依赖时的 preinstall 会拒绝 npm 或 Yarn。
2. 新建任务
可以创建 Freestyle 任务,也可以把同样的命令迁入团队维护的 Pipeline。任务名称建议只使用英文、数字、短横线和下划线。
源码管理至少确认:
- 仓库地址是实际交付的 ShopTNT 8.0 PC 前端仓库。
- 凭据只授予读取源码所需权限。
- 构建分支明确配置为
8.0,不能使用默认分支或模糊通配符代替。 - 控制台记录本次构建的提交哈希。
3. 注入环境配置
生产构建读取根目录 .env.production。可以通过 Jenkins 已批准的配置文件管理能力在构建时提供该文件,但不要在任务脚本中回显配置值。
VITE_* 会进入浏览器产物,不能存放服务器密码、数据库密码、私钥或令牌。任务应在构建前确认 API、域名、部署子路径、资源前缀和功能开关已经填写,不能依赖本机默认地址。
4. 执行构建
在“执行 Shell”步骤使用仓库根命令:
#!/usr/bin/env bash
set -euo pipefail
export CI=true
corepack enable
corepack prepare pnpm@11.7.0 --activate
test "$(pnpm --version)" = "11.7.0"
pnpm install --frozen-lockfile
git rev-parse HEAD
pnpm typecheck
pnpm lint
pnpm locale:check
pnpm build
test -s apps/pc/dist/index.html
test -s apps/pc/dist/version
test -s apps/seller/dist/index.html
test -s apps/seller/dist/version
test -s apps/admin/dist/index.html
test -s apps/admin/dist/version
set -euo pipefail 和六个产物断言用于确保任一步失败时任务立即结束。不要通过追加 || true、只检查压缩命令结果或忽略 pnpm 退出码来制造假成功。
typecheck、lint、locale:check 和生产构建是同一组 fail-fast 门禁,不能把其中任一项降级为可选步骤,也不能静默吞掉错误。
5. 归档制品
构建成功后,使用 Jenkins 的“归档构建产物”保存:
apps/pc/dist/**
apps/seller/dist/**
apps/admin/dist/**
同时保留以下元数据:
- Git 提交哈希。
- Jenkins build number。
- 构建时间。
- 使用的目标环境标识。
- 三端
index.html或完整制品的校验值。
归档应来自同一次 workspace 构建。不要把不同任务或不同提交的 PC、Seller、Admin 产物拼成一个发布批次。
6. 发布边界
Jenkins 构建成功只表示静态制品已生成,不表示已经部署或通过业务验收。后续发布任务应从本次归档制品取文件,并使用当前环境已经批准的备份、同步、Nginx 检查和回滚流程。
本文不提供通用 SSH 模板,因为服务器地址、凭据、跳板机、目标目录和服务管理方式都属于具体环境配置。未经验证时,不要复制旧任务中的 /opt/server、/root/distfile.zip 或固定 Nginx 路径。
7. 构建结果检查
任务结束前至少确认:
- 控制台中的提交哈希与计划发布的 8.0 提交一致。
pnpm typecheck、pnpm lint、pnpm locale:check和pnpm build均返回 0。- 三端
index.html、version和资源目录均已归档。 - 失败任务没有触发后续发布。
- Jenkins 日志没有输出凭据或敏感配置。
部署和线上验证见部署 PC 前端。