🔥

Тред (Виталий Раевский)


Хоть уже не совсем среда, но тем не менее тема ci/cd сама себя не обсудит. Поделюсь становлением ci/cd в альфе и некоторыми мыслями.

Интересно, используете ли вы ci/cd у себя в компании и кто развивает?
🤔 32.9% Да, силами devops команды
🤔 61.8% Да, силами разрабы
🤔 2.6% Нет, но в планах
🤔 2.6% Нет, не доросли

В своей практике встречал компании где не было CI/CD . За релизы отвечал "релиз менеджер" , в обязанности которого была сборка проектов двух платформ и публикация в Play/Store. Как правило, каждый релиз оборачивался адом.

Если , а это постоянно, сборка не собиралась на его компе он в панике начинал дергать разрабов, лидов, продактов с обвинениями сломанности кода или изменения процесса сборки без внесений в документацию (написанную специально для него)

Хотя по факту суть решения было в чистки gradle кеша либо обновлении студии. Если в релизах находились runtime краши, то каждый раз этот ад повторялся. Про регулярность релизов и говорить не приходилось.

Из-за всяких подобных проблем или "договоренности" с продактами релизы с завидной частотой переносились. То есть фича , написанная в начале сентября , могла дойти до конечного пользователя только в октябре. Метрика TTM (Time-to-market) игнорировалась этим менеджером (

Кроме того релиз менеджер не прогонял таски по статическому анализу кода, кодстайл, тесты и их покрытия. От сюда были проблемы: - не всегда соблюдение кодстайла - детские баги в коде, которые бы подчеркнул статический анализатор - низкое покрытие тестами

Это привело к тому что на одной из встреч разрабов были принято решение попробовать поднять Jenkins, по триггеру на ПР прогонять таски перед мержем в бренч. Вызвались несколько разработчиков, которые хотели развивать эту компетенцию. Осталось выбить ресурсы на сервер

Это оказалось сложнее. Доказать бизнесу необходимость вложить довольно приличную сумму денег на улучшение эфемерной метрики без прувов - было невозможно. Приняли решение заказать макмини ( для сборок и iOS прил там же ) и поднять на них сборку для прувов.

Через несколько месяцев у нас был поднят CI процесс. И даже добавили ручной триггер для менеджера для сборки релиз кандидатов. Этим мы вылечили проблемы со сборками, кодстайлом и тестами. Теперь менеджер не сам собирал сборки, а дергал триггеры. Но работы оставалось много

Работы много, но я как настоящий хохол, перешел в Альфу 🅰️ . Здесь уже было все серьезнее . Кластер серверов, ноды, построенный процесс релизных поездов и регрессионное тестирование.

В #Альфабанк и эта компетенция не страдала стагнацией. Дальнейшее развитие заключала в себе изолированные запусти пайплайнов в docker контейнерах с предустановленным Android SDK, внедрением gradle-cache, оптимизацией скорости сборок , через github.com/gradle/gradle-… сценарии

Плюс был добавлен скрипт который при деплое для тестирования в AppDistribution добавлял ченджлог из коммитов . В каждом ПРе и коммите разрабы ставят таску из jira . Таким образом в регрессе можно было легко найти автора фичи для быстрого фикса бага

Само существование ci/cd помогает поддерживать метрику ttm, решает проблему качества кода при интеграции новых фичей ( чекстайлы, линты, тесты в пайплайне) и избавляет от ручных сборок для тестирования. Интересно узнать, какие у вас еще есть стейджи в пайпалайне? Делитесь

Виталий РаевскийВиталий Раевский