Слишком умный Gitlab CI

Регулярная рубрика где я ною о том, как работают вещи. Довелось настраивать CI на гитлабе и я достаточно сильно погрузился в это в последние недели. Мысли.

Если отбросить сам факт того, что программировать на yaml мне нравится не очень сильно, то в среднем он даже вызывает позитивные ощущения, дока приятная. Рекламируют они это так: вот вам стейджи, вот вам джобы внутри стейджей. Джобы могут выполняться в разных контейнерах и на разных раннерах. Вау, класс, если бы мои проекты были ещё больше (а таких не то чтобы очень много в масштабах вселенной), то я был бы восхищён гибкости и как я всё это могу распределить.

Но в подавляющем большинстве случаев ты будешь свои проекты гонять на одном раннере и горя не знать. Ну или на крайний случай один пайплайн - один раннер. Распределять более атомарно это обрекать себя на новые проблемы. Пример в официальной документации показывает классические этапы build - test - deploy.

Вот предположим мы про андроид. Build компилит код, появляются огромные папочки build во всех модулях. Test на скомпиленном коде (не на артефакте) запускает тесты. Deploy, предположим, собирает бандл из скомпиленного кода, или куда-то его публикует. Вспомним ещё, что Gradle должен скачаться сам и перед конфигурацией скачать все свои зависимости. (Помянем людей, которые пол мира тянут из npm)

А теперь ещё раз, каждая джоба может выполняться на разных компьютерах физически, то есть от джобы к джобе весь тот наработанный на предыдущих кэш надо передавать. То есть буквально пушить куда-то десятки-сотни мегабайт зависимостей в конце каждой, и пуллить их заново. Представляете сколько это траффика и времени? Причём это достигается только с помощью так называемых "артефактов", которые ещё и в гитлабе отображаются с кнопочкой "скачать". Прекрасный артефакт папка build или .gradle/wrapper, да? Полезный.

И ведь мне это всё вообще не нужно, мне нужен самый простой из возможных сценариев, когда я запускаю 2 команды подряд и ожидаю что контекст у них один. А знаете что ещё интереснее? А то что у них такой возможности (без потенциальных проблем) просто нет. Вот, ишаку 6 лет, в школу уже пошёл почти.

Оверинжинеринг ради меньшей части пользователей, который делает невозможным то, что ожидает большая часть пользователей. Выбирайте дефолты правильно.