2014-12-15 3 views
0

У меня возникла проблема при запуске TeamCity с тремя шагами градации.Перекодировка избыточного исходного кода

Этапы: сборка, тестирование, загрузка архивов.

Gradle перекомпилирует исходный код при каждом выполнении шага (кажется, что он должен - каждый запуск выполняется отдельно) - который заканчивается в общей сложности минут. Когда задачи выполняются за один шаг, задача только минут.

Большая часть выхода журнала в «Test» и «Загрузить архив» шаги уточненного

:project-api:compileJava UP-TO-DATE 

, но она все еще занимает 2 минуты, чтобы сделать все излишние действия в «шаге Загрузить», перед тем он действительно начинает загружать артефакты.

Я не могу просто настроить задачи «зависит от», потому что иногда «Загрузить» можно сделать без «теста» и т. Д. Я попытался увеличить resolutionStrategy.cacheChangingModulesFor, но кажется, что это не вариант.

Есть ли способ избежать этих накладных расходов из раскола выполнения задачи?

+0

Я думаю, что проблема заключается в трех этапах сборки TC. Я считаю, что TC создает новый рабочий каталог для каждого шага сборки, эффективно отрицая любую поддержку инкрементной сборки, предоставляемую Gradle. Почему бы не объединиться в один шаг сборки TC, который выполняет все три задачи? По существу, создайте шаг сборки, аналогичный выполнению команды «gradle assemble test uploadArchives» из командной строки. –

+0

@MarkVieira проблема Gradle не соответствует порядку исполнения в моем случае. У меня многопроектная градиентная сборка. Когда я выполняю эти команды за один шаг, я вижу, что содержимое некоторых модулей загружается до тестирования других модулей и так далее. Вероятно, это вызвано параллельным выполнением градиента. – AdamSkywalker

+1

Это связано с тем, как Gradle создает график зависимости задачи. Если вы хотите, чтобы все протестированные проекты были загружены, вы можете сделать это через зависимости задач. Посмотрите на [эту тему] (http://forums.gradle.org/gradle/topics/how-do-i-run-tests-in-all-subprojects-before-uploading-any) для решения. –

ответ

0

Как уже упоминалось в комментариях, проблема вызвана разделением шагов сборки TeamCity - выполнение каждого шага изолировано, поэтому Gradle не может использовать кэшированную информацию из предыдущих шагов.

Я решил это, объединив эти три шага сборки на одном этапе сборки и добавив надлежащее отношение dependsOn. Как вы могли видеть, я хотел избежать зависимости от Upload до Test, но в этом случае это было невозможно.

Смежные вопросы