- 如果利用Git在服务器上自动更新项目代码。一般情况,我们需要在自己的服务器上,搭建git服务。
- 如果是公司自用,这种方式缺失可以更有效的保护代码。毕竟GitHub前段时间出现代码被盗,而且之前私有项目还需要另外收费。
- 但是如果是我们自用的服务器,自然要考虑更节省服务器资源的方式,而且这种方式在部署新项目时,也更加高效。
- 这种方式就是利用 GitHub 当做中转服务器,当有项目更新时,GitHub会通过 hook 请求服务器,服务器插件接收到 hook请求时,会主动请求GitHub 仓库地址。从而实现,自动更新服务器代码的作用。流程如下
实现步骤
一、在GitHub创建项目,并配置秘钥
ssh-keygen -t rsa -C "<peoject>.$(hostname)" -f <path-to-save-ssh-key> -N ""
二、安装服务器监听插件
- 下载大佬那里要过来的github 监听插件。解压出来得到
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:
- 注意里面的
token
参数,待会设置hook
地址时需要用到 17293
是默认端口,需要修改防火墙开放端口,可以修改port参数指定端口- 通过
netstat -lntp
查看是否启用成功,并开启防火墙允许该服务端口
三、配置GitHub监听地址
四、测试监听效果
- 恭喜!如果看到这个返回,说明已经设置成功了。俺们再也不用手动更新代码了。哦耶。