Fix: Очистка каталогов результатов allure перед формированием результатов#176
Fix: Очистка каталогов результатов allure перед формированием результатов#176Kyrales wants to merge 8 commits intofirstBitMarksistskaya:developfrom
Conversation
…водились старые значения
WalkthroughДобавлены предварительные очистки директорий результатов тестов/отчётов и поддержка флага удаления при создании директорий: внедрена логика удаления Allure/Cucumber/JUnit папок перед выполнением шагов; расширен API исполнителя шагов новым перегруженным createDir(path, boolean). Changes
Sequence Diagram(s)(Пропущено — изменения не требуют диаграммы последовательностей по правилам.) Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 минут Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
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. Comment |
There was a problem hiding this comment.
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
📒 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() |
There was a problem hiding this comment.
вот думаю, может быть в createDir добавить опциональный параметр с очисткой каталога? вызвать внутри что-то вроде
if (fileExists(directory)) {
deleteDir(directory)
}тогда и кописастить не надо будет. и посмотреть, можеть быть и параметр не нужен, а чистить всегда. по идее все, что должно переноситься между стейджами должно быть в стэше
There was a problem hiding this comment.
@nixel2007 мне кажется стоит контролируемо очищать. Может быть так, что при следующем запуске (после изменения настроек) и стэш не будет отрабатывать по условиям, а артефакты от него останутся.
There was a problem hiding this comment.
У меня просто во всех сборках стоит очистка воркспейса, поэтому на такого рода проблемы почти не натыкаюсь
There was a problem hiding this comment.
Мне не нравится. Работа с клинапом - это зона ответственности ci.
Предлагаю решать это средствами дженкинса.
There was a problem hiding this comment.
Мне не нравится. Работа с клинапом - это зона ответственности ci.
Предлагаю решать это средствами дженкинса.
@Segate-ekb ci может очищать это да, но и без очистки все должно быть корректно и нужные хвосты очищаться в виде артефактов от прошлого пайплайна. Библиотека должна работать максимально корректно без особых настроек ci.
There was a problem hiding this comment.
У меня просто во всех сборках стоит очистка воркспейса, поэтому на такого рода проблемы почти не натыкаюсь
@nixel2007 если всегда очищать , например УХ или ЕРП, то это значительное увеличение трафика и времени отработки CI. Каждая минута важна.
There was a problem hiding this comment.
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
📒 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
|
@nixel2007 что решил по этому ПР? В принципе можно и в createDir ставить очистку . Штука актуальная. |
There was a problem hiding this comment.
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
📒 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 при повторных запусках пайплайнов.
|
@Kyrales давай попробуем с флагом в createDir |
# Conflicts: # src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy
…лчанию false) с проверкой существования и удалением каталога при необходимости
@nixel2007 да, добавил в createDir() доп.параметр для удаления. Обновил ветку. |
Исправлена ошибка, когда не были очищены старые результат allure в workspace при повторных запусках пайплайнов.