乐趣区

关于git: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
退出移动版