本身搭建的博客,代碼託管到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後每次推送都會有詳細日誌,若是推送失敗,根據日誌調試便可。