[GitLab]:Webhooks 实现自动化服务器项目部署

【需求简介】:本人目前需要实现本地提交代码至 GitLab,同时服务器端自动同步,经过了解可以通过 GitHub / GitLab 的 Webhooks (俗称:钩子)来实现

【选择原因】:为什么是 GitLab 而不是 GitHub ? 众所周知 GitHub 是开源项目托管平台且建立私有仓库是要付钱的,而 GitLab 的社区版 ( 免费版 ) 不但能建立免费的私有仓库而且没有数量上线,参与的人员也没有数量限制,并且能设置成员的权限,甚至细致到具体某条分支的权限,以及强大的工作流等.所以我认为 GitLab 非常适合中小型非开源项目公司,并且虽然这么说你可以看到其实不少大型公司(如下图)也会将他们的一些项目托管到 GitLab 上.所以我认为GitLab 是一个不错的选择

file

【正式部署】:首先你得先生成一个SSH Key 在你希望自动同步的服务器上

 # @ 具体流程如下
 - Git 安装
 - SSH Key 生成
 - Config 配置
 - SSH Keys 添加&导入
 - SSH 测试连接
 - Hooks 脚本编写
 - Webhooks 配置

【生成命令】:

# @ Command
ls -al ~/.ssh
# @ 出现如下提示则代表系统还没有 SSH Keys 需要我们去创建

file

# @ Command
ssh-keygen -t rsa -C "<Your Mail>" -b 4096
# @ 创建 SSH Key ( 注意:这里有邮箱建议和 Gitlab 中项目拥有者的邮箱一致以免发生一些未知错误 )

file

# @ Command
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub
# @ 添加 SSH Key && 查看 SSH 公钥 ( 复制公钥用于稍后的配置 )

file

# @ Windows 检查 Apache 登陆身份

注意!!!这是十分重要的一步对于使用 Windows 的同学来说,本人曾在这个问题上浪费了大量的时间,接下来讲下大致原理,Webhooks 触发时是一个HTTP请求,然后由 Apache 服务器调用 PHP,PHP 再调用 cmd.exe,并且会去寻找 Apache 登陆身份目录下的 .ssh 目录寻找公钥以验证 SSH Keys 实现远程私有仓库免登陆和服务器进行通讯,那么这就会带来两个极其容易出现问题的地方:PHP exec / shell_exec 等调用 cmd.exe 方法的权限的问题,以及公钥存放目录与 Apache 登陆身份目录 不一致导致的 SSH Keys 验证失败直接导致 PHP 脚本无法执行 Git Pull 命令,而直接执行命令脚本则正常的诡异情况

# @ Gitlab 配置 SSH

file
file
file
file

# @ 测试连接
ssh -Tv git@gitlab.com

file
【钩子脚本】:

# @ PHP Hooks Script ( 演示的关系我们编写一个最简单的脚本 )
<?php
    $Res_Command = exec("git checkout master 2>&1 && git fetch origin master2>&1 && git reset --hard origin/master 2>&1", $Arr_Debug);
    var_dump($Arr_Debug);  
?>

【配置钩子】:
file
file
file
file

【正式完成】:克隆下远程仓库,然后测试下钩子即可,在这感谢下公司的两位同事对我的提点,最后秉承着分享的精神希望这篇文章能帮助到有需要的人

【参考资料】:问题解决的过程中,参考了非常多的资料(红色标注的三篇参考最为关键,当然也同时感谢其它资料中作者所提供的思路)

# @ Most Important
https://gitlab.com/help/ssh/README
http://blog.csdn.net/thy38/article/details/49827407
https://segmentfault.com/a/1190000009232433
# @ About PHP Function "exec"
http://www.cnblogs.com/nerrissa/articles/4929462.html
http://php.net/manual/zh/function.shell-exec.php
http://blog.csdn.net/nksmiles/article/details/7371721
http://www.piaoyi.org/linux/Gitlab-GitHub-webhook-push-auto-deployment.html
http://www.tuicool.com/articles/2YR3IzN
https://gitlab.com/help/user/project/integrations/webhooks
# @ How To Create SSH Keys
https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E7%94%9F%E6%88%90-SSH-%E5%85%AC%E9%92%A5
# @ GitLab PHP Hooks Script Example
https://github.com/mdluo/github-webhook-handler-php
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 2年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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