如何利用GitHubHook自动更新服务器项目

  • 如果利用Git在服务器上自动更新项目代码。一般情况,我们需要在自己的服务器上,搭建git服务
  • 如果是公司自用,这种方式缺失可以更有效的保护代码。毕竟GitHub前段时间出现代码被盗,而且之前私有项目还需要另外收费。
  • 但是如果是我们自用的服务器,自然要考虑更节省服务器资源的方式,而且这种方式在部署新项目时,也更加高效。
  • 这种方式就是利用 GitHub 当做中转服务器,当有项目更新时,GitHub会通过 hook 请求服务器,服务器插件接收到 hook请求时,会主动请求GitHub 仓库地址。从而实现,自动更新服务器代码的作用。流程如下
    GitHubhook

实现步骤

一、在GitHub创建项目,并配置秘钥

配置秘钥

ssh-keygen -t rsa -C "<peoject>.$(hostname)" -f <path-to-save-ssh-key> -N ""

二、安装服务器监听插件

code-get code-get.exe code-get.sum repositories.conf
  • 修改repositories.conf中的配置,注意目录权限
# 项目名称
[test-repos] 

# 填入第一步生成的秘钥路径
key=<path-to-save-ssh-key> 

# 填入你要保存github项目的目录,注意目录权限
path=<path-to-clone-repos>

# 默认响应的分支,可换成其他分支
branch=master 

# 要响应的github地址,ssh方式可用于私有库
remote_path=git@github.com:xxxxx/test-repos.git 

#高级功能,接收到hook触发后响应的操作,没有则使用内置操作

# 可用于不仅仅只是clone代码, 还附带其他操作
# script=/var/www/<my-diy-clone-script.sh>
  • 例如更新 ThinkPHP5 项目时自动更新配置缓存
#!/bin/bash
REPOS_PATH=${WORK_PATH:-/var/www/html/$REPOS}

cd $REPOS_PATH || exit 2

CUR_BRANCH=${BRANCH:-master}

if [[ "$(git rev-parse --abbrev-ref HEAD)" != "$CUR_BRANCH" ]]; then
  git checkout -b $CUR_BRANCH
  git branch --set-upstream-to=origin/$CUR_BRANCH
fi

if ! git pull origin $CUR_BRANCH:$CUR_BRANCH; then
  git fetch origin/$CUR_BRANCH
  git reset --hard origin/$CUR_BRANCH
fi

#如果是composer管理的话要做一点而外工作
if [[ -f composer.json ]]; then
   if git log -1 --name-only | grep -q '^composer\.json'; then
      if  [[ -f composer.lock ]]; then
          composer update --optimize-autoloader --no-dev --no-plugins --no-scripts
      else
          composer install --optimize-autoloader --no-dev --no-plugins --no-scripts
      fi
  else
      #如果已经初始化好了,直接更新缓存
      composer dump-autoload --optimize
  fi
fi

if [ -f think ]; then
  php think optimize:autoload
  php think optimize:config
  php think optimize:route
  php think optimize:schema
elif [ -f artisan ]; then
  php artisan route:cache
  php artisan view:cache
  php artisan config:cache
fi
                 
  • 此时将插件配置成 linux 服务可以更有效的管理
[Unit]
Description=code-get

[Service]
User=www-data
ExecStart=/opt/github/code-get -token "112233" -port 17293 -c /opt/github/repositories.conf
TimeoutStopSec=3s
Restart=always

[Install]
WantedBy=multi-user.target
  • 开启服务:systemctl enable <abs-path-to>/code-get.service && systemctl start code-get.service。

PS:

  1. 注意里面的 token 参数,待会设置hook地址时需要用到
  2. 17293 是默认端口,需要修改防火墙开放端口,可以修改port参数指定端口
  3. 通过netstat -lntp查看是否启用成功,并开启防火墙允许该服务端口

三、配置GitHub监听地址

addwebhooks
在这里插入图片描述

四、测试监听效果

在这里插入图片描述

  • 恭喜!如果看到这个返回,说明已经设置成功了。俺们再也不用手动更新代码了。哦耶。
    在这里插入图片描述
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐大帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值