GitHub Actions 如何手动触发

GitHub Actions 如何手动触发

前言

GitHub Ac­tions 在早期可能是处于初级开发阶段,它的功能非常原生,甚至没有直接提供一个手动触发按钮。一般的触发方式为代码变动(pushpull_request),发布文件(release)或者定时(schedule)等,这些属于自动触发方式。如果我们需要在 GitHub 仓库没有任何变动的情况下手动触发就需要使用一些奇技淫巧。经历了漫长的功能迭代,官方最终正式带来了手动触发功能,这也宣告了一个瞎折腾时代的结束,一个崭新的折腾时代开始。

手动触发

workflow_dispatch

在时隔多年后 GitHub Ac­tions 终于引入了一个手动触发的按钮,不过默认是不开启的,需要在 work­flow 文件中设置 workflow_dispatch 触发事件。一个最简单的例子:

1
2
on:
workflow_dispatch:

设置好触发事件后就能在相关 work­flow 的页面下看到 Run workflow 按钮。

image-20211217100139973

需要注意的是,正如官网所说你的这个 workflow 必须是在默认分支上。

image-20211217100311765

更复杂一点还可以实现在手动触发时填写参数,控制不同的工作流程或者直接改写某个环境变量等操作。目前官方文档已经相当完善,想要去深入可以去查看。

一个填写参数的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
name: Manual Trigger

on:
# 手动触发事件
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
tags:
description: 'Test scenario tags'

jobs:
printInputs:
runs-on: ubuntu-latest
steps:
- run: |
echo "Log level: ${{ github.event.inputs.logLevel }}"
echo "Tags: ${{ github.event.inputs.tags }}"
echo "Inputs: ${{ toJson(github.event.inputs) }}"

image-20211217100540440

如果我们在配置中定义了参数,则手动执行时也会需要填参数。上面在workflow_dispatch下通过定义inputs设定参数。在jobs中我们则可以在github.event.inputs中取到对应的参数。下面是上述代码运行结果:

image-20211217101323184

repository_dispatch

repository_dispatch让用户通过 API 批量手动执行,这个 event 的主要作用是让其他的程序通过 api 调用,通过自定义事件类型来驱动执行,这个 event 对应的 workflow 也必须在默认分支下定义。具体可参考官方文档,下面是个简单例子

比如我们定义:

1
2
3
on:
repository_dispatch:
types: [opened, deleted]

然后执行 http 请求:

1
2
3
4
5
curl \
-X POST \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/{owner}/{repo_name}/dispatches \
-d '{"event_type":"opened"}'

那么就可以被执行了,其中的opened, deleted是我们自定义的事件名字,client_payload是我们自定义的额外信息数据。

运行如下:

1
2
3
4
5
6
7
8
9
10
curl --location --request POST 'https://api.github.com/repos/MrSeaWave/lerna-demo/dispatches' \
--header 'Accept: application/vnd.github.v3+json' \
--header 'Authorization: Bearer 自定义的github token' \
--header 'Content-Type: application/json' \
--data-raw '{
"event_type": "opened",
"client_payload": {
"text": "my custom text here"
}
}'

其中在Authorization一览中增加在github中申请的token,否则容易出现"message": "Not Found"的结果,就像这个问题一样。

上面运行成功结果:

image-20211217104427699

更多用法请关注 Github 官网~

参考链接

作者

Sea

发布于

2021-12-17

更新于

2023-01-10

许可协议

评论