学习 GitHub Actions YAML 配置

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)、内部网络访问或高并发需求。

应用场景选择

  • 跨平台兼容性测试:同时使用ubuntuwindowsmacos
  • 性能敏感任务:选择资源更高的运行器(如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 的强大在于其灵活性和可组合性。通过合理配置这些核心元素,你可以构建从简单测试到复杂部署的全自动化流程。建议结合官方文档和实际项目需求,逐步探索更多高级功能(如矩阵构建、工作流依赖、容器化运行器等)。

相关推荐
程序员阿超的博客19 小时前
云原生核心技术 (12/12): 终章:使用 GitLab CI 将应用自动部署到 K8s (保姆级教程)
ci/cd·云原生·gitlab
水银嘻嘻2 天前
Jenkins持续集成CI,持续部署CD,Allure报告集成以及发送电子 邮件
ci/cd·gitee·jenkins
A-wliang2 天前
从零开始搭建现代化 Monorepo 开发模板:TypeScript + Rollup + Jest + 持续集成完整指南
ubuntu·ci/cd·typescript
远方16094 天前
0x-4-Oracle 23 ai-sqlcl 25.1.1 独立安装-配置和优化
数据库·ci/cd·oracle
kkk_皮蛋5 天前
深入解析CI/CD开发流程
ci/cd
亚林瓜子5 天前
AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)
python·ci/cd·flask·web·aws·beanstalk·codepipeline
龙智DevSecOps解决方案5 天前
游戏开发中的CI/CD优化案例:知名游戏公司Gearbox使用TeamCity简化CI/CD流程
ci/cd·游戏开发·jetbrains·teamcity
keson要进步7 天前
CICD实战(一) -----Jenkins的下载与安装
运维·ci/cd·centos·自动化·jenkins