GitHub Actions 快速参考 - 标准结构和最有用的操作列表

关于常见 GitHub Actions 及其结构的简要介绍。

目录

GitHub Actions 是 GitHub 内部的一个自动化和 CI/CD 平台,用于根据推送、拉取请求或定时任务等事件构建、测试和部署代码。

除了标准的 GitHub 之外,你还可以在 自托管的 Gitea 服务器 上使用 GitHub Actions。

github actions flow

本摘要涵盖了 GitHub Actions 的结构、简要描述以及在开源和商业工作流程中最常用的 Actions。Actions 包括官方、社区和第三方工具,支持从构建和测试到部署、发布管理、QA 和通知的自动化。

基本配置结构

GitHub Actions 工作流在仓库中的 .github/workflows 目录下的 YAML 文件中定义。

name: Workflow Name
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 设置 Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: 运行测试
        run: npm test
  • on 块指定触发事件。
  • 每个 job 在自己的 runner 上运行。
  • steps 可以运行 shell 命令或调用可重用的 Actions。

核心工作流组件

组件 描述
工作流 由事件触发的自动化过程(YAML)
事件 触发工作流的活动(推送、拉取请求等)
任务 在 runner 上执行的一系列步骤,可以顺序或并行执行
步骤 任务中的每个命令或操作
runner 执行任务的虚拟机或容器
Action 封装任务的可重用扩展/附加组件

触发事件

  • push
  • pull_request
  • schedule(使用 cron 语法)
  • workflow_dispatch(手动触发,允许输入参数)
  • release, issue

示例:

on:
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      environment:
        description: '部署环境'
        required: true
        default: 'production'
        type: string

有用的内置 Actions

Action 用途 常见参数
actions/checkout 检出仓库代码 ref, token, submodules, persist-credentials
actions/setup-node 设置 Node.js 环境 node-version, cache, architecture, check-latest
actions/setup-python 设置 Python python-version, architecture
actions/cache 缓存依赖项 path, key, restore-keys
docker/build-push-action 构建并推送 Docker 镜像 context, file, platforms, tags, push, build-args
actions/upload-artifact 上传构建产物 name, path, if-no-files-found
actions/download-artifact 下载产物 name, path
github/email-actions 发送电子邮件通知 to, subject, content, attachments
peter-evans/create-pull-request 通过工作流创建 PR branch, title, body, labels, base
actions/github-script 在工作流中运行任意 JavaScript script, github-token

Action 参数

任何 Action 调用的一般参数:

- name: 某个 Action 或步骤
  uses: owner/repo@ref
  with:
    param1: value
    param2: value
  env:
    ENV_VAR: value
  if: ${{ condition }}
  run: command_to_run
  shell: bash|pwsh|python|sh
  continue-on-error: true|false
  • with:传递给 Action 的参数(请参阅 Action 的文档以获取所有选项)
  • env:步骤的环境变量
  • if:条件执行
  • run:shell 命令(如果不使用 Action)
  • shell:运行步骤所使用的 shell
  • continue-on-error:即使步骤失败也继续执行

定义自定义 Action 输入

在你的 Action 元数据(action.yml)中:

inputs:
  example-input:
    description: '一个示例输入'
    required: false
    default: 'default-value'

在工作流中使用时:

- uses: my/action@v1
  with:
    example-input: 'custom-value'

当 Action 运行时,可以通过环境变量 INPUT_EXAMPLE_INPUT 访问。

示例:带有手动参数的工作流

name: 部署
on:
  workflow_dispatch:
    inputs:
      environment:
        description: '部署环境'
        required: true
        default: 'production'
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4
      - name: 部署到环境
        run: echo "正在部署到 ${{ github.event.inputs.environment }}"

Action 市场

  • GitHub Marketplace 上有数千个可重用的 Actions。
  • 分类包括:云部署、通知工具、测试框架、代码分析等。
  • 探索:actions/checkoutactions/setup-nodedocker/build-push-actionactions/cacheactions/upload-artifact 等等。

