Обычно проблема отсутствия отладки частично решается тем, что в скриптовых пайплайнах оставляют только переменные окружения (те же credentials, к примеру) и пару тройку вызовов скриптов.
Эти скрипты должны одинаково хорошо выполняться как в Jenkins/TeamCity/etc, так и на локальной машине. Желательно писать скрипты, поддающиеся отладке (Gradle/Nuke/etc).
Иногда скрипты дробят на части и каждую часть вызывают в отдельном стейдже пайплайна Jenkins. Как мне кажется, это совсем не обязательно. Я вот, например, не стесняюсь вызывать один Target/Task/etc. В зависимостях этого таргета прописываю все, что нужно выполнить в этом пайплайне (сборку, тестирование с покрытием, анализ результатов в SonarQube и т.д.). Лог все равно останется структурированным, т.к. скрипт уже сам об этом позаботится.
Эти скрипты должны одинаково хорошо выполняться как в Jenkins/TeamCity/etc, так и на локальной машине. Желательно писать скрипты, поддающиеся отладке (Gradle/Nuke/etc).
Иногда скрипты дробят на части и каждую часть вызывают в отдельном стейдже пайплайна Jenkins. Как мне кажется, это совсем не обязательно. Я вот, например, не стесняюсь вызывать один Target/Task/etc. В зависимостях этого таргета прописываю все, что нужно выполнить в этом пайплайне (сборку, тестирование с покрытием, анализ результатов в SonarQube и т.д.). Лог все равно останется структурированным, т.к. скрипт уже сам об этом позаботится.