Skip to content

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) — вычисление удалённых путей через FileUtils.getFilePath(...).getRemote(), логирование и вызов deleteDir перед инициализацией и перед запуском/публикацией тестов; остальная логика не изменена.

Changes

Cohort / File(s) Summary
Init cleanup in InitInfoBase
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy
Добавлен импорт FileUtils; при включённых init-шагах получено env, вычислены удалённые пути для $WORKSPACE/build/out/allure и $WORKSPACE/build/out/cucumber через FileUtils.getFilePath(...).getRemote(), выполнено логирование и удаление этих директорий перед дальнейшей инициализацией.
Pre-test cleanup in Yaxunit
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy
Внутри withEnv(logosConfig) вычисляется удалённый путь результатов Allure через FileUtils.getFilePath("$env.WORKSPACE/build/out/allure").getRemote(), логируется сообщение об очистке и вызывается deleteDir перед запуском withCoverage{...}.
Report dir cleanup in SyntaxCheck
src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy
Перед публикацией в JUnit и Allure добавлены удаления соответствующих папок (junitReportDir и allureReportDir) для обеспечения чистого состояния отчётов.
Report dir cleanup in SmokeTest
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
Добавлены вызовы deleteDir(junitReportDir) и deleteDir(allureReportDir) перед созданием соответствующих директорий при включённых publishToJUnitReport/publishToAllureReport.

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: продолжение стандартной инициализации
Loading
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: результаты тестов
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

Заяц в пайплайне весело шепчет:
«Пути пусты, отчёты чисты!»
Allure смел, Cucumber гуляет,
Тесты бегут — мука пропадает.
🐇✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed Заголовок чётко и кратко отражает основное изменение, а именно добавление очистки каталогов результатов Allure перед формированием отчётов, что соответствует содержимому Pull Request.
Description Check ✅ Passed Описание Pull Request напрямую соответствует внесённым изменениям, так как объясняет исправление ошибки, связанной с неочисткой старых результатов Allure при повторных запусках, и не выходит за рамки контекста изменений.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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 при повторных запусках пайплайнов.

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.

4 participants