10

我有几个大型 Symfony 项目,并且注意到在将所有内容更新到 Symfony 4 (Flex) 之后,当我们的部署自动化运行其正常过程时:

composer install --no-dev

我们最终得到(例如)这个:

Symfony operations: 2 recipes (72fad9713126cf1479bb25a53d64d744)
  - Unconfiguring symfony/maker-bundle (>=1.0): From github.com/symfony/recipes:master
  - Unconfiguring phpunit/phpunit (>=4.7): From github.com/symfony/recipes:master

然后,正如预期的那样,这会导致symfony.lockand以及其他任何内容发生变化config/bundles.php,具体取决于.require-devcomposer.json

确切地说,这些都没有破坏,但是生产部署不再有干净的git status输出是很烦人的,并且可能导致对实际部署的内容感到困惑。

有多种解决方法,例如我可以把所有东西都放进去,require而不是require-dev因为部署这些东西没有真正的危害,或者我可以省略--no-devComposer 命令的一部分。

但实际上,这里的正确做法是什么?如果您只是部署一个锁定的软件,没有办法告诉 Flex 不对配置进行任何更改,这似乎很奇怪。这是一个功能请求,还是我在这里错过了一些配置?

4

1 回答 1

0

如果您从 master 分支部署到 prod,则可以改为设置部署分支。在该分支中,您可以防止某些文件被合并。有关更多详细信息,请参阅此帖子。这会产生一种情况,您有一个主分支、一个版本分支(例如:3.21.2),并且您让开发人员签出主分支,对其进行处理,然后将他们的更改合并到版本分支中。从那里您可以选择部署到 prod 的内容。(这里会有一个小的平衡行为。您需要将所有 dev 更改合并到 master 中,直到它与您的版本分支匹配,并确保 master 在您部署后与版本匹配。这增加了一些工作,您必须留意它。等等)

另一种选择是将 git 存储库与部署目录分开。在这个例子中,在其中创建了一个 git 目录/var/repo/site.git和 deploy 目录,/var/www/domain.com并使用 post-receive git hook 在收到推送到 repo/site 目录后自动更新 www 目录。您显然在 www 目录中运行了 composer、npm、gulp、whathaveyou,而 git 目录保持原样。

无需进入诸如持续部署应用程序之类的商业选项,您就可以编写部署脚本。有很多方法可以编写一个 shell 脚本,它将一个目录复制过来,运行 composer,运行 npm 等,所有这些都在一个命令中——将你的 git 与部署目录分开。这是一个简单的方法,它利用当前日期时间来命名一个目录,然后将其符号链接到部署目录。

于 2018-02-06T13:00:45.680 回答