说明

我们使用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. [转载]linux下清除Squid缓存的方法记录

    在日常运维工作中,只要用到squid缓存服务,就会常常被要求清理squid缓存. 比如公司领导要求删一篇新闻,新闻是生成的静态.运维人员把服务器上静态的新闻页面删除了后,不料代理服务器上缓存还有.缓存 ...

  2. 【CYH-01】小奔的国庆练习赛:赛后标程

    前排鸣谢@找寻 大佬 emm-由于头一次举办公开赛所以--准备不是很充分,所以说题解也没有备好,在这里表示歉意. 欢迎大家来发布题解,在此我们可以提供AC代码,供大家参考. T1 解析:这一题可能栈溢 ...

  3. Catalan公式

    f(n)=f(1)*f(n-1)+f(2)*f(n-2)+f(3)*f(n-3)+......+f(n-1)*f(1) 例用:一个长度为n的无重复序列入栈的所有出栈方式

  4. 分布式任务调度平台XXL-JOB学习笔记一

    分布式任务调度平台XXL-JOB学习笔记一 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用.码云地址 ...

  5. python的乘法口诀表

    python的乘法口诀表 python的乘法口诀表 用python来写一个脚本,使得这个脚本在运行后自动输出乘法口诀表. pyton的脚本如下: #!/usr/bin/env python #codi ...

  6. [mysql终极优化]之主从复制与读写分离详细设置教程

    读写分离与主从复制是提升mysql性能的重要及必要手段,大中型管理系统或网站必用之. 一.什么是读写分离与主从复制 先看图 如上图所示,当web server1/2/3要写入数据时,则向mysql d ...

  7. git rebase 理解

    摘录自:https://blog.csdn.net/wangnan9279/article/details/79287631

  8. 配置 IDEA 远程连接应用服务器

    当调试 Web 应用时,经常需要使用 ide 远程连接,来进行 debug 调试.使用 Springboot 内置服务器和使用 Tomcat 服务器是常见的应用部署方式,可以用不同的配置方式来启动远程 ...

  9. jmeter环境变量

    jmeter环境变量配置jmeter环境变量时,同时也需要配置Java变量(jdk最好使用1.7及1.7以上的版本)1.配置jdk环境变量安装jdk正常安装,一路默认就好,记住安装路径,配置环境变量时 ...

  10. 微信小程序的尺寸单位rpx介绍

    rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应. 规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375 ...