快速提示

  • 将工作流文件放在 .github/workflows 中。
  • 使用 workflow_dispatchinputs 进行手动和参数化运行。
  • 使用 cache Action 加快依赖项安装。
  • 使用 job matrix 测试多个操作系统/运行时版本。
  • 使用 secrets 存储敏感数据,引用方式为 ${{ secrets.SECRET_NAME }}

此速查表涵盖了使用、配置和扩展 GitHub Actions 以实现自动化、CI/CD 等功能的基本要点。如需更多详细信息和更新,请始终查阅官方 GitHub 文档和 Action 仓库。

常用 GitHub Actions

以下是一些用于自动化 CI/CD、测试、构建、部署和工作流任务的常用 GitHub Actions:

官方核心 Actions

Action 用途 关键示例参数
actions/checkout 检出仓库代码 ref, submodules
actions/setup-node 设置 Node.js 环境 node-version, cache
actions/setup-python 设置 Python 环境 python-version
actions/setup-java 设置 Java JDK distribution, java-version
actions/cache 缓存依赖项和构建输出 path, key, restore-keys
actions/upload-artifact 上传构建产物 name, path
actions/download-artifact 从工作流下载产物 name, path
actions/github-script 使用 GitHub 上下文和 API 运行 JavaScript script
actions/create-release 创建 GitHub 发布 tag_name, release_name
actions/upload-release-asset 上传发布资产 upload_url, asset_path
actions/labeler 自动为问题/PR 添加标签 repo-token, configuration-path

流行的社区和第三方 Actions

Action 用途
docker/build-push-action 构建并推送 Docker 镜像
actions/setup-go 设置 Go 环境
super-linter/super-linter 通用自动代码检查
trufflesecurity/trufflehog 扫描秘密和凭证
peaceiris/actions-gh-pages 将静态网站部署到 GitHub Pages
JamesIves/github-pages-deploy-action 将项目部署到 GitHub Pages
peter-evans/create-pull-request 自动创建拉取请求
softprops/action-gh-release 创建并上传 GitHub 发布
ad-m/github-push-action 将更改推回 GitHub 仓库
actions/setup-dotnet 设置 .NET SDK
azure/login 认证到 Azure
google-github-actions/auth 认证到 Google Cloud

测试、QA 和报告 Actions

Action 用途
actions/setup-ruby 设置 Ruby 环境
codecov/codecov-action 将代码覆盖率报告上传到 Codecov
coverallsapp/github-action 将覆盖率结果上传到 Coveralls
dorny/test-reporter 将测试结果附加到 GitHub Checks
stefanzweifel/git-auto-commit-action 自动提交和推送文件更改

部署和通知 Actions

Action 用途
appleboy/scp-action 使用 SCP 上传文件
SamKirkland/FTP-Deploy-Action 通过 FTP/FTPS 部署文件
cypress-io/github-action 运行 Cypress 端到端测试
slackapi/slack-github-action 向 Slack 发送消息
dawidd6/action-send-mail 在工作流运行期间发送电子邮件

工具和工作流管理

Action 用途
peter-evans/repository-dispatch 触发外部仓库的工作流
fregante/setup-git-user 设置提交的 Git 用户凭证
andymckay/labeler 根据路径为问题和 PR 添加标签
actions/configure-pages 配置发布到 GitHub Pages
EndBug/add-and-commit 在工作流中添加并提交文件
dangoslen/changelog-enforcer 检查 PR 是否更新了变更日志

如何查找更多

有许多 GitHub Actions 可以实现工作流自动化,例如自动化测试、部署到生产环境、通知和与其他服务的集成。 GitHub Marketplace 列出了测试、安全、部署、通知、代码质量和集成等类别中的数千个 Actions。 “Awesome Actions” 等精选列表也是灵感和发现的好资源。

有用的链接