我有一个共享库,顾名思义,这是一个在不同项目之间共享的项目,以避免干燥。共享库是一个GIT存储库以及其他应用程序(app1、app2、app3)。
在部署app1时,我希望首先部署共享,然后部署app1。app2和app3也是如此。为了避免任何停机时间,共享库必须与app1同时部署,因此基本上在两个成功部署结束时都需要部署:符号链接:release。
当共享库中的代码发生变化时,我必须确保所有依赖它的项目也同时部署。
到目前为止,我已经成功地安装了Capistrano来分别部署每个应用程序。经过一些阅读,我正在使用现在的caphub,但它似乎没有帮助我解决这个问题。
我目前正在使用的是:
namespace :app1 do
task :deploy do
run_locally do
execute 'cap apps:shared staging deploy --dry-run', raise_on_non_zero_exit: true
execute 'cap apps:app1 staging deploy --dry-run', raise_on_non_zero_exit: true
execute 'cap apps:shared staging deploy', raise_on_non_zero_exit: true
execute 'cap apps:app1 staging deploy', raise_on_non_zero_exit: true
end
end
end执行的问题是,在更新共享和部署app1时,app1将处于停机状态。
解决这个问题的最佳做法是什么?是否有一种方法可以覆盖capistrano的流,使其只在任务结束时执行符号链接?
发布于 2016-03-21 12:36:00
虽然不同的人会有不同的回答,但我认为我推荐的“最佳实践”是让每个项目在其部署中包括共享库。除非代码是大量的,或者必须同时部署(例如更改共享配置),否则这通常没有什么坏处。如果您正在使用PHP,则可以为此使用Composer。和露比,邦德勒。这两种方法都可以指向Git端点。
这就是Gems在Capistrano中的工作方式,Capistrano::Bundler将该应用程序的所有宝石的独特的、每个应用程序的副本复制到shared/bundler中。
编辑:
要从Git存储库中添加一个Composer共享库,您有两个主要选项:
composer.json文件(这将使您更容易/可能完成PSR-4自动加载)。这里的说明:https://getcomposer.org/doc/05-repositories.md#using-private-repositoriesvendor/里。这里的说明:https://getcomposer.org/doc/05-repositories.md#package-2如果你有一个关于作曲家的用法的具体问题,我建议你发布一个新的问题。其他比我更熟悉作曲家的人可能会帮助你。我不像其他工具那么多地使用作曲家。
https://stackoverflow.com/questions/36128292
复制相似问题