上一篇文章说了 正常情况下 触发github action 是监听仓库分支的merge 和 push事件来触发
代码语言:javascript复制on:
push
但是有时候 我们想通过一个api的形式来触发action 该怎么弄呢
可以使用监听仓库的repository_dispatch(自定义派发事件)
1.首先创建一个 Token
访问链接页面 https://github.com/settings/tokens/new 申请一个 Token。
需要勾选 repo 权限。
2.然后去创建yml文件(跟上篇文章一样 还是用appleboy/ssh-action@master来登录ssh)
写入:
代码语言:javascript复制on:
repository_dispatch:
types:
- backupBlogData
jobs:
run:
runs-on: ubuntu-latest
steps:
- name: executing remote ssh commands
# 使用appleboy/ssh-action@master来执行命令
uses: appleboy/ssh-action@master
with:
host: ${{secrets.DEPLOY_HOST}}
username: ${{secrets.DEPLOY_USER}}
password: ${{secrets.DEPLOY_PASS_WORD}}
script: cd /usr/local/mongodb/bin/ && ./mongodump -h 127.0.0.1:27017 -d xx -o /xx/xx -u ${{secrets.dbU}} -p ${{secrets.dbP}}
mongoDB数据的备份 参考 http://biaoblog.run/info?id=1628044347419
3 远程触发 Github Action
下面是 API 调用格式:
代码语言:javascript复制curl -X POST https://api.github.com/repos/:owner/:repo/dispatches
-H "Accept: application/vnd.github.everest-preview json"
-H "Authorization: token TRIGGER_TOKEN"
--data '{"event_type": "backupBlogData"}'
其中,owner
是用户名,repo
是仓库名, TRIGGER_TOKEN
是上面申请的 Token 凭证,TRIGGER_EVENT
是自定义的事件名。
前端也可以使用axios:
代码语言:javascript复制 await axios
.post(
"https://api.github.com/repos/Bill-Pang/Koa-blog/dispatches",
{
event_type: "backupBlogData",
},
{
headers: {
Accept: "application/vnd.github.everest-preview json",
Authorization: "token ",
},
}
)
.then((res) => {
console.log(res);
ctx.body = {
code: 200,
message:
"数据备份任务提交成功,请自行检查备份文件,此服务无法监听action异步回调",
};
})
.catch((err) => {
ctx.body = { code: 500, msg: "数据备份任务提交失败,检查后端服务" };
});
然后就看到action跑起来了
遇到一个问题....
如果想自动构建监听push和自定义事件 同时存在 切互不影响。。
可以再单独写个yml文件即可!