摘要:简介我们在部署我们的应用时我们一般会寻求一些云平台服务器部署当然也可以直接在服务器里拉取远程仓库的代码当然我们也可以实现通过钩子来实现服务器与远程仓库代码的同步这样一来我们在本地提交功能分支到仓库中仓库也会同步到服务器这样我们就无需自己手动
简介
我们在部署我们的web应用时 我们一般会寻求一些云平台服务器部署 当然也可以直接在服务器里拉取远程仓库的代码
当然我们也可以实现通过Webhooks(钩子)来实现服务器与远程仓库代码的同步
这样一来我们在本地提交功能分支到仓库中 仓库也会同步到服务器 这样我们就无需自己手动去同步项目代码
选择我们的项目大都托管在Github 当然Github在建立私有仓库时是需要付费的 那么在自己的网站部署时 我们完全可以选择其他的平台
目前来说我们需要试下Webhooks自动化部署 那么我们可以选择自己合适的平台 这里我选择GitLab
当然国内的话还可以选择 Coding 和 码云
这些在国内都是不错的代码托管平台 你都可以创建自己的私有项目仓库
之前我的网站项目是托管在Coding 但是近期我重写我的网站项目 因为GitLab本身可以建立自己的私有仓库并且没有限制
同样的也可以设置成员的权限 分支的工作流也十分清晰强大 现在很多的公司也都选择了GitLab so 我还是会去尝试一下新的服务
前期准备和Github一样 我们都要去生成一个ssh key这样我们以后在提交项目和项目分支时就可以免去身份验证
在本地终端执行
$ ssh-keygen -t rsa -C "youremail@example.com"
这里填写你GitLLab注册的邮箱即可(最好保持一致)
你可以一直默认下去 当然为了和之前的发生冲突 你可以自己在生成的时候重新命名
我这里生成的是gitlab_rsa和gitlab_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
然后填入的token是ispace
现在可以去服务器的站点目录下克隆远程仓库的项目 这里我的站点目录是/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 自动部署基础实践 熟悉 jenkins 的基本操作 ☑️ 实现本地 git push 后 jenkins 自...
摘要:为了看起来清晰,我写了一个文件,将这个文件和之前的放在同一个目录中,可以用以下命令快速启动,启动之后新构建的镜像和容器都名为。 showImg(https://segmentfault.com/img/remote/1460000014924499?w=883&h=515); 在软件开发过程中,如果我们每一次提交的代码都能够进行一次完整的编译、测试、打包、发布,就能及早发现问题、及早修...
阅读 1712·2021-11-11 10:58
阅读 4190·2021-09-09 09:33
阅读 1258·2021-08-18 10:23
阅读 1549·2019-08-30 15:52
阅读 1626·2019-08-30 11:06
阅读 1868·2019-08-29 14:03
阅读 1510·2019-08-26 14:06
阅读 2943·2019-08-26 10:39