引言:为什么 CI/CD 对 TypeScript 项目至关重要
\n使用 TypeScript 开发是一个强大的工具,但如果没有构建、测试和部署流程的自动化,您将面临人为错误、时间浪费和生产环境不稳定的风险。CI/CD(持续集成/持续部署) 是一种理念和一套实践,可以让这些流程自动化。GitHub Actions 是 GitHub 内置的工具,非常适合 TypeScript 项目,它提供灵活、可扩展且免费(针对公共仓库)的流水线。
\n在本文中,我们将从零开始,构建一个完整的流水线:配置代码检查、测试、构建以及 TypeScript 应用程序的自动部署。您将学习如何编写高效的 YAML 配置文件、优化执行时间以及避免常见错误。
\n\n主体部分:逐步创建 CI/CD 流水线
\n\n1. GitHub Actions 基础:workflow 结构
\nGitHub Actions 中的 Workflow(工作流程)是一组步骤,组合成 job。它用 YAML 文件描述,该文件存储在仓库的 .github/workflows/ 目录中。基本结构如下:
name: CI/CD Pipeline for TypeScript\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n build-and-test:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v4\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n - run: npm ci\n - run: npm run build\n - run: npm test\n关键元素:
\n- \n
on:— 触发器(push, pull_request)。 \njobs:— 任务列表(jobs),可以并行或串行执行。 \nruns-on:— 执行所用的操作系统(通常是ubuntu-latest)。 \nsteps:— 命令序列。uses调用现成的 actions,而run执行 shell 命令。 \nnpm ci— 根据package-lock.json快速干净地安装依赖。 \n
这个最小化的流水线已经提供了基本的 CI:每次推送或 PR 时,代码都会经过构建和测试验证。
\n\n2. 扩展配置:代码检查、格式化与版本矩阵
\n对于 TypeScript 项目,保持统一的代码风格至关重要。我们添加 linter(eslint)和 formatter(prettier)检查。同时使用策略矩阵来测试多个 Node.js 版本。
jobs:\n lint-and-format:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n - run: npm ci\n - run: npm run lint\n - run: npm run format:check\n\n test:\n needs: lint-and-format\n runs-on: ubuntu-latest\n strategy:\n matrix:\n node-version: [18, 20, 22]\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with:\n node-version: ${{ matrix.node-version }}\n cache: 'npm'\n - run: npm ci\n - run: npm test\n重要事项:
\n- \n
needs:— 指定 job 的执行顺序(先代码检查,后测试)。 \nstrategy.matrix— 允许使用不同参数(Node.js 版本)运行同一个 job。 \n- 缓存(
cache: 'npm')加速依赖安装。 \n - 在
package.json中添加脚本:"lint": "eslint src/"和"format:check": "prettier --check src/"。 \n