Сначала был исследован механизм сборки и инструменты разработчика. После этого в отдельный проект была выделена сборка служебных инструментов для кросс компиляции. Для решения проблемы длительного времени сборки инструментов был использован werf, с хранением кэша промежуточных слоёв в docker registry.
В итоге время пересборки образов инструментов, при условии небольших изменений, было сокращено с 2-х часов до считанных минут.
Это дало возможность отвязаться от рабочего места разработчика, освободить сотрудника от рутинных операций по сборке и предоставлению готовых приложений, исключить риски ошибки версией при передаче ответственному за релизы.
После этого совместно с разработчиком код был зафиксирован в репозитории, для проектов был разработан git flow, согласован релизный цикл и настроена автоматическая сборка.
Основная поставка выполнялась через deb пакеты с отдельной системой версионирования.
Для сборки пакета был разработан отдельный скрипт с хранимой в git конфигурацией. В конфигурации сборщика зависимостей были указаны используемые по умолчанию версии служебных утилит, а также действия, которые нужно было совершить над полученными артефактами после скачивания. При необходимости сборки полностью кастомизированного релиза можно было указать версию для каждой из зависимостей, сохранив при этом конфигурацию в истории проекта.
Также при сборке формировался файл с перечнем используемых версий, для последующей публикации в описании релиза.
Результатом работ стали:- Снижение риска ошибки при ручном формировании набора утилит.
- Снижение bus factor на проекте.
- Возможность для технической поддержки оперативно получить информацию о релизе, его составе и локализовать потенциальные проблемы.