服务器环境:
Windows Server 2008 R2 Enterprise
PHP 5.6.27
Apache 2.4.23
MySQL 5.5.53
Laravel 5.4
代码仓库:GitLab 8.8.5
每次从本地push代码到仓库,然后在登录服务器pull回来刚刚的代码。都感觉好繁琐,于是就想着能不能把后面那句话要执行的动作省略掉,也就是只需将本地代码push至代码仓库,然后代码仓库在响应push过来的动作,将代码地给服务器。解决该问题一个比较简单的办法是利用代码仓库的webhook功能。
以下是Laravel项目中配置webhook
- 首先创建一条webhook专用的一条路由,并使用
exec()
函数执行deploy.bat
脚本。
// routes.php
Route::any('/deploy', function () {
exec('C:/path/to/yourProject/deploy.bat');
})
创建deploy.bat文件
# deploy.bat
cd C:/path/to/yourProject/
git pull origin master
- 然后在Laravel项目中的
.env
文件里增加两行参数
HOMEDRIVE = C: //这里配置的是HOMEPATH变量的盘符
HOMEPATH = \Users\Administrator //这里填写用户目录,因为exec执行git命令时需要.gitconfig和.ssh里的文件
-
将刚刚写好的路由地址填入webhook的链接栏,其他的都默认(webhook在gitlab仓库地址 > 设置 > web钩子),完成后点击“增加web钩子”按钮即可。
- 试着从本地push一条commit到代码仓库触发webhook同步至服务器,如果这里没有效果的话,请结合刚刚新增的Web钩子“测试”按钮与Laravel日志进行调试。