使用Github的 WebHooks 进行网站自动化部署

news/2024/4/27 22:47:08/文章来源:https://blog.csdn.net/weixin_34060299/article/details/88772729

原理

利用Github在仓库进行操作时,可以通过配置webhook向服务器发送请求,在服务器端接到请求后,使用脚本来自动进行git pull操作。

image

图片来源:Github的webhook触发vps上的脚本

构建 Webhook 服务

通过执行

npm i -g github-webhook-handler

来安装 github-webhook-handler 中间件

新建文件 webhook.js

var http = require('http')
var createHandler = require('github-webhook-handler')
var handler = createHandler({ path: '/', secret: 'root' })
// 上面的 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 = 404res.end('no such location')})
}).listen(7777)
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);run_cmd('sh', ['./deploy.sh',event.payload.repository.name], function(text){ console.log(text) });
})

其中

var handler = createHandler({ path: '/', secret: 'root' })

secret 字段为 Github 中设置的,需要与这里相对应

注意,在运行的时候如果提示 github-webhook-handler is not defined 未找到 ,可以在目录中执行 npm link github-webhook-handler

参考地址:利用Github的Webhook进行静态网站的自动化部署

同一服务多个 webhook

当你有多个仓库需要自动部署时,可以在一个服务上开启多个 webhook。

var http = require('http')
var createHandler = require('node-github-webhook')
var handler = createHandler([ // 多个仓库{path: '/app1',secret: 'CUSTOM'},{path: '/app2',secret: 'CUSTOM'}
])
// var handler = createHandler({ path: '/webhook1', secret: 'secret1' }) // 单个仓库http.createServer(function (req, res) {handler(req, res, function (err) { res.statusCode = 404res.end('no such location')})
}).listen(7777)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)switch (event.path) {case '/app1':runCmd('sh', ['./app1_deploy.sh', event.payload.repository.name], function (text) { console.log(text) })breakcase '/app2':runCmd('sh', ['./app2_deploy.sh', event.payload.repository.name], function (text) { console.log(text) })breakdefault:// 处理其他break}
})function runCmd (cmd, args, callback) {var spawn = require('child_process').spawnvar child = spawn(cmd, args)var resp = ''child.stdout.on('data', function (buffer) {resp += buffer.toString()})child.stdout.on('end', function () {callback(resp)})
}
同一服务多个webhook时,最终你的payload URL 则为:http:/yourdomain:7777/app1 或者 http:/yourdomain:7777/app2 ,注意我在实践过程中发现,不能使用 / 目录,会无法监听到 webhook。

参考地址:https://github.com/rvagg/gith...

完成 shell 脚本

在使用脚本之前,先要对网站根目录做一些处理

# 打开网站根目录
cd /home/wwwroot/domain.com
# 采用 Git 文件控制
git init
# 添加远程 Git 仓库地址
git remote add origin https://xx.git 

参考地址:
How do I force “git pull” to overwrite local files?

然后再创建 deploy.sh,与 webhook.js 在同一个目录下

#!/bin/bash
# 网站的根目录
WEB_PATH='/home/wwwroot/domain.com'echo "start deployment"
cd $WEB_PATH
echo "fetching from remote..."
# 为了避免冲突,强制更新本地文件
git fetch --all
git reset --hard origin/master
echo "done"
由于 Linux 文件权限问题,可能无法执行,建议先执行 chmod 777 ./deploy.sh

使用pm2进行进程守护

安装pm2:

npm i pm2 -g

运行webhook.js

pm2 start webhook.js

进入Gtihub后台进行设置

进入需要自动部署的项目的github地址添加webhook,进入Settings设置页面,点击左侧的 Webhooks

image

原文地址:使用Github的-WebHooks-进行网站自动化部署

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_819869.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken

nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开…

java多方式登陆_Java 爬虫遇到需要登录的网站,该怎么办?

这是 Java 网络爬虫系列博文的第二篇,在上一篇Java 网络爬虫,就是这么的简单中,我们简单的学习了一下如何利用 Java 进行网络爬虫。在这一篇中我们将简单的聊一聊在网络爬虫时,遇到需要登录的网站,我们该怎么办&#x…

200佳优秀的国外创意设计作品网站推荐(系列十七)

这个系列将向大家200佳非常有用的创意设计作品网站,包括网页设计、名片设计、LOGO设计和包装设计等等,设计师们可通过这些网站收集的优秀设计作品来获取灵感,进而设计出更具有创意的作品,设计师们也可以把自己得意的作品提交到这些…

网站App平台注册用户分析(从MySQL中导入数据)

