我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 认识ESM
  • chrome-talend插件,类似postman
  • sequelize 使用及技巧
  • UML工具Power Designer建表
  • sequelize相关操作文档
  • 解决抖音获取签名及并发的问题
  • 记一次解决抖音分享页混淆字体,字体图标转UID解决方案
  • 获取抖音用户作品列表信息
  • 获取抖音用户作品列表信息-进阶
  • 获取抖音用户作品列表信息-进阶3
  • 如何根据抖音号获取用户信息
  • 获取用户最新视频
  • 模块化-import和require的区别
  • eslint规范
  • js容错处理
  • js-数组分组,执行promise
  • reduce使用遇到的问题
  • 正则匹配html的元素内容
  • taro 小程序 弹窗层禁止底部滚动
  • 公众号签名问题
  • CentOS7中MariaDB重置密码
  • nginx多域名配置
  • node访问接口,得到乱码的结果,原因-Accept-Encoding
  • node写文件到json中
  • node抓取html内容
  • Node.js使用ES6语法
  • express 使用cors中间件解决跨域
  • node + express + session + redis 进行持久化缓存
  • node中读取文件夹,获取文件名称
  • pm2常用命令
  • 使用pm2管理后台node服务
  • typescript puppeteer支持window及document属性
  • node读取json文件
  • node中使用redis缓存
  • node + github的webhook完成自动部署
    • 一对一仓库
    • 一对多仓库
    • 坑
    • 代码
    • 参考使用Github的 WebHooks 进行网站自动化部署
  • vuepress-blog的性能优化-CDN
  • CENTOS7下安装REDIS
  • promise then和catch的学习和使用
  • promise在循环中的串行并行用法
  • puppeteer常用知识
  • centos部署安装puppeteer
  • python的学习和使用
  • Taro+TypeScript - Mobx实践
  • 爬虫系列 --- 反爬机制和破解方法汇总
  • 安全-html转码
  • taro中使用animation动画
  • charles 使用
  • Mac下VSCode设置iTerm2终端样式
  • centos一步步完成站点部署
  • 云闪付做地铁的思路
  • 准备技能
  • 备案pc项目介绍
  • 备案小程序项目介绍
  • 小程序二维码扫码功能
  • 小程序域名组件开发
  • 小程序添加水印
  • 规则引擎优化
  • 记一次hooks代替redux的经历
  • 通过nodejs+koa+stream进行服务端图片代理
  • nodeJs接入log4j日志
  • nodejs+typescript项目中添加全局global属性
  • create-react-app 安装 bizcharts 项目崩溃
  • 使用MutationObserver监控dom的变化
  • 服务器重启后启动相关服务
  • moment国际化的问题
  • 项目经验
fangdown
2019-12-12
目录

node + github的webhook完成自动部署

# 一对一仓库

github-webhook-handler

# 一对多仓库

node-github-webhook

# 坑

在设置github的webhooks时, 返回的Content type类型要选择application/json, 默认是application/x-www-form-urlencoded, 不然会报错

# 代码

// var http = require('http')
// var createHandler = require('github-webhook-handler')
// var handler = createHandler({ path: '/', secret: 'myapi' })
// // 上面的 secret 保持和 GitHub 后台设置的一致
// function run_cmd(cmd, args, callback) {
//   var spawn = require('child_process').spawn;
//   var child = spawn(cmd, args);
//   var resp = "";
//   child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
//   child.stdout.on('end', function() { callback (resp) });
// }
// http.createServer(function (req, res) {
//   handler(req, res, function (err) {
//     res.statusCode = 404
//     res.end('no such location')
//   })
// }).listen(11009)
// handler.on('error', function (err) {
//   console.log('error', err)
//   console.error('Error:', err.message)
// })
// handler.on('push', function (event) {
//   console.log('push', event)
//   console.log('Received a push event for %s to %s',
//     event.payload.repository.name,
//     event.payload.ref);
//     // run_cmd('sh', ['./deploy.sh',event.payload.repository.name], function(text){ console.log(text) });
// })


var http = require('http')
var createHandler = require('node-github-webhook')
var handler = createHandler([ // 多个仓库
  {
    path: '/app-api',
    secret: 'xxx'
  },
  // {
  //   path: '/app2',
  //   secret: 'CUSTOM'
  // }
])
// var handler = createHandler({ path: '/webhook1', secret: 'secret1' }) // 单个仓库

http.createServer(function (req, res) {
  handler(req, res, function (err) { 
    res.statusCode = 404
    res.end('no such location')
  })
}).listen(11009,()=>{
  console.log('webhook start on port 11009')
})

handler.on('error', function (err) {
  console.error('Error:', err.message)
})

handler.on('push', function (event) {
  console.log(
    'Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref
  )
  console.log(`${event.path}`)
  switch (event.path) {
    case '/app-api':
      runCmd('sh', ['./app-api.sh', event.payload.repository.name], function (text) { console.log(text) })
      break
    // case '/app2':
    //   runCmd('sh', ['./app2_deploy.sh', event.payload.repository.name], function (text) { console.log(text) })
    //   break
    default:
      // 处理其他
      break
  }
})

function runCmd (cmd, args, callback) {
  var spawn = require('child_process').spawn
  var child = spawn(cmd, args)
  var resp = ''
  child.stdout.on('data', function (buffer) {
    resp += buffer.toString()
  })
  child.stdout.on('end', function () {
    callback(resp)
  })
}

# 参考使用Github的 WebHooks 进行网站自动化部署 (opens new window)

#node
上次更新: 2021/12/19, 18:05:42
node中使用redis缓存
vuepress-blog的性能优化-CDN

← node中使用redis缓存 vuepress-blog的性能优化-CDN→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式