用github的webhooks实现项目自动化构建

什么是webhooks?

-- 简单的来说是一种回调,和异步编程中的"订阅-发布模式"很类似,一端触发事件,一端监听执行,webhooks是异步编程模型的一种实现,具体的可以看webhooks

流程

  1. git push xxx本地代码提交至远程github仓库
  2. github仓库收到push后进行回调,发post(Payload url是来自webhooks的配置)请求
  3. 基于Payload url的服务根据传回来的信息进行提取,拉取最新代码并重新构建项目

开始

  1. 搭建github-hook服务

    • 目的是为webhooks提供payload url,并取得github 回调发来的信息,执行构建部署命令

    • 选择:

      a. copy我的github-hook,基于koa

      b. 用这个自己写github-webhook-handler,基于node原生http服务的

      c. 其他

    • 介绍一下我的github-hook:

      目录:

      .
      ├── README.md
      ├── config
      │   ├── data.example.js
      │   ├── data.js (配置项目的 dir/分支/启动命令)
      │   └── index.js (配置secret,与github的webhooks配置相同)
      ├── ecosystem.config.js (pm2启动配置文件)
      ├── package-lock.json
      ├── package.json
      └── src
          ├── controlers
          │   └── token.js (用于生成token,webhooks加密用)
          ├── index.js (启动文件)
          ├── jobs
          │   └── index.js (解析回调发来的信息,执行命令)
          └── routes
              └── index.js (路由,处理请求)
      复制代码
  2. 在服务器启动github-hook服务

    • 登录服务器,进入工作目录(我的是/var/nodejs,可根据喜好自己改,别忘了改对应的config/data.js文件的DIR)
    • git clone xxxgithub-hook.git
    • cd github-hook
    • npm i
    • npm run start,用的是pm2,请先全局安装pm2
    • curl ip:9002,若有success字样,则成功
      • 注:本服务的端口是9002,若已占用,请自行更改/index.js,别忘记安全组开放端口
  3. github配置webhooks

    打开github,找到要配置的项目,进入setting-->webhooks-->新增一个:

     * Payload URL: 输入上一步测试的api,即 `http://ip:9002/payload/{reponame}`,我这里的reponame即`github-hook`
     * Content type: 选择application/json
     * Secret: 与上面`/config/index.js`中的`appSecrcet`保持一致
     * Which events would you like to trigger this webhook? 选择第一项 Just the push event. 即可
     * 配置完成,提交即可
     配置后如下图:
    复制代码

  4. 测试

    在本机更改github-hook代码,提交,然后打开刚刚的github页面看看下面是否有Recent Deliveries:

结束: 刚开始写东西,以前没有这个习惯,还请多多提意见,下次讲一讲webhooks的高级实例-->ci工具: 用jenkins打包构建部署项目.

猜你喜欢

转载自juejin.im/post/5c6e37056fb9a049e702b443