Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Laravel PHP应用程序部署到开发和生产服务器_Php_Git_Laravel_Deployment_Jenkins - Fatal编程技术网

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

将Laravel PHP应用程序部署到开发和生产服务器,php,git,laravel,deployment,jenkins,Php,Git,Laravel,Deployment,Jenkins,我正试图找到一种使用GitLab自动部署公司内部网PHP应用程序的方法,但到目前为止,我不确定我在互联网上找到的选项是否可以完成这项工作 以下是场景: VM1:远程Git服务器,使用GitLab管理项目回购。 VM2:开发服务器。每个项目都有自己的开发服务器。 VM3:生产服务器。每个项目都有自己的项目。 开发人员:每个开发人员都使用一个基于项目开发服务器的漫游框 我想做的是: 每当开发人员将其提交推送到开发分支时,远程服务器中的钩子必须使用该分支上的最后一次提交更新开发服务器树 更新主分支时也

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

以下是场景: VM1:远程Git服务器,使用GitLab管理项目回购。
VM2:开发服务器。每个项目都有自己的开发服务器。
VM3:生产服务器。每个项目都有自己的项目。
开发人员:每个开发人员都使用一个基于项目开发服务器的漫游框

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

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

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

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

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

你们是否已经实施了一个对我的情况有帮助的解决方案?有人能推荐一种简单而优雅的方法吗?


谢谢大家!有一个不错的

我建议保持简单,使用git和远程存储。 为了完成这项任务而拔出重炮,比如Jenkins或Gitlab,可能有点太多了

我看到您的请求如下:“推后git和/或合并后git:push to remote repo”

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

每个开发人员都基于开发分支在其功能分支上工作。 当特性分支准备就绪时,它将合并回主开发分支。 两者都触发一个“post merge”或“post receive”钩子,执行一个脚本。 执行的脚本可以执行任何您想要的操作

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

这里您需要两件事:

  • 您希望将特定分支推送到特定的远程回购。 为了做到这一点,您必须找出钩子脚本中的特定分支。 这很棘手,但可以解决,请参见:(编写“git post receive hook”来处理特定分支)

  • 您希望执行其他配置/设置步骤,如artisan等。 您可以直接将这些步骤或作为触发器添加到钩子脚本中

  • 我认为这个请求与通过git的内部和外部部署有关。 您还可以搜索教程,如“使用git部署”,这可能会有所帮助。 例如:

    • &

      • 我们采用以下方法:

        • 开发人员签出任何Git分支,并在本地签出任意数量的分支(Mac上VM Ware中的Debian)

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

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

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

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


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

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


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

        这可能是我的理想情况,但我需要让GitLab适应这个过程。我没有办法删除它,因为我们已经将其用于较旧的项目。谢谢分享,如果你能详细说明你是如何做到的,那就太好了!:)我也知道这个方法,我可能会尝试使用这个实现和GitLab。我需要弄清楚GitLab在哪里保存回购协议来编写钩子。谢谢JensI,我认为GitLab将回购存储在
        /var/opt/GitLab/git data/repositories
        中。但这取决于配置你可以给Gogs(GoGit服务)一个不错的Gitlab替代品。这似乎是一个不错的选择!非常轻,我喜欢:)我将在这里安装它,看看它如何运行!谢谢你的提示