【问题标题】:Deploy Laravel PHP apps to development and production server将 Laravel PHP 应用程序部署到开发和生产服务器
【发布时间】:2014-10-23 12:30:42
【问题描述】:

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

这是场景:

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

我想做什么:

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

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

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

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

到目前为止我所知道的:

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

你们是否已经实施了对我的情况有帮助的解决方案?任何人都可以提出一种简单而优雅的方法吗?

谢谢各位!祝你愉快

【问题讨论】:

    标签: php git laravel deployment jenkins


    【解决方案1】:

    我们按照以下方式进行:

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

    • 只要将更改推送到 Git,所有分支都会被拉到开发服务器。它们在 feature-x.dev.domain.com、feature-y.dev.domain.com 等中可用,针对开发数据库运行。

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

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

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

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

    【讨论】:

    • 这对我来说可能是理想的情况,但我需要在这个过程中适应 GitLab。我无法删除它,因为我们已经在旧项目中使用它。感谢分享,如果能详细说明一下方法就好了! :)
    【解决方案2】:

    我建议保持简单并使用 git、hooks 和远程存储库。 为这项任务拉出重型枪支,如 Jenkins 或 Gitlab 可能有点过分。

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

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

    每个开发人员都根据开发分支在他的功能分支上工作。 当功能分支准备好时,它会合并回主开发分支。 两者都会触发“合并后”或“接收后”挂钩,从而执行脚本。 执行的脚本可以为所欲为。

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

    这里你想要两件事:

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

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

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

    【讨论】:

    • 我也知道这个方法,我可能会尝试使用这个实现和 GitLab。我需要弄清楚 GitLab 将存储库保存在哪里来编写钩子。谢谢詹斯
    • 我认为 GitLab 将 repos 存储在 /var/opt/gitlab/git-data/repositories 中。但这取决于配置。 - 你可以试试 Gogs (Go Git Service) - Gitlab 的好替代品。
    • 似乎是一个不错的选择!非常轻巧,我喜欢它 :) 我要在这里安装它,看看效果如何!感谢提示
    【解决方案3】:

    如果您更喜欢简单明了并且不介意使用付费的第三方选项,请查看以下选项之一:

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

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多