导入MySQL数据 运行MySQL,输入密码登录进去,然后使用CREATE DATABASE命令创建数据库。 CREATE DATABASE test;(该命令创建了一个空的数据库test) 2.导入数据到刚刚创建的空数据库中。 source D:/user.sql(此处source后面的文件路…

python爬虫爬取某网站全站图片案列(源码全给可白漂,仅供学习使用,切勿用作非法用途)

爬取后保存的图片效果图 步骤入下(三步): 先去要爬取的目标网站(https://pixabay.com/)去注册一个账号。 2.注册后登录,浏览器右键鼠标,打开检查,找到登录后的cookies值。 3.运行源…

9月第2周国内新闻网站:中国网覆盖数半年翻4番

根据国际统计机构Alexa公布的最新数据显示,9月第2周(2013-09-09至2013-09-15)新闻类网站/频道排行首位是QQ新闻,其用户覆盖数为13200,第二位是覆盖数为9920的新浪新闻,第三位是9287的网易新闻。下面是具体情…

25个最新的免费的创意和美丽的CSS网站模板

对于HTML或超文本标记语言的理解,是Internet Explorer或Mozilla Firefox网页浏览器所使用的编码语言。所有的网页设计使用这种语言。HTML是网页设计当中一些简单的标记元素,但如果你想要展现出更好看的东西,那么你应该选择CSS。可以说&#x…

什么是闭包(Groovy) - flyleave - ITeye技术网站

什么是闭包(Groovy) - flyleave - ITeye技术网站什么是闭包(Groovy) 博客分类:Grails & GroovyGroovyJavaCCC# Groovy的闭包就像一个代码段或者说方法指针。它是一段被定义并在稍后的时点上运行的代码。Simple ExampleJava代码 def clos { println "hell…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书,就应该有所收获,有所总结,最近把《大型网站技术架构》一书给看完了,给人的印象实在深刻,再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

大型网站系统架构分析[转]

千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用什么系统架构保证性能和稳定性? 首先讨论一下大型网站需要注意和考虑的问题。 数据库海量数据处理:负载量不大的情况下select、…

SEO完全手册之title优化

在我的博客发布了《花钱最少的推广方式之SEO》文章后,受到了很多看官的关注,再次万分感谢大家!从今天开始,我会每天更新一篇SEO优化的东西,也希望大家喜欢。在这里,我就不阐明搜索引擎工作的原理了&#xf…

从graphis链接到我的网站?

今天早上登陆Google分析,发现昨天的网站点击来源里居然有这么一项……有没有人能解释一下这是为什么?

springboot线程池_SpringBoot入门建站全系列(二十二)异步任务执行的几种方式

SpringBoot入门建站全系列(二十二)异步任务执行的几种方式一、概述异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完…

网站推荐:The Python Challenge 第一个编程解谜站点

The Python Challenge是一个过关式的解谜站点,使用的是经典在线解谜站点Not Pr0n的模式:根据提示找出下一关的网页地址。和Not Pr0n不同的是,在每一关里你都需要编写程序来寻找答案。虽然这个解谜站点的名字叫做Python Challenge,…

网站推荐:blackflip 基于Flash的web 2.0解谜游戏站

blackflip是一个有趣的智力游戏。在每一个关卡里,你需要画一条不自交的路线,这条路线经过的所有格子都将会反色,游戏的目标就是要让反色后同一行的所有格子恰好都同色。游戏规则很简单,但有一些关卡特别费脑子。我很喜欢这个游戏的…

网站页面左右_诠网科技|杭州网站建设成本都用在了哪里呢?

杭州网站建设成本都用在了哪里呢?企业到底为什么要做一个自己的网站呢?企业建站不是为了赶一时的潮流,企业建站只有把网络推广技术同企业的管理系统、服务系统和商务系统紧密地集成,才能发挥企业网站优化的作用。不过企业网站建设…

网站推荐:archimy.com 在线函数图象绘制

archimy.com是刚建立的一个在线数学工具,给人的第一印象非常不错。这个网站可以在线绘制出2D和3D的函数图象,支持参数方程,支持三角函数、反三角函数、对数、绝对值、取整、较大、较小等多种函数。你可以设定函数图象的绘制范围和取样步长。绘…

html 5 浏览器兼容性测试网站

为什么80%的码农都做不了架构师?>>> 浏览器兼容性测试网站 http://caniuse.com/ 转载于:https://my.oschina.net/doz/blog/497347

SEO细分领域项目汇总

因为自己也在从事网络营销业务,所以会经常分析一些的营销手法,今天卢松松整理了一下在百度体系下SEO的一些业务。本文介绍了一些SEO项目,里面有一些细节,仔细思考一下,也许你会发现新项目。(重点看第三条)1&#xff0c…