为何用 Webhook ?仅想向测试服自动拉取代码,不须要构建、测试,简单就好。
搜了网上的 Webhook 代码,有的既用到了php,又用到了shell,感受太复杂,本身才疏学浅看不懂,因而就想本身写一个简单的,能用就行。php
直接上代码nginx
// webhook-dev/index.php $token = 'XXX'; // 密钥 if (isset($_SERVER['HTTP_X_GITLAB_TOKEN']) && $_SERVER['HTTP_X_GITLAB_TOKEN'] != $token){ die('token 不正确'); } parse_str($_SERVER['QUERY_STRING'], $query); if (!isset($query['project'])){ die('请指明项目'); } $branch = isset($query['branch']) ? $query['branch'] : 'dev'; $command = "cd ../{$query['project']} && git pull origin {$branch}"; echo shell_exec($command);
把 webhook 单独做为一个项目,经过参数能够拉取不一样的项目、分支、标签。git
指定拉取项目和分支,query 参数以下web
经过 nginx 单独为 webhook-dev 配置域名或者ip端口,eg:webhook.vm.com。如要拉取项目(目录名) 为hello,分支为 dev,则连接为shell
http(s)://webhook.vm.com?project=project1&branch=dev
特别注意权限问题,因为 web 访问的用户和用户组为 www ,必定要确保 www 用户拥有拉取的项目中 .git 目录的权限。 gitlab
经过 postman 访问连接,Headers 中设置 X-Gitlab-Token
为本身的密钥,与代码中保持一致。出现如下相似的 git 信息,则视为部署成功。post
Updating abc123..abc123 Fast-forward README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
接下来进入 gitlab 项目下 Settings
->Integrations
页面,把刚才获得的连接填入 URL 框中,Secret Token
填入本身的密钥。测试
尝试本地提交一下代码,你会发现已经自动经过 Webhook 拉取到测试服了。code
git 地址使用 Https 会要求输入密码,执行如下代码。而后手动在测试服拉取,输入密码后会被记录。以后就能够用 Webhook 自动拉取。token
git config --global credential.helper store