Я довольно новичок в GitLab.Я настроил конвейеры и этапы через .gitlab-ci.yml, и они, кажется, работают, но я только что обнаружил, что некоторые из моих предположений были неверны.
У меня есть большая, многопроектная установка Gradle, производящий много артефактов.Мы находимся в процессе настройки GitLab, и я действительно хотел использовать пользовательский интерфейс GitLab, чтобы показать прогресс сборки.Идея заключалась в том, чтобы приятно указать разработчикам и рецензентам, как далеко зашла сборка до того, как она провалилась, что-то вроде:
- Получили свои зависимости
- Скомпилированный основной код, YAY!
- Скомпилированный тестовый код, yippie!
- Пройдены юнит-тесты, мы качаемся!
- Пройдены интеграционные тесты, потрясающе!
- Пройдены различные тесты статического анализа кода.Мы почти готовы к работе!
- Сгенерированная документация - можем ли мы ее отправить?
Я настроил каждый из них как отдельные задания на своих отдельных этапах (неправильно)предполагая, что Gradle сможет выполнить свою магию инкрементной сборки и что это будет почти так же быстро, как запускать его за один шаг.
Затем я заметил, что каждая стадия вызывает то, что кажется повторной инициализацией контейнера Docker.Это также означает, что демон Gradle должен перезапуститься и не знает о прошлом.Он должен получить все зависимости.Я думаю, что я мог бы кэшировать их, но кажется, что они будут кэшироваться отдельно для каждой работы.Наконец, эти некоторые задания заканчивают тем, что повторяли то, что работали до них, потому что их выходные данные им не доступны.Мое предположение, что сериализованные задания будут выполняться внутри одного экземпляра контейнера, оказалось неверным.Каждое из последующих заданий обычно должно повторять то, что было выполнено до этого, значительно увеличивая время сборки.
Мне кажется, я понимаю, что могу объявить артефакты каждого задания и сделать их доступными для зависимых заданий таким образом,но это не устраняет все накладные расходы и добавляет некоторые свои собственные - копирование артефактов «куда-то», а затем обратно, одновременно выходя за пределы того, сколько я могу передать.На самом деле, моя работа по модульному тестированию сейчас не выполняется, и я не могу понять, почему из-за ограничения размера журнала, но, похоже, это связано только с артефактами (отчет), поскольку модульный тест проходит хорошо, когда я запускаю их вне GitLab.
Мне также кажется, что я понимаю, что идея заданий состояла в том, чтобы иметь возможность запускать их параллельно на отдельных участниках.Это очень хорошая особенность, и я, вероятно, могу использовать их для более поздних этапов, но не для (1) - (5), поскольку они в значительной степени зависят от большого количества выходных данных по крайней мере некоторых из предыдущих заданий.
Я мог бы объединить (1) - (5) в одно задание (и один этап) по соображениям производительности, но тогда в интерфейсе (который я знаю) нет указаний на то, как далеко зашла сборка ... ижурналы будут еще длиннее и неприятнее, даже если предел журнала будет увеличен.
Есть ли у кого-нибудь из вас какие-либо предложения относительно того, что я здесь упускаю / что мне следует делать здесь?