说明

我们使用git进行版本管理常常会遇到这样的一个需求,希望git push的时候服务器上代码的代码也能自动更新,这次我使用了coding进行示范

一、编写git pull 更新脚本 auth_pull.sh

vim auth_pull.sh

#!/bin/sh
unset GIT_DIR
Path="{自己的项目跟目录}"
cd $Path
git pull origin master
exit 0

对auth_pull.sh进行授权

chmod a+x auth_pull.sh

二、编写auto_pull.js文件

这里为了方便只使用了nodejs,你也可以使用php python,原理都是一样,githua、coding上都会有一个webhook的功能,如果git有push 或者其它事件发生就会向你设置webhook发起一个请求,这里我简单的拿了个coding的请求代码

请求头:


Request URL: http://hook.chainhots.com/pushRequest
method: POST
User-Agent: Coding.net Hook
X-Coding-Event: push
X-Coding-Delivery: 7bf60799-a9ac-4ae1-b496-dd47b1bb5537
X-Coding-WebHook-Version: v2
X-Coding-Signature: sha1=ca375797efab8acea2f59db51ade3e99ef97c45f

请求内容


...

这里就不多写了,想知道可以自己去看看,吧请求的数据写到日志中就能看到了。

auto_pull.js :

var http = require('http');
var crypto = require('crypto')
var exec = require('child_process').exec; // 在Webhook中设定的secret
var secret = ''
// 在Webhook中设定的Payload URL
var url = '' http.createServer(function(request, response) {
response.writeHead(200, {'Content-Type':'application/json'});
response.end(); if (request.headers['x-coding-event'] && request.headers['x-coding-event'] === 'push') {
console.log('push'); request.on('data', function(chunk) {
//这里可以写自己验证逻辑
//var Signature = request.headers['x-coding-signature'];
//console.log(chunk.toString()); chunk中存储了payload的数据,如果需要可以拿出来做更精确的处理.比如部署触发该次push的commit的代码
//if (verifySecret(Signature, sign(secret, chunk.toString())) && verifyUrl(url, request.url)) {
console.log('verify');
runCommand();
//} else {
// console.log('verify faild');
//}
});
} }).listen(8083, '127.0.0.1'); // 对,服务监听的是内网地址.用Nginx反代一下就好.(当然直接丢到外网也没问题) function sign(secret, data) {
return 'sha1=' + crypto.createHmac('sha1', secret).update(data).digest('hex');
} function verifySecret(data0, data1) {
return (data0 == data1);
} function verifyUrl(data0, data1) {
return (data0 == data1);
} function runCommand() {
exec("./auto_pull.sh", function(err,stdout,stderr){
if(err) {
console.log('error:'+stderr);
} else {
console.log("stdout:"+stdout);
}
});
}

运行node auto_pull.js

三、配置守护进程

这里守护进程使用 Supervisor 来实现

centos 7 直接运行命令


yum install supervisor

一路回车下来就行,安装完成之后启动supervisor

systemctl start supervisord

设置开机自动启动

systemctl enable supervisord

接写来编写auto_pull 的守护进程配置 ,切换到 cd /etc/supervisord.d目录下,创建auto_pull.ini文件

[program:auto_pull]  #应用程序名称
command=nohup node /home/githook/auto_pull.js > /home/githook/consloe.log 2>&1 & #配置后台运行并讲输出日志写入到文件中
directory=
user=root #运行用户
stopsignal=INT
autostart=true #是否自动启动
autorestart=true #是否自动重启
startsecs=3 #重启间隔时间
stderr_logfile=/var/log/autopull.err.log #运行错误日志
stdout_logfile=/var/log/autopull.out.log #运行日志

配置完成,运行

systemctl restart supervisord

重启就OKle

