前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用webhook实现代码自动化部署 原

使用webhook实现代码自动化部署 原

作者头像
阿dai学长
发布2019-05-14 16:27:00
2.5K0
发布2019-05-14 16:27:00
举报
文章被收录于专栏:阿dai_linux阿dai_linux

需求背景

自己搭建的博客,代码托管到github,心想博客更新那么频繁,每次push代码后都到服务器上手动部署,实在是太麻烦, 于是想到自动化部署,开始的时候只是想通过一个简单的 shell +cron的方法来解决,但是这方法真的太笨了,一点都不 智能 。想到github的webhook,之前只是听说,明白其原理,并没有实操,这次刚好可以亲自体验一把了。具体如下:

webhook简介

webhook是一种web回调或者http的push API,是向APP或者其他应用提供实时信息的一种方式。Webhook在数据产生时立即发送数据,也就是你能实时收到数据。这一种不同于典型的API,需要用了实时性需要足够快的轮询。这无论是对生产还是对消费者都是高效的。

Webhook有时也被称为反向API,因为他提供了API规则,你需要设计要使用的API。Webhook将向你的应用发起http请求,典型的是post请求,应用程序由请求驱动。

Webhook模式的主要优点是,当你的应用在等待变化时,无需周期性地调用APIs。

github webhook

工作原理

  • vps启动一个nodejs进程(webhook),用来监听github仓库的状态;
  • 管理员本地修改代码,然后push到github代码仓库,master分支;
  • webhook监测到master分支的push操作;
  • 触发VPS上部署的脚本,代码到指定位置wwwroot。

构建webhook服务

下载脚本:webhook.js

说明:

  • 需要nodejs,部署node环境
  • 该脚本支持同时管理多个项目,只需要修改 var handler 配置即可;
  • handler:path名称和github中项目名称保持一致;
  • secret:和github中webhook密码保持一致;
  • listen:配置监听端口,之后再github中要用;
将webhook服务加入systemctl管理
代码语言:javascript
复制
# /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。

代码发布脚本

代码语言:javascript
复制
#!/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命令,构建失败。

github配置webhook

  • 进入项目,Settings;
  • Webhook
  • Add webhook
  • Payload URL:ip或域名(解析到服务器)+上面脚本监听的端口+项目名称,如:http://domainname:7777/devops_docs
  • Content type:
代码语言:txt
复制
- application/json
- application/x-www-from-urlencodeSecret:保持和webhook.js中一致
  • 选择要监测的github动态:默认只监听 push event 就好
  • Active!

测试

通过上面的配置,及完成了自动化部署的所有操作,此时可以通过向仓库中push代码来进行测试。

开启Active后每次推送都会有详细日志,如果推送失败,根据日志调试即可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求背景
    • webhook简介
      • 工作原理
      • 构建webhook服务
      • 代码发布脚本
      • github配置webhook
      • 测试
相关产品与服务
代码托管
CODING 代码托管(CODING Code Repositories,CODING-CR)是为开发者打造的云端便捷代码管理工具,旨在为更多的开发者带去便捷、高效的开发体验,全面支持 Git/SVN 代码托管,包括代码评审、分支管理、超大仓库等功能。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档