将Laravel PHP应用程序部署到开发和生产服务器


Deploy Laravel PHP apps to development and production server

我正试图找到一种使用GitLab自动部署公司内部网PHP应用程序的方法,但到目前为止,我不确定我在互联网上找到的选项是否能胜任这项工作。

以下是场景:

VM1:远程Git服务器,它使用GitLab来管理项目回收
VM2:开发服务器。每个项目都有自己的开发服务器
VM3:生产服务器。每个项目都有自己的项目
开发人员:每个开发人员都使用一个基于项目开发服务器的浮动框。

我想做的事:

每当开发人员将其提交推送到开发分支时,远程服务器中的钩子必须使用该分支上的最后一次提交更新开发服务器树。

更新主分支时也必须发生同样的情况,但它必须更新生产服务器树。

然而,由于我们使用Laravel,我们必须使用Artisan运行一些额外的控制台命令,具体取决于每种情况。

我们遵循Vincent Driesen的Git分支模型

到目前为止我所知道的:

我知道GitLab使用Web挂钩,但我不确定在这种情况下是否有效,因为我需要访问一个自定义URL,这听起来不太安全,但如果这是唯一的解决方案,我可以写一个脚本来处理它
另一个可能的解决方案是使用Jenkins,但我不是专家,我还不知道Jenkins是否太适合我的情况,因为我还没有使用单元测试。

你们有没有实施过对我有帮助的解决方案?有人能提出一种简单优雅的方法吗

谢谢大家!拥有一个不错的

我们按照以下方式进行:

  • 开发人员在本地签出任何Git分支,以及他们想要/需要的分支数量(Mac上VM Ware中的Debian)

  • 每当更改被推送到Git时,所有分支都会被拉到dev-server。它们在feature-x.dev.domain.com、feature-y.dev.domain.com等中可用,针对dev数据库运行。

  • 发布分支在实时系统上手动检出以进行测试,并在Release-x.test.domain.com等上针对实时数据库提供(如果可能,取决于迁移)。

我们已经使用自己的脚本实现了半自动化。

数据库更改是手动进行的,因为它们的性质很敏感。然而,在习惯了迁移之后,我们并没有觉得这是一件麻烦的事,只需要记住这些变化。我们通过为每个需要更改的分支在本地克隆数据库找到了很好的支持。如果忘记了对迁移文件的更改,那么自动模式比较会很快起到帮助作用。

(第二点是最有效的一点,在推送新分支的第一次提交后,每个人都可以在开发平台上进行即时测试)

我建议保持简单,并使用git、hook和远程重定位器。为了完成这项任务,像詹金斯或Gitlab这样的重炮可能有点太多了。

我看到您的请求如下:"推送后的git和/或合并后的git:推送到远程回购"。

您可以设置"裸"远程存储库,一个用于"开发阶段",一个则用于"生产阶段"。他们唯一的目的就是接受推送。

每个开发人员都基于开发分支来处理自己的特性分支。当特性分支准备就绪时,它将合并回主开发分支。两者都会触发一个"postmerge"或"postreceive"钩子,执行脚本。执行的脚本可以执行任何您想要的操作。

(生产方法相同:当dev分支有足够的新功能时,它被合并到prod分支-触发合并事件-脚本…)

这里你想要两样东西:

  1. 您希望将特定的分支推送到特定的远程回购。为了做到这一点,您必须在钩子脚本中找到特定的分支。这很棘手,但可以解决,请参阅:https://stackoverflow.com/a/13057643/1163786(写一个"gitpostreceivehook"来处理特定的分支)

  2. 您想要执行配置/设置的其他步骤,如artisan等。您可以将这些步骤直接添加到hook脚本中,也可以将其作为触发器添加到钩子脚本中。

我认为这个请求与git的内部和外部部署有关。您还可以搜索教程,如"使用git进行部署",这可能会有所帮助。例如:http://ryanflorence.com/deploying-websites-with-a-tiny-git-hook/

  • http://git-scm.com/book/en/Git-Basics-Working-with-Remotes
  • http://githooks.com/&https://www.kernel.org/pub/software/scm/git/docs/githooks.html

如果你喜欢简单明了,不介意使用付费的第三方选项,请查看其中一个:

  • http://deploybot.com/
  • https://www.deployhq.com/
  • https://envoyer.io/

或者,如果你想转向集成解决方案,我没有使用过比Beanstalk更好的解决方案。