资讯专栏INFORMATION COLUMN

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

roadtogeek / 407人阅读

摘要:简介我们在部署我们的应用时我们一般会寻求一些云平台服务器部署当然也可以直接在服务器里拉取远程仓库的代码当然我们也可以实现通过钩子来实现服务器与远程仓库代码的同步这样一来我们在本地提交功能分支到仓库中仓库也会同步到服务器这样我们就无需自己手动

简介

我们在部署我们的web应用时 我们一般会寻求一些云平台服务器部署 当然也可以直接在服务器里拉取远程仓库的代码

当然我们也可以实现通过Webhooks(钩子)来实现服务器与远程仓库代码的同步

这样一来我们在本地提交功能分支到仓库中 仓库也会同步到服务器 这样我们就无需自己手动去同步项目代码

选择

我们的项目大都托管在Github 当然Github在建立私有仓库时是需要付费的 那么在自己的网站部署时 我们完全可以选择其他的平台

目前来说我们需要试下Webhooks自动化部署 那么我们可以选择自己合适的平台 这里我选择GitLab

当然国内的话还可以选择 Coding 和 码云

这些在国内都是不错的代码托管平台 你都可以创建自己的私有项目仓库

之前我的网站项目是托管在Coding 但是近期我重写我的网站项目 因为GitLab本身可以建立自己的私有仓库并且没有限制

同样的也可以设置成员的权限 分支的工作流也十分清晰强大 现在很多的公司也都选择了GitLab so 我还是会去尝试一下新的服务

前期准备

Github一样 我们都要去生成一个ssh key这样我们以后在提交项目和项目分支时就可以免去身份验证

在本地终端执行

$ ssh-keygen -t rsa -C "youremail@example.com"

这里填写你GitLLab注册的邮箱即可(最好保持一致)

你可以一直默认下去 当然为了和之前的发生冲突 你可以自己在生成的时候重新命名

我这里生成的是gitlab_rsagitlab_rsa.pub

接着在命令行执行(添加刚生成的公钥和私钥)

eval $(ssh-agent -s)
ssh-add ~/.ssh/gitlab_rsa

查看我们的公钥内容

cat ~/.ssh/gitlab_rsa.pub

拿到我们的公钥内容 我们就可以去GitLab添加我们的sh key

添加完毕之后当然是测试本地连接

$ ssh -T git@gitlab.com

如果没有问题的话 会回馈给我们正确的欢迎信息

具体的生成信息可以看官方的 ssh文档

我们在此之前在GitLab已经上传了我们的项目 在项目中的Setting->Integrations里添加脚本钩子

比如这边我添加的url是http://kobeman.com/hook/index.php

然后填入的tokenispace

现在可以去服务器的站点目录下克隆远程仓库的项目 这里我的站点目录是/data/www

那么在这个目录下克隆我们远程的项目 克隆完毕后 当然这里以Laravel项目为例 完成一些权限 这些可自行查阅

能够成功跑起来我们的项目就ok 这里我访问的网址是www.kobeman.com 下面就需要添加钩子文件

这里我们项目的根目录 这里可以是public目录下新建hook目录 添加一个index.php 具体内容如下

具体代码我已经放在我的gist上 如果有什么问题欢迎提出issue


这里的钩子文件需要注意以下几点

php配置里需要注释掉shell_exec这些被禁用的函数 详见 shell_exec

执行命令时切换到管理员用户最好

查看是否进入你的项目目录 这里我是通过chdir进入项目目录 因为cd命令是没有用的 详见 Can"t "cd" with PHP shell_exec()

git pull不能执行 这应该就是权限的问题 详见 shell 脚本中调用 git pull 命令无法执行

这里为什么我们需要获取这个$_SERVER的参数呢 因为GitLab是通过post请求这个地址 所以为了验证之前填入的token

我们这里是去验证他的请求头部 因为他是以请求头部传递给我们的 如图所示

为了了解他的头部到底包含了什么信息 我们可以都打印出来看下

所以说如果我们验证这个token成功的话再去进入到项目目录 执行git pull拉取我们最新的代码

这样也就实现了 自动化的代码部署 在验证过程中我打印了下这个 $_SERVER["HTTP_X_GITLAB_TOKEN"]

这样一来下次再去提交我们的最新的功能代码时就可以哦同步到我们的服务器

相关链接

Gist 地址

GitLab 官网

Coding 官网

码云 官网

GitLab key生成

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25653.html

相关文章

  • Docker + Jenkins + webhooks 自动部署基础实践

    摘要:自动部署基础实践熟悉的基本操作实现本地后自动构建部署服务此实践用于优化自己在实际工作中的工作流在本地开发到服务器登录云服务器或者简化流程后本地开发云服务器自动构建部署本实践将结合技术来实现云服务器对各种环境的切换与部署。 Docker + Jenkins + webhooks 自动部署基础实践 熟悉 jenkins 的基本操作 ☑️ 实现本地 git push 后 jenkins 自...

    Charlie_Jade 评论0 收藏0
  • Docker 入门(三):持续集成、持续部署

    摘要:为了看起来清晰,我写了一个文件,将这个文件和之前的放在同一个目录中,可以用以下命令快速启动,启动之后新构建的镜像和容器都名为。 showImg(https://segmentfault.com/img/remote/1460000014924499?w=883&h=515); 在软件开发过程中,如果我们每一次提交的代码都能够进行一次完整的编译、测试、打包、发布,就能及早发现问题、及早修...

    newtrek 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<