Давайте попробуем использовать действительно упрощенный и не обязательно правильный пример из реальной жизни:
Я работаю в компании, которая разрабатывает приложения для Android.В настоящее время мы должны работать над приложением, которое является довольно небольшим проектом, поэтому над ним работают только я и еще один коллега.
Поскольку мы являемся первоклассными разработчиками, мы, конечно, пишем тесты и хотим, чтобы нашикод для достижения ветки develop
, когда приложение фактически компилируется, и все наши тесты отображаются зеленым цветом.
Для автоматизации этой повторяющейся задачи мы используем сервер непрерывной автоматизации, такой как Jenkins (или что-то ещекак Bamboo ), и создайте рабочий процесс, который создает код нашего проекта и запускает наши тесты всякий раз, когда мы пытаемся зафиксировать какой-либо код в ветви develop
.Только если он успешно собран и все тесты зеленого цвета, наш код будет интегрирован в ветку develop
.
-> Мы используем непрерывную интеграцию, ууу!
Теперь, по прошествии нескольких месяцев, мы решили, что наше приложение готово к выпуску для пользователей Play Store.
Мы берем код нашего текущего (и, надеюсь, тщательнопроверенная) версия нашего приложения из ветви develop
и скопируйте ее в новую ветку с именем release
.
. Ветвь release
используется во втором рабочем процессе Jenkins, который на данный момент выполняет те же функции, что и нашПервый: он строит код из этой ветки и запускает тесты против него.
Затем нам нужно добавить еще один шаг в новый рабочий процесс Jenkins.Когда код нашего приложения был успешно собран и все тесты зеленого цвета, мы хотим, чтобы приложение автоматически развернуло / было загружено в Play Store, чтобы пользователи могли загрузить и установить его на свои телефоны.
-> Мы используем непрерывное развертывание, ууу!