1. on:
触发事件列表
GitHub Actions 可以响应超过 30 种不同的事件类型。以下是最常用的事件及其应用场景:
代码事件
-
push
: 当代码被推送到仓库时触发。- 场景:自动构建、测试、部署或代码质量检查。
-
pull_request
: 当创建、更新或合并拉取请求时触发。- 场景:自动执行测试、代码审查工具(如 ESLint)、依赖项分析。
-
pull_request_target
: 与pull_request
类似,但在基础分支上执行(而非 PR 分支)。- 场景:处理来自外部贡献者的 PR 时的安全敏感操作。
-
release
: 当创建、编辑或删除版本(Release)时触发。- 场景:自动打包和分发新版本。
计划事件
-
schedule
: 使用 cron 表达式定时触发。- 场景:每日 / 每周自动测试、依赖项更新检查。
手动触发
-
workflow_dispatch
: 允许通过 GitHub UI 或 API 手动触发。- 场景:按需执行部署、紧急修复验证。
仓库事件
-
workflow_run
: 当另一个工作流完成时触发。- 场景:链式工作流(如测试通过后触发部署)。
-
issues
/issue_comment
: 当问题(Issue)被创建、评论时触发。- 场景:自动回复、分类或分配任务。
-
repository_dispatch
: 通过 API 触发。- 场景:与外部系统集成(如 CI 工具触发 GitHub 工作流)。
完整列表 :见 GitHub 官方文档 Events that trigger workflows
2. runs-on:
运行环境列表
GitHub 提供三种运行环境类型:
托管运行器(GitHub-hosted Runners)
-
ubuntu-latest
/ubuntu-22.04
/ubuntu-20.04
: Ubuntu Linux 环境,预装常用开发工具。- 场景:大多数开源项目、Web 应用测试与构建。
-
windows-latest
/windows-2022
/windows-2019
: Windows Server 环境。- 场景:.NET 应用、Windows 特定依赖的项目。
-
macos-latest
/macos-13
/macos-12
: macOS 环境,预装 Xcode 和 iOS 开发工具。- 场景:iOS/macOS 应用开发、依赖 macOS 工具链的项目。
自定义运行器(Self-hosted Runners)
-
私有服务器 / 虚拟机:用户提供的硬件或云服务器。
- 场景:需要特定硬件(如 GPU)、内部网络访问或高并发需求。
应用场景选择
- 跨平台兼容性测试:同时使用
ubuntu
、windows
、macos
。 - 性能敏感任务:选择资源更高的运行器(如
macos-latest
提供 14GB RAM)。 - 合规性要求:使用私有运行器满足数据安全策略。
3. uses:
预定义操作列表
GitHub Actions Marketplace 提供超过 10,000 个预定义操作,按功能分类:
基础操作
-
actions/checkout@v3
: 检出代码仓库。- 场景:所有工作流的第一步,获取源代码。
-
actions/setup-python@v4
: 设置 Python 环境。- 场景:Python 项目的构建、测试。
-
actions/setup-node@v3
: 设置 Node.js 环境。- 场景:JavaScript/TypeScript 项目。
云服务集成
-
aws-actions/configure-aws-credentials@v1
: 配置 AWS 凭证。- 场景:部署到 AWS 服务(如 EC2、S3)。
-
google-github-actions/auth@v1
: Google Cloud 认证。- 场景:GCP 部署、Firebase 操作。
包管理
-
actions/cache@v3
: 缓存依赖项(如 npm、pip)。- 场景:加速频繁构建,减少下载时间。
-
docker/login-action@v2
: Docker 登录。- 场景:构建和推送 Docker 镜像。
部署工具
-
peaceiris/actions-gh-pages@v3
: 自动部署到 GitHub Pages。- 场景:静态网站发布。
-
softprops/action-gh-release@v1
: 创建 GitHub Release。- 场景:发布软件版本。
完整市场 :见 GitHub Actions Marketplace
4. run:
命令行命令列表
run
支持任何可在指定runs-on
环境中执行的命令,常见类型:
依赖安装
-
npm install
/pip install
: 安装项目依赖。- 场景:构建前准备环境。
-
bundle install
: Ruby 项目依赖安装。- 场景:Ruby on Rails 应用。
构建命令
-
npm run build
: 前端项目构建(如 React、Vue)。- 场景:生成静态资源。
-
mvn package
: Maven 项目打包。- 场景:Java 项目构建。
-
dotnet build
: .NET 项目构建。- 场景:Windows/Linux 跨平台应用。
测试命令
-
pytest
/jest
/go test
: 执行单元测试。- 场景:持续集成验证。
-
flake8
/eslint
: 代码风格检查。- 场景:保证代码质量。
部署命令
-
aws s3 sync
: 同步文件到 AWS S3。- 场景:静态网站部署。
-
docker build && docker push
: 构建并推送 Docker 镜像。- 场景:容器化应用部署。
复合命令
yaml
bash
run: |
echo "Starting build..."
./scripts/build.sh
./scripts/test.sh
./scripts/deploy.sh
- 场景:执行复杂的自定义脚本。
5. with:
输入参数列表
每个uses
操作都有自己的输入参数,以下是常见示例:
actions/checkout
-
ref
: 指定检出的分支或标签。- 场景:检出特定版本进行构建。
-
fetch-depth
: 控制检出的提交历史深度。- 场景:优化大型仓库的检出速度。
actions/setup-python
-
python-version
: 指定 Python 版本(如3.10
)。- 场景:跨版本兼容性测试。
-
cache
: 启用依赖缓存(如pip
)。- 场景:加速频繁构建。
aws-actions/configure-aws-credentials
-
aws-access-key-id
: AWS 访问密钥 ID。- 场景:通过 Secrets 安全注入凭证。
-
aws-region
: 指定 AWS 区域(如us-east-1
)。- 场景:部署到特定区域的服务。
peaceiris/actions-gh-pages
-
github_token
: GitHub 访问令牌。- 场景:授权访问 GitHub 仓库。
-
publish_dir
: 指定发布目录。- 场景:自定义静态网站源文件路径。
自定义操作参数
yaml
yaml
- uses: my-org/my-action@v1
with:
api-key: ${{ secrets.API_KEY }}
environment: production
files: 'dist/**/*.js'
- 场景:根据操作文档提供特定参数。
6. env:
环境变量列表
环境变量用于配置工作流行为,常见类型:
系统环境变量
-
HOME
: 用户主目录路径。- 场景:访问用户配置文件。
-
GITHUB_WORKSPACE
: 工作目录路径。- 场景:定位检出的代码。
GitHub 预设变量
-
GITHUB_REF
: 当前分支或标签(如refs/heads/main
)。- 场景:根据分支名称执行不同操作。
-
GITHUB_EVENT_NAME
: 触发事件名称(如push
)。- 场景:条件判断(如仅在 PR 时执行测试)。
用户自定义变量
yaml
yaml
env:
NODE_ENV: production
DB_HOST: db.example.com
API_KEY: ${{ secrets.SECURE_API_KEY }}
- 场景:配置应用参数、数据库连接信息等。
步骤级环境变量
yaml
yaml
steps:
- name: Build
env:
BUILD_OPTION: '--minify'
run: npm run build $BUILD_OPTION
- 场景:覆盖全局变量或提供步骤特定配置。
安全注意事项
- 敏感信息(如密码、密钥)必须通过 GitHub Secrets 注入,避免直接写在 YAML 中。
- 使用
${{ secrets.SECRET_NAME }}
语法引用 Secrets。
总结
GitHub Actions 的强大在于其灵活性和可组合性。通过合理配置这些核心元素,你可以构建从简单测试到复杂部署的全自动化流程。建议结合官方文档和实际项目需求,逐步探索更多高级功能(如矩阵构建、工作流依赖、容器化运行器等)。