-
Notifications
You must be signed in to change notification settings - Fork 75
Fix: Очистка каталогов результатов allure перед формированием результатов #176
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Fix: Очистка каталогов результатов allure перед формированием результатов #176
Conversation
…водились старые значения
WalkthroughДобавлены предварительные удаления директорий отчётов (Allure, Cucumber, JUnit) — вычисление удалённых путей через FileUtils.getFilePath(...).getRemote(), логирование и вызов deleteDir перед инициализацией и перед запуском/публикацией тестов; остальная логика не изменена. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Jenkins as Jenkins Pipeline
participant Init as InitInfoBase.run
participant Steps as steps
participant FU as FileUtils
Jenkins->>Init: старт инициализации
Init->>Steps: env()
Init->>FU: getFilePath("$WORKSPACE/build/out/allure").getRemote()
FU-->>Init: allurePath (remote)
Init->>Steps: deleteDir(allurePath)
note right of Steps #DFF2BF: Очистка allure
Init->>FU: getFilePath("$WORKSPACE/build/out/cucumber").getRemote()
FU-->>Init: cucumberPath (remote)
Init->>Steps: deleteDir(cucumberPath)
note right of Steps #DFF2BF: Очистка cucumber
Init-->>Jenkins: продолжение стандартной инициализации
sequenceDiagram
autonumber
actor Jenkins as Jenkins Pipeline
participant Yax as Yaxunit.run
participant Steps as steps
participant FU as FileUtils
Jenkins->>Yax: запуск шага Yaxunit
Yax->>Steps: withEnv(logosConfig){...}
Yax->>FU: getFilePath("$WORKSPACE/build/out/allure").getRemote()
FU-->>Yax: allurePath (remote)
Yax->>Steps: deleteDir(allurePath)
note right of Steps #DFF2BF: Предочистка результатов Allure
Yax->>Steps: withCoverage{ выполнение тестов }
Steps-->>Jenkins: результаты тестов
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
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.
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
📒 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.
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)
}тогда и кописастить не надо будет. и посмотреть, можеть быть и параметр не нужен, а чистить всегда. по идее все, что должно переноситься между стейджами должно быть в стэше
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nixel2007 мне кажется стоит контролируемо очищать. Может быть так, что при следующем запуске (после изменения настроек) и стэш не будет отрабатывать по условиям, а артефакты от него останутся.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
У меня просто во всех сборках стоит очистка воркспейса, поэтому на такого рода проблемы почти не натыкаюсь
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А причём тут стэш, кстати?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мне не нравится. Работа с клинапом - это зона ответственности ci.
Предлагаю решать это средствами дженкинса.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
У меня просто во всех сборках стоит очистка воркспейса, поэтому на такого рода проблемы почти не натыкаюсь
@nixel2007 если всегда очищать , например УХ или ЕРП, то это значительное увеличение трафика и времени отработки CI. Каждая минута важна.
There was a problem hiding this 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
📒 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.
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
📒 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 при повторных запусках пайплайнов.
Исправлена ошибка, когда не были очищены старые результат allure в workspace при повторных запусках пайплайнов.