GitHub Actions 是 GitHub 提供的一项自动化工具,可以帮助开发者自动化构建、测试、部署等工作流程。其中,手动触发方式是一种非常常用的触发方式,可以在需要的时候手动触发工作流程。

触发方式

GitHub Actions 支持多种触发方式,包括:

  • push:当推送代码到 GitHub 仓库时触发;
  • pull_request:当提交 Pull Request 时触发;
  • issues: 项目出现新的 issues 时触发;
  • schedule:按照预定时间表触发;
  • repository_dispatch:通过 API 触发;
  • workflow_dispatch:手动触发。

其中,workflow_dispatch 是一种特殊的触发方式,可以通过 GitHub 网站或 API 手动触发工作流程。

使用方法

1. Push 触发

Push 触发是 Github Actions 的默认触发方式,每当代码库中有新的代码 push 到指定分支时,就会触发 Workflow 的执行。我们可以通过在 Workflow 文件中指定 on.push 来启用 Push 触发,例如:

1
2
3
4
5
6
name: CI

on:
push:
branches:
- main

在上面的例子中,当代码库中 main 分支有新的代码 push 时,就会触发 Workflow 的执行。

2. Pull Request 触发

除了 Push 触发,Github Actions 还支持 Pull Request 触发。当有新的 Pull Request 提交时,可以自动触发 Workflow 的执行,我们可以通过在 Workflow 文件中指定 on.pull_request 来启用 Pull Request 触发,例如:

1
2
3
4
5
6
name: CI

on:
pull_request:
branches:
- main

在上面的例子中,当代码库中 main 分支有新的 Pull Request 提交时,就会触发 Workflow 的执行。

3. Issues 触发

Issues 触发方式是当 GitHub 项目出现新的 issues 时触发 Workflow 的执行。我们可以通过在 Workflow 文件中指定 on.issues 来启用 Issues 触发,例如:

1
2
3
4
5
name: CI

on:
issues:
types: [opened, reopened]

在上面的例子中,当 GitHub 项目中有新的 issues 或者重开的 issues 时,就会触发 Workflow 的执行。

需要注意的是,如果需要使用 Issues 触发方式,需要在 Workflow 文件中指定对应的 issues 类型,比如 opened(新建)、reopened(重新打开)、closed(关闭)等。同时,需要在 GitHub 仓库中开启 Issues 选项,使得 issues 触发方式生效。

4. 定时触发

Github Actions 还支持定时触发,可以按照一定的时间间隔自动触发 Workflow 的执行。我们可以通过在 Workflow 文件中指定 on.schedule 来启用定时触发,例如:

1
2
3
4
5
name: CI

on:
schedule:
- cron: '0 0 * * *'

在上面的例子中,每天凌晨 0 点都会自动触发 Workflow 的执行。

5. 外部触发

Github Actions 还支持外部触发,可以通过调用 Github Actions 的 REST API 来触发 Workflow 的执行。我们可以通过在 Workflow 文件中指定 on.repository_dispatch 来启用外部触发,例如:

1
2
3
4
5
name: CI

on:
repository_dispatch:
types: [build]

在上面的例子中,当通过调用 Github Actions 的 REST API 发送一个 build 类型的事件时,就会触发 Workflow 的执行。

可以使用以下 curl 命令发送一个自定义事件:

1
2
3
4
5
curl -X POST \
-H "Accept: application/vnd.github.everest-preview+json" \
-H "Authorization: token YOUR_TOKEN" \
https://api.github.com/repos/OWNER/REPO/dispatches \
-d '{"event_type":"KEYWORDS"}'

需要要替换的值:

  • OWNER - 项目的所有者用户名
  • REPO - 需要触发的 Github Action 所在的仓库名称
  • YOUR_TOKEN - 带有 repo 权限的 Personal access token
  • KEYWORDS - 自定义 Webhook 事件名称,可以为任意值,Actions 列表中会显示此名称,更多信息请参见下文。

还可以给每一个步骤设置运行条件,在运行条件中 github.event.action 等于触发关键词,通过判断给定的值是否与 github.event.action 相同来判断该步骤是否需要执行。比如下面例子中只有当触发关键词为 helloworld 时才会执行这个步骤。

1
2
3
4
5
steps:
- name: Hello World
if: github.event.action == 'helloworld'
run: |
echo Hello World!

6. 手动触发

Github Actions 还支持手动触发方式,可以在 Github 上手动触发 Workflow 的执行。我们可以通过在 Workflow 文件中指定 on.workflow_dispatch 来启用手动触发,例如:

1
2
3
4
name: CI

on:
workflow_dispatch:

在上面的例子中,可以在 Github 上手动触发 Workflow 的执行。需要注意的是,手动触发方式需要在 Github 上手动触发,不能通过代码的 push 或者其他自动化方式触发。

在 Github 上手动触发 Workflow 的执行,可以按照以下步骤操作:

  1. 打开 Github 项目页面,点击上方的 Actions 标签页。
  2. 在左侧的 Workflows 列表中,选择需要手动触发的 Workflow。
  3. 点击页面右侧的 Run workflow 按钮,输入需要的参数,然后点击 Run workflow 按钮即可手动触发 Workflow 的执行。

以上就是 Github Actions 支持的所有触发方式,根据项目的需求,可以选择合适的触发方式来自动化流程。