- 22, Oct 2024
- #1
Исторически сложилось так, что особенно в мире Java принцип «сборка один раз и развертывание повсюду» был очень важным моментом для развертываний. Артефакты должны создаваться ровно один раз при выпуске релиза и храниться где-нибудь, например, в Nexus или Artifactory, где они являются неизменяемыми и могут быть многократно и безопасно развернуты во всех средах.
С другой стороны, GitLab Flow рекомендует иметь отдельную ветку для каждой среды и развертывать ее в этой среде как событие после выполнения мерж-реквеста в ветку. Например. слияние master -> staging запускает CI/CD в промежуточной ветке, что приводит к развертыванию там. Объединение промежуточного этапа с производственной веткой приводит к тому же самому в производстве (с возможностью принудительного согласования запуска вручную).
Таким образом, поток GitLab заставляет нас пересобирать наши артефакты для каждой среды, а не создавать их после развертывания повсюду.
Означает ли это, что мы должны полностью отказаться от повсеместной сборки и развертывания при переходе на современные инструменты, такие как GitLab/GitHub? Это хорошо?
Я думаю, мы можем расширить поток GitLab следующим образом:
- Создавайте артефакты при слиянии с веткой DEV и сохраняйте их в репозитории maven/etc.
- Выполните развертывание с использованием этих артефактов.
- При слиянии с промежуточным/продуктовым проектом пропустите сборку/тестирование и выполните развертывание только с использованием тех же артефактов.
Однако это похоже на принуждение GitLab/etc к чему-то против их модели, поэтому я думаю, что это не очень хорошая идея.
Примечание. Мне также интересно, как в некоторых крупных проектах возможна сборка/тестирование/развертывание в каждой среде отдельно. Например. Престо Facebook включает около часа тестов в сборке maven (или больше)... Я бы не хотел, чтобы мой производственный релиз занимал часы; это противоположность современному.
Есть какие-нибудь мысли?
#deployment #gitlab #continious-deployment #cicd #build-pipeline