跳转至

工作流

为什么要了解工作流

在 AI 时代做开发,手动重复的事情越少越好。工作流(Workflow)自动化可以帮你:

  • 代码提交后自动运行测试和构建
  • 自动部署网站或应用
  • 自动化日常任务(如数据备份、定时报告)

掌握工作流自动化是现代开发者的必备技能,也是吴恩达提到的"AI 工程师"需要具备的能力之一。

GitHub Actions

GitHub Actions 是最常用的 CI/CD 工具之一,和 GitHub 深度集成。你可以用它来自动构建、测试和部署项目。

什么是 CI/CD

  • CI(持续集成):每次代码提交后,自动运行测试和构建,确保代码质量
  • CD(持续部署):测试通过后,自动部署到生产环境

基本概念

  • Workflow(工作流):定义在 .github/workflows/ 目录下的 YAML 文件
  • Trigger(触发器):什么事件触发工作流(如 push、pull request)
  • Job(作业):工作流中的一个任务单元
  • Step(步骤):作业中的一个具体步骤

示例:自动构建 MkDocs 站点

# .github/workflows/deploy.yml
name: Deploy to GitHub Pages

on:
  push:
    branches:
      - main

permissions:
  contents: write

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: 设置 Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: 安装依赖
        run: pip install -r requirements.txt

      - name: 构建网站
        run: mkdocs build --clean

      - name: 部署到 GitHub Pages
        uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./site

常用 GitHub Actions

自动运行测试

name: Run Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 设置 Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - name: 安装依赖
        run: pip install -r requirements.txt
      - name: 运行测试
        run: pytest

代码质量检查

name: Lint

on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 设置 Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - name: 安装 linter
        run: pip install ruff
      - name: 检查代码风格
        run: ruff check .

其他自动化工具

Makefile

对于简单的本地自动化任务,Makefile 依然是最实用的方案(参见 [[Make]] 章节)。

pre-commit

在 Git 提交前自动运行检查:

pip install pre-commit
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.5.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml

Husky

在 Node.js 项目中使用 Git Hooks:

npx husky init

其他资源