【问题标题】:Best way for deployments with builds, dependency managers and GIT? [closed]使用构建、依赖管理器和 GIT 进行部署的最佳方式? [关闭]
【发布时间】:2015-04-30 09:15:56
【问题描述】:

我目前正在使用 Git、Git Flow、Gulp 和 Bower。我正在处理develop 分支并使用Gi​​t Flow 创建发布到master 分支。所以develop 等于我的本地和测试环境,release/version 等于验收环境,master 分支等于生产环境。见:http://nvie.com/files/Git-branching-model.pdf。在每个环境中运行 Git,因此部署无非是:git pull origin master

我使用 Bower 处理了一些依赖项,例如 Bootstrap 和 Font Awesome,我正在使用 Gulp 观看 .less 文件以“编译”为 css、缩小 css/js 等。

现在转向问题:我的 Git 存储库中应该包含什么?假设我正在开发一个 Magento 项目,将 Magento 和 Bower 中的所有依赖项放在存储库中将是矫枉过正。目前我只排除node_modules(用于Gulp)和bower_components(包含依赖项)目录,当我运行Gulp时,来自Bootstrap的.less文件将与我的项目相关@987654333“合并”和“编译” @ 文件。 “已编译”.css 文件当前包含在我的存储库中,否则无法仅使用 git pull 进行部署。为了让它在 Git 中没有“编译”版本的情况下工作,我必须在生产服务器上运行 Gulp。

  1. 在我的 Git 存储库中没有我的平台(Magento 或 Wordpress)但保持轻松更新的可能性的最佳方法是什么?我遇到了这个解决方案:http://blog.g-design.net/post/60019471157/managing-and-deploying-wordpress-with-git 他们正在使用 Git 子模块。不错的解决方案,但是这样平台需要位于子目录中。不理想,因为我必须“破解”以使其以这种方式工作(复制 index.php 并更改包含路径等)。

  2. 插件/模块呢?第三方插件也不应该在我的存储库中?只有我自己创建的插件。但并非所有第 3 方插件都具有可与 Git 子模块一起使用的 Git 存储库。对于 Wordpress,它只是一个目录,所以理论上这是可能的,但对于 Magento,大多数插件不仅仅是一个目录(它们在 app/codeapp/designskin 等目录中有文件)。我有很多带有多个匹配插件/模块的 Wordpress 和 Magento 站点,现在每个插件/模块都在每个站点存储库中。

  3. “编译”文件是否应该在存储库中?如果您问我:不,但我目前正在这样做,因此很容易部署。在生产服务器上安装 Bower 并运行 Gulp 以获取依赖关系并在 git pull 之后立即在生产服务器上“编译”是否普遍?继续在生产环境中运行 Gulp watcher(就像我在本地做的那样)会占用一些额外的不必要资源?

我希望有人能把我引向正确的方向。

【问题讨论】:

    标签: wordpress git magento deployment build


    【解决方案1】:

    很难提供适用于 Magento、WordPress 和其他平台的通用答案。我的回答主要针对 Magento,但我确信类似的概念也可以应用于 WordPress 和其他平台。

    1. 可以使用 Composermagento-composer-installer 自动安装 Magento 作为依赖项。您可以使用公共镜像,例如this one,也可以设置自己的存储库。将 Magento 本身作为依赖项安装后,更新它应该非常简单,就像任何其他依赖项一样。

    2. 您也可以将 Composer 用于模块(毕竟,Magento 本身只是一堆模块和一些将所有内容粘合在一起的脚本)。 FireGento 有很多常见的 Magento 模块,可以与 Composer 一起使用。您还可以设置自己的存储库以与 Composer 一起使用(我们为用于多个站点的内部模块执行此操作)。

      对于没有自己存储库的模块,您有三个选择:不使用它们(模块越少越好),为它们创建自己的存储库,或者只是将它们与你的代码库的其余部分。

    3. 在理想情况下,您的存储库应该只包含您自己的源文件。其他所有东西——无论是编译的、通过依赖管理器安装的,还是以其他方式自动创建的——都不应该在存储库中。

      但我们并不生活在一个理想的世界中 - 在您想要部署到的每个环境(开发机器)上运行 Composer、Bower、Git、Gulp、Sass 以及您正在使用的所有其他东西是很痛苦的、测试服务器、暂存服务器、生产服务器等)。

      如果这些依赖项有依赖项怎么办?如果您使用的 Gulp 插件在您的一台服务器上运行良好,但在另一台服务器上却失败了怎么办?如果有人进行部署并忘记通过 Gulp 运行一些必需的构建怎么办?当然,这些问题的答案是测试和自动化。您应该能够单击一个按钮(或键入命令,对于纯粹主义者)并自动部署所有内容 - 发出 git pull,运行适当的 gulp 命令,等等。但除非你有足够的人力和工时来建立如此复杂的系统,否则不值得。

    总的来说,我们使用上述不同点的组合。最后,我们最终将(几乎)所有内容提交到存储库 - 导致部署像 git pullsvn up 一样简单。当然,配置文件(凭据、.htaccess 文件等)不会进入存储库,指纹文件(我们手动上传)也不会。

    Fabrizio Branca 有一篇出色的博文 here,其中介绍了许多描述的要点,以便清理和升级 Magento 设置。

    【讨论】:

    • 感谢您的出色回答!我将尝试使用 Composer for Magento 和 Wordpress。这就是我要找的!我将在 BitBucket 上使用钩子为每个环境试验一个脚本,以便在收到推送后环境自动更新。更新脚本执行git pullnpm installbower installcomposer install,最后是gulp 命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2013-07-03
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多