Skip to content

Comments

Fix: Очистка каталогов результатов allure перед формированием результатов#176

Open
Kyrales wants to merge 8 commits intofirstBitMarksistskaya:developfrom
Kyrales:fix/clear_allure_before
Open

Fix: Очистка каталогов результатов allure перед формированием результатов#176
Kyrales wants to merge 8 commits intofirstBitMarksistskaya:developfrom
Kyrales:fix/clear_allure_before

Conversation

@Kyrales
Copy link
Contributor

@Kyrales Kyrales commented Sep 8, 2025

Исправлена ошибка, когда не были очищены старые результат allure в workspace при повторных запусках пайплайнов.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 8, 2025

Walkthrough

Добавлены предварительные очистки директорий результатов тестов/отчётов и поддержка флага удаления при создании директорий: внедрена логика удаления Allure/Cucumber/JUnit папок перед выполнением шагов; расширен API исполнителя шагов новым перегруженным createDir(path, boolean).

Changes

Когорта / Файл(s) Описание
Шаги тестирования — предварительная очистка
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy, src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy
Добавлено вычисление удалённых путей результатов (Allure/Cucumber), логирование и удаление каталогов перед выполнением соответствующих шагов.
SyntaxCheck / SmokeTest — recreate report dirs
src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy, src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
При создании директорий отчётов передача флага удаления (createDir(path, true)) для предварительного удаления существующих директорий в ветках публикации JUnit/Allure.
Интерфейс и реализация исполнителя шагов
src/ru/pulsar/jenkins/library/IStepExecutor.groovy, src/ru/pulsar/jenkins/library/StepExecutor.groovy
Добавлен новый перегруженный метод createDir(String path, boolean deleteDir) в интерфейс и реализацию, делегирующий поведению шагов.
Глобальный step vars
vars/createDir.groovy
Функция call принимает необязательный параметр deleteDir = false; при true удаляет путь до создания.
Сборка
build.gradle.kts
Добавлен Maven-репозиторий https://repo.jenkins-ci.org/public/.
Тесты/документация интеграции
test/integration/README.md
Добавлен README с описанием интеграционных тестов и набора тестов; документация только.

Sequence Diagram(s)

(Пропущено — изменения не требуют диаграммы последовательностей по правилам.)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 минут

Possibly related PRs

Poem

🐰 Я лапкой мягкой чистку проведу,

Уборкой путь для отчётов найду.
Allure и JUnit — пустой шкаф для старья,
Пушистый порядок — начало дня! ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed Заголовок PR четко описывает основное изменение — очистку каталогов результатов allure перед формированием результатов, что полностью соответствует содержимому changeset.
Description check ✅ Passed Описание PR связано с изменениями в changeset и объясняет суть исправления: очистка старых результатов Allure при повторных запусках пайплайнов.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (1)

31-38: Небольшое дублирование и полезная идемпотентность

  • Повтор «очистка каталога + лог» для двух путей — можно вынести в небольшую утилиту cleanupDir(label, path) или пройтись списком путей.
  • Опционально: перед удалением проверять наличие (steps.fileExists(...)) или просто ловить ошибку, чтобы шаг оставался идемпотентным.

Пример компактной правки в пределах блока:

-Logger.println("Очистка каталога Allure: $workspaceAllure")
-steps.deleteDir(workspaceAllure)        
-String workspaceCucumber = FileUtils.getFilePath("${env.WORKSPACE}/build/out/cucumber").getRemote()
-Logger.println("Очистка каталога Cucumber: $workspaceCucumber")
-steps.deleteDir(workspaceCucumber)
+for (def p in [
+  [label: 'Allure',    path: FileUtils.getFilePath("${env.WORKSPACE}/build/out/allure").getRemote()],
+  [label: 'Cucumber',  path: FileUtils.getFilePath("${env.WORKSPACE}/build/out/cucumber").getRemote()],
+]) {
+  Logger.println("Очистка каталога ${p.label}: ${p.path}")
+  steps.deleteDir(p.path)
+}
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1)

69-72: Дублирование очистки Allure в InitInfoBase и Yaxunit

Очистка build/out/allure теперь выполняется и на init, и перед тестами. Это не ломает логику, но можно централизовать очистку (утилита/шаг) во избежание расхождений в будущем.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 169082f and fd627a9.

📒 Files selected for processing (2)
  • src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-27T05:31:27.548Z
Learnt from: CR
PR: firstBitMarksistskaya/jenkins-lib#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-27T05:31:27.548Z
Learning: Applies to test/unit/groovy/ru/pulsar/jenkins/library/**/*.groovy : Add or update unit tests for support code when adding new pipeline steps

Applied to files:

  • src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy
🧬 Code graph analysis (2)
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (1)
test/unit/groovy/ru/pulsar/jenkins/library/utils/FileUtilsTest.java (3)
  • FileUtilsTest (10-32)
  • BeforeEach (14-17)
  • Test (19-31)
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (2)
test/unit/groovy/ru/pulsar/jenkins/library/utils/FileUtilsTest.java (3)
  • FileUtilsTest (10-32)
  • BeforeEach (14-17)
  • Test (19-31)
test/unit/groovy/ru/pulsar/jenkins/library/steps/LoadExtensionsTest.java (3)
  • Test (30-65)
  • LoadExtensionsTest (23-66)
  • BeforeEach (25-28)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (3)
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (2)

9-9: Импорт FileUtils — ок

Импорт используется далее по коду.


31-38: Убрать проверку contract deleteDir — он поддерживает абсолютные пути
StepExecutor.deleteDir(String path) выполняет steps.dir(path) (поддерживает и абсолютные пути) и затем steps.deleteDir(), то есть вызов с getRemote() корректен.

src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1)

