所有文章

GitHub Actions 入门:自动化你的工作流

GitHub Actions 是 GitHub 内置的 CI/CD 平台,可以在代码推送、PR 创建等事件触发时自动执行任务。本文介绍基本用法。

GitHub Actions 是 GitHub 内置的 CI/CD 平台,可以在代码推送、PR 创建等事件触发时自动执行任务。本文介绍基本用法。

核心概念

  • Workflow:工作流,定义在 .github/workflows/*.yml
  • Event:触发条件,如 pushpull_requestschedule
  • Job:工作流中的一个任务,运行在独立的虚拟机上
  • Step:Job 中的单个步骤,可以是命令或 Action
  • Action:可复用的步骤单元,来自 GitHub Marketplace 或自定义

最简单的例子

name: Hello World

on: push

jobs:
  greet:
    runs-on: ubuntu-latest
    steps:
      - name: Say hello
        run: echo "Hello, GitHub Actions!"

常用触发条件

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]
  schedule:
    - cron: '0 9 * * 1'  # 每周一早上 9 点
  workflow_dispatch:       # 手动触发

实用示例:Node.js 项目 CI

name: CI

on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20]

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm'

      - run: npm ci
      - run: npm test

使用 Secrets

敏感信息(Token、密钥)存在仓库的 Settings → Secrets 中,通过 ${{ secrets.MY_SECRET }} 引用:

- name: Deploy
  env:
    API_TOKEN: ${{ secrets.API_TOKEN }}
  run: ./deploy.sh

缓存依赖

- uses: actions/cache@v4
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-

actions/setup-nodecache: 'npm' 参数会自动处理缓存,大多数情况下不需要手动配置。

常用 Actions

Action用途
actions/checkout检出代码
actions/setup-node配置 Node.js
actions/setup-python配置 Python
actions/upload-artifact上传构建产物
peaceiris/actions-gh-pages部署到 GitHub Pages

小技巧

只在特定路径变更时触发:

on:
  push:
    paths:
      - 'src/**'
      - 'package.json'

Job 之间传递数据:

jobs:
  build:
    outputs:
      version: ${{ steps.get-version.outputs.version }}
    steps:
      - id: get-version
        run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT

  deploy:
    needs: build
    steps:
      - run: echo "Deploying version ${{ needs.build.outputs.version }}"

GitHub Actions 的文档很完善,遇到具体需求直接查 官方文档Marketplace 找现成的 Action 即可。