TypeScript 项目的 CI/CD:从 A 到 Z 的 GitHub Actions

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 CI/CD 对 TypeScript 项目至关重要

\n

使用 TypeScript 开发是一个强大的工具,但如果没有构建、测试和部署流程的自动化,您将面临人为错误、时间浪费和生产环境不稳定的风险。CI/CD(持续集成/持续部署) 是一种理念和一套实践,可以让这些流程自动化。GitHub Actions 是 GitHub 内置的工具,非常适合 TypeScript 项目,它提供灵活、可扩展且免费(针对公共仓库)的流水线。

\n

在本文中,我们将从零开始,构建一个完整的流水线:配置代码检查、测试、构建以及 TypeScript 应用程序的自动部署。您将学习如何编写高效的 YAML 配置文件、优化执行时间以及避免常见错误。

\n\n

主体部分:逐步创建 CI/CD 流水线

\n\n

1. GitHub Actions 基础:workflow 结构

\n

GitHub Actions 中的 Workflow(工作流程)是一组步骤,组合成 job。它用 YAML 文件描述,该文件存储在仓库的 .github/workflows/ 目录中。基本结构如下:

\n
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)。
  • \n
  • jobs: — 任务列表(jobs),可以并行或串行执行。
  • \n
  • runs-on: — 执行所用的操作系统(通常是 ubuntu-latest)。
  • \n
  • steps: — 命令序列。uses 调用现成的 actions,而 run 执行 shell 命令。
  • \n
  • npm ci — 根据 package-lock.json 快速干净地安装依赖。
  • \n
\n

这个最小化的流水线已经提供了基本的 CI:每次推送或 PR 时,代码都会经过构建和测试验证。

\n\n

2. 扩展配置:代码检查、格式化与版本矩阵

\n

对于 TypeScript 项目,保持统一的代码风格至关重要。我们添加 linter(eslint)和 formatter(prettier)检查。同时使用策略矩阵来测试多个 Node.js 版本。

\n
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 的执行顺序(先代码检查,后测试)。
  • \n
  • strategy.matrix — 允许使用不同参数(Node.js 版本)运行同一个 job。
  • \n
  • 缓存(cache: 'npm')加速依赖安装。
  • \n
  • 在 package.json 中添加脚本:"lint": "eslint src/" 和 "format:check": "prettier --check src/"。
  • \n

博客

书籍推荐