Skip to content

GitHub Actions

什么是 GitHub Actions

GitHub Actions 是 GitHub 提供的 CI/CD 服务,它允许你在 GitHub 仓库中自动执行软件构建、测试和部署流程。GitHub Actions 使用工作流(Workflows)来定义自动化任务,可以响应仓库中的事件(如推送、拉取请求等)。

GitHub Actions 的特点

1. 与 GitHub 集成

  • 直接在 GitHub 仓库中配置
  • 响应 GitHub 事件
  • 与 GitHub 生态系统无缝集成

2. 灵活的工作流

  • 自定义工作流
  • 支持多种事件触发
  • 并行和串行执行任务

3. 丰富的市场

  • 大量预构建的 Actions
  • 社区贡献的 Actions
  • 可重用的工作流

4. 强大的执行环境

  • 支持 Linux、macOS 和 Windows
  • 可配置的虚拟环境
  • 丰富的工具和软件

5. 免费使用

  • 公共仓库免费
  • 私有仓库有一定的免费额度

GitHub Actions 的基本概念

1. 工作流(Workflow)

  • 定义在 .github/workflows/ 目录下的 YAML 文件
  • 由一个或多个作业组成
  • 可以由事件触发

2. 事件(Event)

  • 触发工作流的事件
  • 如 push、pull_request、schedule 等

3. 作业(Job)

  • 工作流中的一个独立单元
  • 运行在独立的虚拟环境中
  • 可以并行或串行执行

4. 步骤(Step)

  • 作业中的一个任务
  • 可以运行命令或使用 Action

5. Action

  • 可重用的任务
  • 可以是 GitHub 市场中的 Action 或自定义 Action

创建 GitHub Actions 工作流

基本工作流示例

yaml
name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version: 16
    - name: Install dependencies
      run: npm install
    - name: Build
      run: npm run build
    - name: Test
      run: npm test

工作流触发事件

yaml
on:
  # 推送事件
  push:
    branches: [ main, develop ]
    paths-ignore:
      - 'README.md'
  # 拉取请求事件
  pull_request:
    branches: [ main ]
  # 定时触发
  schedule:
    - cron: '0 0 * * *'
  # 手动触发
  workflow_dispatch:

矩阵构建

yaml
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14, 16, 18]

    steps:
    - uses: actions/checkout@v3
    - name: Set up Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
    - name: Install dependencies
      run: npm install
    - name: Build
      run: npm run build
    - name: Test
      run: npm test

GitHub Actions 市场

GitHub Actions 市场是一个包含大量预构建 Actions 的仓库,你可以在工作流中使用这些 Actions 来简化配置。

常用 Actions

  • actions/checkout:检出代码
  • actions/setup-node:设置 Node.js 环境
  • actions/setup-python:设置 Python 环境
  • actions/setup-java:设置 Java 环境
  • actions/upload-artifact:上传构建产物
  • actions/download-artifact:下载构建产物
  • actions/cache:缓存依赖项

GitHub Actions 最佳实践

1. 工作流设计

  • 保持工作流简洁
  • 合理划分作业
  • 使用矩阵构建测试多个版本

2. 性能优化

  • 缓存依赖项
  • 并行执行测试
  • 使用适当的运行环境

3. 安全性

  • 使用 GitHub Secrets 存储敏感信息
  • 限制工作流的权限
  • 定期更新 Actions 版本

4. 可维护性

  • 使用可重用的工作流
  • 模块化工作流配置
  • 提供清晰的注释

5. 监控和调试

  • 添加详细的日志
  • 使用 GitHub Actions 日志查看器
  • 测试工作流变更

GitHub Actions 常见问题

1. 工作流不触发

  • 检查事件配置
  • 检查分支名称
  • 检查文件路径

2. 构建失败

  • 检查构建日志
  • 检查依赖项
  • 检查环境配置

3. 性能问题

  • 优化缓存策略
  • 减少不必要的步骤
  • 使用并行构建

4. 安全问题

  • 避免硬编码敏感信息
  • 使用 GitHub Secrets
  • 限制 Actions 的权限

学习资源

实践练习

  1. 创建一个简单的 GitHub Actions 工作流
  2. 配置自动测试
  3. 实现持续部署
  4. 使用矩阵构建测试多个版本
  5. 集成第三方服务

基于 VitePress 的本地知识库