git使用WebHook实现自动构建的更多相关文章

  1. Git 提交后开始自动构建

    设定Git仓库的钩子 一般路径为 xxx.git/hooks 参考文档 https://git-scm.com/docs/githooks 修改 post-receive #!/bin/bash wh ...

  2. Gitlab利用Webhook实现Push代码后的jenkins自动构建

    之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台.通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布.这种方式每次在发版的时候,需要人工去执行je ...

  3. Gitlab使用Webhook实现Push代码后的jenkins自动构建

    本文出自https://www.cnblogs.com/kevingrace/p/6479813.html 怕以后找不到,所以先写到自己博客中 Gitlab利用Webhook实现Push代码后的jen ...

  4. coding利用Webhook实现Push代码后的jenkins自动构建

    安装jenkins 篇:http://www.cnblogs.com/loveyouyou616/p/8714544.html 之前部署了持续集成工具jenkins.通常是开发后的代码先推到 远程代码 ...

  5. jenkins的 git多分支自动构建

    一.先做好jenkins和gitlab的webhook自动构建 二.选择哪个分支(我这是test分支) 三.选择build Triggers 四.过滤test分支 五.保存即可

  6. [operator]jenkins+gitlab/Webhook自动构建发布

    开发同事在提交代码到gitlab后,需要使用jenkins对代码进行构建,每次都需要手动操作会很繁琐,如果工程很大,那么也会浪费时间,gitlab的webhook功能,可以在代码提交后自动调用jenk ...

  7. Git钩子设置自动构建Jenkins

    打开Git仓库,找到对应的项目,点击“仓库设置”,左侧点击“管理Git钩子”,如下图所示: 因为是push之后触发自动构建的,选择“post-receive”进行编辑 #!/bin/bash #提取分 ...

  8. Jenkins+jmeter+ant+Git 持续集成(六、代码提交到Gitlab即自动构建)

    实现原理: 利用jenkins和gitlab的webhook结合,实现提交代码之后,自动触发jenkins的构建. 1.Jenkins的插件安装: 需要安装两个gitlab的插件:Gitlab Hoo ...

  9. Gitlab源码库里代码提交后,如何触发jenkins自动构建?

    版本库里代码提交后,如何触发jenkins自动构建?这是一个面试题,感觉自己回答的并不好,因为并没有用过这个功能,之前公司实际项目用的是svn版本管理,一般都用立刻构建,和定时任务构建(不管代码是否有 ...

随机推荐

  1. android_activity_研究(二)

    这次开始玩玩活动的生命周期.废话不说,先搞个小应用,大体思路是:主界面有两个按钮,一个按钮按下后,出现第二个界面:另一个按钮按下后,出现第三个界面,真他妈简单. 一.主界面: 1. 主界面布局xml文 ...

  2. MongoDB基础教程[菜鸟教程整理]

    MongoDB基础教程 ======================================================================================== ...

  3. python之unittest框架实现接口测试实例

    python之unittest框架实现接口测试实例 接口测试的方法有很多种,具体到工具有postman,jmeter,fiddler等,但是工具的局限性是测试数据的组织较差,接口的返回工具的判断有限, ...

  4. Minikube安装成功Kubernetes,一次过!

    介绍 Minikube 是 K8S 官方为了开发者能在个人电脑上运行 K8S 而提供的一套工具.实现上是通过 Go 语言编写,通过调用虚拟化管理程序,创建出一个运行在虚拟机内的单节点集群. 注:从这里 ...

  5. 【Java中级】(四)多线程

    线程的概念 进程和线程的主要差别在于它们是不同的操作系统资源管理方式.进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径.线程有自己的堆栈和局 ...

  6. kubernetes二进制高可用部署实战

    环境: 192.168.30.20 VIP(虚拟) 192.168.30.21 master1 192.168.30.22 master2 192.168.30.23 node1 192.168.30 ...

  7. SQLyog连接数据库报错plugin caching_sha2_password could not be loaded

    摘录自: https://blog.csdn.net/lihua5419/article/details/80394716

  8. jQuery中事件与动画

    jQuery中的事件与动画   一. jQuery中的事件 jQuery事件是对javaScript事件的封装. 1.基础事件 在javaScript中,常用的基础事件有鼠标事件.键盘事件.windo ...

  9. PHP与ECMAScript_1_变量与常量

    PHP ECMAScript 变量命名规则 (相同点) 变量包含:字母.数字.下划线字符 变量只能以字母或下划线开头 变量不能以数字开头 变量名是区分大小写 变量包含:字母.数字.下划线字符 变量只能 ...

  10. 虚IP解决程序连只读服务器故障漂移

    目前公司有一套核心交易数据库配置了AlWaysON,SQL 2012版本, 1主4从, 其从库(8,14, 8.15) 这2台只读的从数据库服务器, 后台程序和wms等很多程序,都是直接配置IP连接这 ...