69-72: Проверьте контракт steps.deleteDir(path) для remote-пути

Здесь тоже передаётся абсолютный getRemote(). Убедитесь, что IStepExecutor.deleteDir работает именно с такими путями. В противном случае используйте FilePath.deleteRecursive() либо steps.dir('build/out/allure'){ steps.deleteDir() }.

Пример альтернативы:

FileUtils.getFilePath("${env.WORKSPACE}/build/out/allure").deleteRecursive()


def env = steps.env();

String workspaceAllure = FileUtils.getFilePath("$env.WORKSPACE/build/out/allure").getRemote()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот думаю, может быть в createDir добавить опциональный параметр с очисткой каталога? вызвать внутри что-то вроде

if (fileExists(directory)) {
  deleteDir(directory)
}

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

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nixel2007 мне кажется стоит контролируемо очищать. Может быть так, что при следующем запуске (после изменения настроек) и стэш не будет отрабатывать по условиям, а артефакты от него останутся.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У меня просто во всех сборках стоит очистка воркспейса, поэтому на такого рода проблемы почти не натыкаюсь

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А причём тут стэш, кстати?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне не нравится. Работа с клинапом - это зона ответственности ci.

Предлагаю решать это средствами дженкинса.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне не нравится. Работа с клинапом - это зона ответственности ci.

Предлагаю решать это средствами дженкинса.

@Segate-ekb ci может очищать это да, но и без очистки все должно быть корректно и нужные хвосты очищаться в виде артефактов от прошлого пайплайна. Библиотека должна работать максимально корректно без особых настроек ci.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У меня просто во всех сборках стоит очистка воркспейса, поэтому на такого рода проблемы почти не натыкаюсь

@nixel2007 если всегда очищать , например УХ или ЕРП, то это значительное увеличение трафика и времени отработки CI. Каждая минута важна.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy (1)

21-29: Добавьте юнит-тесты для SyntaxCheck
Проверьте, что при включённых publishToJUnitReport и publishToAllureReport вызываются deleteDir и createDir с ожидаемыми путями.

🧹 Nitpick comments (3)
src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy (3)

58-62: Очистка каталога JUnit перед генерацией — хорошо; добавьте явный лог.

Рекомендую логировать путь перед удалением для облегчения диагностики в логах сборки.

Примените патч:

 if (options.publishToJUnitReport) {
+    Logger.println("Очистка каталога JUnit отчётов: ${junitReportDir}")
     steps.deleteDir(junitReportDir) 
     steps.createDir(junitReportDir)
     command += " --junitpath $pathToJUnitReport"
 }

64-68: Очистка каталога Allure перед генерацией — хорошо; добавьте явный лог.

Аналогично JUnit, полезно видеть удаляемый путь в логах.

Примените патч:

 if (options.publishToAllureReport) {
+    Logger.println("Очистка каталога Allure результатов: ${allureReportDir}")
     steps.deleteDir(allureReportDir) 
     steps.createDir(allureReportDir)
     command += " --allure-results2 $allureReportDir"
 }

41-46: Использовать .getRemote() вместо FileUtils.getLocalPath()

В src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy замените:

- String junitReportDir = FileUtils.getLocalPath(pathToJUnitReport.getParent())
+ String junitReportDir = pathToJUnitReport.getParent().getRemote()- String allureReportDir = FileUtils.getLocalPath(pathToAllureReport.getParent())
+ String allureReportDir = pathToAllureReport.getParent().getRemote()

steps.deleteDir(String) корректно обрабатывает абсолютный путь из getRemote (см. аналогичное в Yaxunit и InitInfoBase).

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fd627a9 and 043e6e7.

📒 Files selected for processing (1)
  • src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-27T05:31:27.548Z
Learnt from: CR
PR: firstBitMarksistskaya/jenkins-lib#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-27T05:31:27.548Z
Learning: Applies to test/unit/groovy/ru/pulsar/jenkins/library/**/*.groovy : Add or update unit tests for support code when adding new pipeline steps

Applied to files:

  • src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy

@Kyrales
Copy link
Contributor Author

Kyrales commented Oct 3, 2025

@nixel2007 что решил по этому ПР? В принципе можно и в createDir ставить очистку . Штука актуальная.
Сейчас еще дополнил очистку в дымовых

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (1)

70-86: Рекомендуется добавить тесты для нового поведения очистки.

Изменения корректны, но стоит рассмотреть добавление или обновление unit-тестов для проверки нового поведения очистки директорий перед созданием отчётов.

Based on learnings.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 043e6e7 and b953fa6.

📒 Files selected for processing (1)
  • src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-27T05:31:27.548Z
Learnt from: CR
PR: firstBitMarksistskaya/jenkins-lib#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-27T05:31:27.548Z
Learning: Applies to test/unit/groovy/ru/pulsar/jenkins/library/**/*.groovy : Add or update unit tests for support code when adding new pipeline steps

Applied to files:

  • src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (2)
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (2)

71-71: LGTM! Правильная очистка старых результатов JUnit.

Добавление deleteDir(junitReportDir) перед созданием директории гарантирует удаление устаревших результатов тестов при повторных запусках пайплайна.


80-80: LGTM! Исправлена основная проблема из описания PR.

Добавление deleteDir(allureReportDir) перед созданием директории решает проблему накопления старых результатов Allure в workspace при повторных запусках пайплайнов.

@nixel2007
Copy link
Member

@Kyrales давай попробуем с флагом в createDir

# Conflicts:
#	src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy
…лчанию false) с проверкой существования и удалением каталога при необходимости
@Kyrales
Copy link
Contributor Author

Kyrales commented Jan 19, 2026

@Kyrales давай попробуем с флагом в createDir

@nixel2007 да, добавил в createDir() доп.параметр для удаления. Обновил ветку.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants