自定义接口触发github Action

2022-08-11 19:59:11 浏览数 (1)

上一篇文章说了 正常情况下 触发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文件即可!

0 人点赞