我有几个大的Symfony项目,并注意到在将所有内容更新到Symfony 4(Flex)后,当我们的部署自动化运行其正常的过程时:
$.ajax({
/** your other stuff, and... */
success : function(data) {
if (data == 1) {
$('button.on').attr({src : "bulb.png"})
}
// and so on
}
});
我们最终得到(例如)这个:
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.lock
以及其他任何内容的更改,具体取决于config/bundles.php
中require-dev
中包含的内容。
这一切都没有,确切地说,但是让生产部署不再具有干净的composer.json
输出是令人讨厌的,并且可能导致对实际部署的内容产生混淆。
对此有各种解决方法,例如我可以将所有内容放在git status
而不是require
中,因为在部署这些内容时没有真正的危害,或者我可以省略{{1} Composer命令的一部分。
但实际上,这里的正确做法是什么?如果您只是部署一个锁定的软件,就没有办法告诉Flex不对配置进行任何更改,这似乎很奇怪。这是一个功能请求,还是我在这里错过了一些配置?
答案 0 :(得分:0)
如果从主分支部署到prod,则可以设置部署分支。在该分支中,您可以阻止某些文件合并。See this post for more detail。这会创建一种情况,在这种情况下,您拥有一个主分支,一个版本分支(例如:3.21.2),并且您正在使用devs checkout master,对其进行处理,然后将其更改合并到版本分支中。从那里你挑选并选择被部署到prod的东西。 (这里会有一个小的平衡行为。你需要将所有dev更改合并到master中,直到它与你的版本分支匹配,并确保master在你部署后匹配版本。这增加了一些工作,你必须留意它等。)
另一种选择是将您的git存储库与部署目录分开。 In this example,在/var/repo/site.git
中创建了一个git目录,部署目录为/var/www/domain.com
,并且在收到repo后,使用post-receive git hook自动更新www目录/ site目录。你显然在www目录中运行了composer,npm,gulp,whathaveyou,而git目录保持原样。
如果不进入持续部署应用等商业选项,您可以编写部署脚本。有很多方法可以编写一个shell脚本,它接受一个目录并将其复制,运行composer,运行npm等等所有命令 - 将git与deploy目录分开。这是一个simple one,它利用当前的日期时间命名目录,然后将其符号链接到部署目录。