本身搭建的博客,代码托管到github,心想博客更新那么频繁,每次push代码后都到服务器上手动部署,实在是太麻烦, 因而想到自动化部署,开始的时候只是想经过一个简单的 shell +cron的方法来解决,可是这方法真的太笨了,一点都不 智能 。想到github的webhook,以前只是据说,明白其原理,并无实操,此次恰好能够亲自体验一把了。具体以下:node
webhook是一种web回调或者http的push API,是向APP或者其余应用提供实时信息的一种方式。Webhook在数据产生时当即发送数据,也就是你能实时收到数据。这一种不一样于典型的API,须要用了实时性须要足够快的轮询。这不管是对生产仍是对消费者都是高效的。linux
Webhook有时也被称为反向API,由于他提供了API规则,你须要设计要使用的API。Webhook将向你的应用发起http请求,典型的是post请求,应用程序由请求驱动。nginx
Webhook模式的主要优势是,当你的应用在等待变化时,无需周期性地调用APIs。git
github webhookgithub
下载脚本:webhook.jsweb
说明:shell
var handler
配置便可;# /usr/lib/systemd/system/webhook.service [Unit] Description=Github webhook After=network.target [Service] Type=simple User=nginx Group=nginx WorkingDirectory=/home/nginx/workspace/gitbook/scripts/ Environment=NODE_PORT=10080 ExecStart=/home/nginx/.nvm/versions/node/v10.15.3/bin/node /home/nginx/workspace/gitbook/scripts/webhook.js Restart=on-failure [Install] WantedBy=multi-user.target
注意事项: 声明WorkingDirectory。json
#!/bin/bash WEB_PATH='/home/nginx/workspace/gitbook/books/'$1 WEB_USER='nginx' WEB_USERGROUP='nginx' source /home/nginx/.bash_profile t1=`date +'%Y-%m-%d %H:%M:%S'` echo "$t1 Start deployment" >> /home/nginx/workspace/gitbook/scripts/info.log cd $WEB_PATH pwd echo "pulling source code..." git reset --hard origin/master git clean -f git pull sleep 2 echo "building..." t2=`date +'%Y-%m-%d %H:%M:%S'` gitbook build if [ $? -eq 0 ];then echo "$t2 Finished." >> /home/nginx/workspace/gitbook/scripts/info.log else echo "$t2 Error!" >> /home/nginx/workspace/gitbook/scripts/info.log fi
注意事项: source /home/nginx/.bash_profile
其中加入/$HOME/.nvm/versions/node/v10.15.3/bin/
,不然可能致使脚本运行时找不到gitbook命令,构建失败。bash
进入项目,Settings;服务器
Webhook
Add webhook
Payload URL:ip或域名(解析到服务器)+上面脚本监听的端口+项目名称,如:http://domainname:7777/devops_docs
Content type:
Secret:保持和webhook.js中一致
选择要监测的github动态:默认只监听 push event
就好
Active!
经过上面的配置,及完成了自动化部署的全部操做,此时能够经过向仓库中push代码来进行测试。
开启Active后每次推送都会有详细日志,若是推送失败,根据日志调试便可。