Как да направите бързо внедряване в производство
Колеги, хубава неделя на всички.
Кой решава как да внедри новите версии (код и/или база данни) в жив проект?
Сега използваме git, но конфликтите при сливане са много бавни и потребителите не са добри :( Да, и постоянно трябва да правим експорт/импорт.
Благодаря на всички за отговорите.
конфликтите на сливане се забавят много 1) Разделете задачите, направете клоновете краткотрайни 2) Добра идея е да пребазирате приетите клонове 3) Опитайте се да адаптирате git-flow за себе си, като алтернатива, функцията за превключване работи добре вместо функцията за клонове
Да, и експортиране / импортиране на база данни постоянно трябва да правя. 1) Миграции 2) Опитайте се да направите миграции по такъв начин, че да не нарушават предишни версии. Е, ако трябва да добавите колона, би било добра идея да я направите nullable в първото издание, така че старата версия на приложението да може да работи с новата версия на базата данни, и след това да завършите тази част със следващото издание. Основната идея е, че е желателно двете последни версии на приложението да могат да работят с последната версия на базата данни. Ако вашата база е нормализирана нормално, тогава не трябва да има проблеми с това.
Ако се спазва втората точка, пускането на нови версии ще се извърши съгласно следния алгоритъм:
- нова компилация на приложението се разгръща в отделна директория (можете да я автоматизирате, да организирате редуването на компилациите и т.н.) - прехвърляме миграции към основата, в този случай старата версия на приложението ще работи с вече новата базова структура - превключваме webroot към новата версия. В случай на контейнери (docker), ние изтриваме стария контейнер - ако нещо се обърка, можем бързо да променим символната връзка обратно и да стартираме връщането назад на миграцията
При такъв сценарийпрестоят ще бъде минимален.
проблем с пускането на нови версии Ето опциите за вас в ред на сложност и мощност (от прости към сложни). - capistrano/capifony - ansible/puppet/chief/etc - docker + docker-machines + docker-compose
Е, да, тестове тестове тестове. Всички най-критични трябва да бъдат обхванати поне от интеграционни/функционални тестове. В идеалния случай цялата бизнес логика трябва да бъде покрита от бързи модулни тестове и функционален потребителски интерфейс / инфраструктура (прочетете за пирамидата за тестване).