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

时间:2014-10-23 12:30:43

标签: php git laravel deployment jenkins

我正试图找出一种使用GitLab自动部署公司Intranet PHP应用程序的方法,但到目前为止,我不确定我在互联网上找到的选项是否可以完成这项任务。 / p>

以下是该场景:

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

我想做什么:

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

更新主分支时必须进行相同的操作,但必须更新生产服务器树。

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

我们正在关注Vincent Driessen的Git分支模型。

到目前为止我所知道的:

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

你们有没有实施一个可以帮助我的案例的解决方案?任何人都可以建议一种简单而优雅的方式吗?

谢谢你们!有个好看的

3 个答案:

答案 0 :(得分:1)

我建议保持简单并使用git,hooks和远程存储库。 像Jenkins或Gitlab这样的任务拉出重型枪可能有点太多了。

我看到你的请求如下:“合并后推送和/或git之后的git:推送到远程仓库”。

您可以设置“裸”远程存储库 - 一个用于“dev-stage”,一个用于“生产阶段”。 他们唯一的目的是接受推动。

每个开发人员都在他的功能分支上工作,基于开发分支。 当功能分支准备就绪时,它将合并回主开发分支。 两者都触发执行脚本的“后合并”或“后接收”挂钩。 执行的脚本可以做任何你想做的事。

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

在这里你需要两件事:

  1. 您希望将特定分支推送到特定的远程仓库。 为此,您必须在钩子脚本中找到特定的分支。 这很棘手,但可以解决,请参阅:https://stackoverflow.com/a/13057643/1163786(写一个“git post-receive hook”来处理特定的分支)

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

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

答案 1 :(得分:1)

我们通过以下方式实现:

  • 开发人员检查Git分支,以及本地需要/需要的分支(Mac上的VM Ware中的Debian)

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

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

    < / LI>

我们使用自己的脚本进行半自动化。

由于其性质的敏感性,手动进行数据库更改。但是,在习惯了迁移之后,我们不会为此感到麻烦 - 只记得记下这些改动。我们通过在本地克隆需要更改的每个分支的数据库来获得良好的支持。如果忘记了对迁移文件的更改,则自动模式比较会很快发挥作用。

(第二点是效率最高的一点,只要第一次提交新分支,就可以在开发平台上进行即时测试)

答案 2 :(得分:0)

如果您希望保持简单明了并且不介意使用付费第三方选项,请查看以下其中一项:

或者,如果您希望转换到集成解决方案,我的使用率并不比Beanstalk好。