跳到主要内容

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。任务名称建议只使用英文、数字、短横线和下划线。

源码管理至少确认:

  1. 仓库地址是实际交付的 ShopTNT 8.0 PC 前端仓库。
  2. 凭据只授予读取源码所需权限。
  3. 构建分支明确配置为 8.0,不能使用默认分支或模糊通配符代替。
  4. 控制台记录本次构建的提交哈希。

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 退出码来制造假成功。

typechecklintlocale: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. 构建结果检查

任务结束前至少确认:

  1. 控制台中的提交哈希与计划发布的 8.0 提交一致。
  2. pnpm typecheckpnpm lintpnpm locale:checkpnpm build 均返回 0。
  3. 三端 index.htmlversion 和资源目录均已归档。
  4. 失败任务没有触发后续发布。
  5. Jenkins 日志没有输出凭据或敏感配置。

部署和线上验证见部署 PC 前端