一个前端,爱跑步、爱吉他、爱做饭、爱生活、爱编程、爱南芳姑娘,爱我所爱。世间最温暖又无价的是阳光、空气与爱,愿它们能带你去更远的地方。

  • 文章
  • 心情
  • 照片墙
  • 工具
  • 开发技术分享

    自定义接口触发github Action

    技术 492 2022-05-27 16:42

    上一篇文章说了 正常情况下 触发github action 是监听仓库分支的merge 和 push事件来触发

    on:
      push
    

    但是有时候 我们想通过一个api的形式来触发action 该怎么弄呢

    可以使用监听仓库的repository_dispatch(自定义派发事件)

    1.首先创建一个 Token

    访问链接页面 https://github.com/settings/tokens/new 申请一个 Token。

    需要勾选 repo 权限。

    2.然后去创建yml文件(跟上篇文章一样 还是用appleboy/ssh-action@master来登录ssh)

    写入:

    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.cn/info?id=1628044347419

    3 远程触发 Github Action

    下面是 API 调用格式:

    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:

      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文件即可!