Git Webhook自动部署项目

为什么用 Webhook ?仅想向测试服自动拉取代码,不需要构建、测试,简单就好。

搜了网上的 Webhook 代码,有的既用到了php,又用到了shell,感觉太复杂,自己才疏学浅看不懂,于是就想自己写一个简单的,能用就行。

代码

直接上代码

// 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 单独作为一个项目,通过参数可以拉取不同的项目、分支、标签。

  1. webhook-dev 项目 与 其他项目在同级目录
  2. 指定拉取项目和分支,query 参数如下
    • project 项目名
    • branch 分支或标签,默认 dev

通过 nginx 单独为 webhook-dev 配置域名或者ip端口,eg:webhook.vm.com。如要拉取项目(目录名) 为hello,分支为 dev,则链接为

http(s)://webhook.vm.com?project=project1&branch=dev

特别注意权限问题,由于 web 访问的用户和用户组为 www ,一定要确保 www 用户拥有拉取的项目中 .git 目录的权限。

通过 postman 访问链接,Headers 中设置 X-Gitlab-Token 为自己的密钥,与代码中保持一致。出现以下类似的 git 信息,则视为部署成功。

Updating abc123..abc123
Fast-forward
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

接下来进入 gitlab 项目下 Settings->Integrations页面,把刚才得到的链接填入 URL 框中,Secret Token 填入自己的密钥。

尝试本地提交一下代码,你会发现已经自动通过 Webhook 拉取到测试服了。

PS

git 地址使用 Https 会要求输入密码,执行以下代码。然后手动在测试服拉取,输入密码后会被记录。之后就可以用 Webhook 自动拉取。

git config --global credential.helper store
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!