Skip to content
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

Сохранение ИБ в виде артефакта после выполнения всех шагов инциализации #149

Open
wants to merge 16 commits into
base: develop
Choose a base branch
from

Conversation

ovcharenko-di
Copy link
Contributor

fixes #139

Copy link
Contributor

coderabbitai bot commented Jan 17, 2025

Walkthrough

Изменения в проекте направлены на добавление новой функциональности архивации информационной базы (ИБ) с возможностью опционального сохранения в виде артефакта. Модифицированы несколько классов и функций для поддержки нового параметра archiveInfobase, который позволяет контролировать процесс архивации ИБ после инициализации. Также добавлены новые классы и свойства для управления настройками архивации.

Changes

Файл Изменения
src/ru/pulsar/jenkins/library/IStepExecutor.groovy Добавлены методы fileOperations и fileDeleteOperation, обновлен метод zip с параметром archive
src/ru/pulsar/jenkins/library/StepExecutor.groovy Добавлены методы fileOperations и fileDeleteOperation, перегружен метод zip с новым параметром archive
src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy Добавлено новое свойство archiveInfobase
src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy Добавлено новое свойство archiveInfobase
src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy Добавлен параметр archiveInfobase в nonMergeableSettings
src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy Добавлен новый класс ZipInfobase с методом run()
vars/pipeline1C.groovy Изменен вызов zipInfobase с передачей конфигурации
vars/zipInfobase.groovy Обновлена логика архивации с учетом новой конфигурации
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy Изменен путь для отчета Allure
src/JobConfigurationSchemaGenerator.java Изменено управление ошибками в main методе
src/ru/pulsar/jenkins/library/configuration/ArchiveInfobaseOptions.groovy Добавлен новый класс ArchiveInfobaseOptions
test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java Добавлена новая проверка в тесте ConfigurationReaderTest

Assessment against linked issues

Objective Addressed Explanation
Добавить параметр для сохранения ИБ в виде артефакта [#139]

Possibly related PRs

Poem

🐰 В мире Jenkins, где пайплайны течют,
Архивация ИБ теперь с опцией блещет!
Конфигурация проста, как морковка для зайца,
Артефакт готов, и код радостно пляшет! 🎉


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

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: 3

🧹 Nitpick comments (3)
src/ru/pulsar/jenkins/library/IStepExecutor.groovy (1)

92-93: Добавьте документацию для нового метода

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

+    /**
+     * Создает zip архив из указанной директории
+     * @param dir Директория для архивации
+     * @param zipFile Имя создаваемого архива
+     * @param glob Шаблон для выбора файлов
+     * @param archive Флаг сохранения архива как артефакта
+     */
     def zip(String dir, String zipFile, String glob, boolean archive)
src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy (1)

43-45: Дополните документацию параметра archiveInfobase

Текущее описание недостаточно информативно. Рекомендуется добавить подробности о назначении параметра и его влиянии на процесс.

     @JsonPropertyDescription("""
-    Сохранить базу после выполнения всех шагов инициализации
+    Сохранить базу после выполнения всех шагов инициализации.
+    При значении true:
+    * База будет сохранена как артефакт сборки
+    * Артефакт будет доступен для скачивания после завершения пайплайна
+    По умолчанию: false
     """)
src/ru/pulsar/jenkins/library/StepExecutor.groovy (1)

199-202: Реализация выглядит корректной!

Метод корректно реализует интерфейс и делегирует вызов в steps.zip. Было бы полезно добавить документацию для параметра archive, описывающую его назначение.

    @Override
+   /**
+    * @param archive если true, то архив будет сохранен как артефакт сборки
+    */
    def zip(String dir, String zipFile, String glob = '', boolean archive) {
        steps.zip dir: dir, zipFile: zipFile, glob: glob, overwrite: true, archive: archive
    }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 89e104f and 4a82c66.

⛔ Files ignored due to path filters (2)
  • resources/globalConfiguration.json is excluded by !**/*.json
  • resources/schema.json is excluded by !**/*.json
📒 Files selected for processing (6)
  • src/ru/pulsar/jenkins/library/IStepExecutor.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/StepExecutor.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1 hunks)
  • vars/pipeline1C.groovy (1 hunks)
  • vars/zipInfobase.groovy (1 hunks)
🔇 Additional comments (2)
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1)

85-85: Проверьте совместимость с существующими отчетами

Изменение имени файла с junit.xml на allure.xml может повлиять на существующие процессы и инструменты, которые ожидают файл с прежним именем.

✅ Verification successful

Изменение безопасно - это дополнительный отчет

Изменение не затрагивает существующий отчет junit.xml. Файл allure.xml создается как дополнительный отчет в отдельной директории, в то время как оригинальный junit.xml продолжает генерироваться в своем местоположении.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск использования старого имени файла в кодовой базе
rg -l "junit\.xml" --type groovy

Length of output: 85


Script:

#!/bin/bash
# Показать контекст использования junit.xml в файле
rg "junit\.xml" --type groovy -C 3

Length of output: 694

vars/pipeline1C.groovy (1)

147-147: Изменение корректно, но требуется проверка таймаута!

Передача конфигурации в метод zipInfobase позволяет контролировать процесс архивации через параметры конфигурации. Убедитесь, что значение таймаута timeoutOptions.zipInfoBase достаточно для архивации больших информационных баз.

Выполните следующий скрипт для проверки значения таймаута:

✅ Verification successful

Таймаут архивации настроен корректно!

Значение таймаута для операции архивации информационной базы установлено на 60 минут в глобальной конфигурации, что является достаточным для большинства случаев. При необходимости это значение может быть увеличено в конфигурации конкретной задачи.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Поиск определения таймаута для zipInfoBase
# Ожидаемый результат: Найти значение таймаута и убедиться, что оно достаточно большое

# Поиск определения timeoutOptions
rg -A 5 "timeoutOptions.*zipInfoBase"

Length of output: 517


Script:

#!/bin/bash
# Search for timeoutOptions definition and values
rg -g "!*.class" "timeoutOptions.*=|defaultTimeoutOptions" -A 5

# Also search for any yaml/json config files that might contain the timeout
fd -e yaml -e yml -e json --exec grep -l "timeoutOptions\|zipInfoBase" {}

Length of output: 960


Script:

#!/bin/bash
# Check schema and configuration files for timeout values
echo "=== Schema definition ==="
cat resources/schema.json | jq '.properties.timeoutOptions'

echo -e "\n=== Global configuration ==="
cat resources/globalConfiguration.json | jq '.timeoutOptions'

echo -e "\n=== Job configuration example ==="
cat test/unit/resources/jobConfiguration.json | jq '.timeoutOptions'

Length of output: 422


Script:

#!/bin/bash
# Look for zipInfoBase in configuration files
echo "=== Checking configuration files ==="
rg "zipInfoBase" resources/ test/unit/resources/

# Check the JobConfiguration class for default values
echo -e "\n=== Checking JobConfiguration class ==="
cat src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy

Length of output: 5524

vars/zipInfobase.groovy Outdated Show resolved Hide resolved
vars/zipInfobase.groovy Outdated Show resolved Hide resolved
resources/schema.json Outdated Show resolved Hide resolved
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: 3

♻️ Duplicate comments (2)
vars/zipInfobase.groovy (2)

5-9: ⚠️ Potential issue

Проверьте входные параметры на null.

Необходимо добавить валидацию входных параметров во избежание NullPointerException.

 def call(JobConfiguration config, String stageName) {
+    if (config == null) {
+        throw new IllegalArgumentException("Параметр config не может быть null")
+    }
+    if (stageName == null || stageName.trim().isEmpty()) {
+        throw new IllegalArgumentException("Параметр stageName не может быть null или пустым")
+    }
     ContextRegistry.registerDefaultContext(this)

8-9: ⚠️ Potential issue

Добавьте обработку ошибок.

Необходимо добавить try-catch блок для обработки возможных ошибок при выполнении.

-    def zipInfobase = new ZipInfobase(config, stageName)
-    zipInfobase.run()
+    try {
+        def zipInfobase = new ZipInfobase(config, stageName)
+        zipInfobase.run()
+    } catch (Exception e) {
+        error "Ошибка при архивации информационной базы: ${e.message}"
+    }
🧹 Nitpick comments (4)
src/ru/pulsar/jenkins/library/configuration/ArchiveInfobaseOptions.groovy (1)

19-28: Рекомендуется добавить документацию к классу

Хотя реализация toString() корректна, было бы полезно добавить общее описание класса через JavaDoc, объясняющее его назначение и использование.

src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy (2)

30-35: Рефакторинг определения имени архива

Рекомендуется вынести логику формирования имени архива в отдельный метод и избавиться от магических строк.

+    private static String getArchiveName(String stage) {
+        final String BASE_ARCHIVE_NAME = "1Cv8.1CD"
+        return stage == 'initInfoBase' 
+            ? "${BASE_ARCHIVE_NAME}.zip" 
+            : "${BASE_ARCHIVE_NAME}.${stage}.zip"
+    }
+
     def run() {
         // ...
-        def archiveName
-        if (stage == 'initInfoBase') {
-            archiveName = "1Cv8.1CD.zip"
-        } else {
-            archiveName = "1Cv8.1CD.${stage}.zip"
-        }
+        def archiveName = getArchiveName(stage)

37-44: Упростите логику проверки условий архивации

Текущая реализация условий архивации может быть упрощена с использованием более компактного синтаксиса.

-        def archiveInfobase = false
-        if (archiveInfobaseOptions.onAlways
-                || (archiveInfobaseOptions.onFailure && (currentResult == Result.FAILURE || currentResult == Result.ABORTED))
-                || (archiveInfobaseOptions.onUnstable && currentResult == Result.UNSTABLE)
-                || (archiveInfobaseOptions.onSuccess && currentResult == Result.SUCCESS)) {
-            archiveInfobase = true
-        }
+        def archiveInfobase = archiveInfobaseOptions.onAlways
+            || (archiveInfobaseOptions.onFailure && (currentResult in [Result.FAILURE, Result.ABORTED]))
+            || (archiveInfobaseOptions.onUnstable && currentResult == Result.UNSTABLE)
+            || (archiveInfobaseOptions.onSuccess && currentResult == Result.SUCCESS)
test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java (1)

68-68: Расширьте покрытие тестами

Рекомендуется добавить проверки для всех свойств archiveInfobase (onSuccess, onFailure, onUnstable), а не только onAlways.

     assertThat(jobConfiguration.getInitInfoBaseOptions().getArchiveInfobase().getOnAlways()).isTrue();
+    assertThat(jobConfiguration.getInitInfoBaseOptions().getArchiveInfobase().getOnSuccess()).isFalse();
+    assertThat(jobConfiguration.getInitInfoBaseOptions().getArchiveInfobase().getOnFailure()).isFalse();
+    assertThat(jobConfiguration.getInitInfoBaseOptions().getArchiveInfobase().getOnUnstable()).isFalse();
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4a82c66 and f77ac27.

⛔ Files ignored due to path filters (3)
  • resources/globalConfiguration.json is excluded by !**/*.json
  • resources/schema.json is excluded by !**/*.json
  • test/unit/resources/jobConfiguration.json is excluded by !**/*.json
📒 Files selected for processing (12)
  • src/JobConfigurationSchemaGenerator.java (1 hunks)
  • src/ru/pulsar/jenkins/library/IStepExecutor.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/StepExecutor.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/configuration/ArchiveInfobaseOptions.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy (1 hunks)
  • test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java (1 hunks)
  • vars/pipeline1C.groovy (2 hunks)
  • vars/zipInfobase.groovy (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/JobConfigurationSchemaGenerator.java
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/ru/pulsar/jenkins/library/IStepExecutor.groovy
  • src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy
  • src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy
  • src/ru/pulsar/jenkins/library/StepExecutor.groovy
🔇 Additional comments (5)
src/ru/pulsar/jenkins/library/configuration/ArchiveInfobaseOptions.groovy (1)

7-18: Структура класса выглядит правильной!

Класс хорошо структурирован с четкими флагами для различных сценариев архивации. Описания свойств понятны и информативны.

src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy (1)

19-22: Корректное добавление нового свойства

Свойство archiveInfobase добавлено правильно, с понятным описанием на русском языке.

src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy (1)

72-72: Добавление archiveInfobase в список nonMergeableSettings выглядит корректным.

Настройка archiveInfobase не должна объединяться между конфигурациями, поэтому её добавление в список nonMergeableSettings является правильным решением.

vars/pipeline1C.groovy (2)

147-147: Обновление вызова zipInfobase выглядит корректным.

Передача параметров config и 'initInfoBase' соответствует новой сигнатуре метода.


241-249: Добавление архивации в BDD этап реализовано корректно.

Новый этап архивации:

  • Имеет корректный таймаут
  • Использует правильные параметры при вызове zipInfobase
  • Расположен в логичном месте после выполнения BDD сценариев

"archiveInfobase": {
"onAlways": false,
"onFailure": true,
"onUnstable": false,
Copy link
Member

Choose a reason for hiding this comment

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

тут возможно имеет смысл выставить в true, т.к. при падении тестов стейдж помечается как UNSTABLE, а не FAILED. ну или по крайней мере расписать это в документации.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

согласен, выставил true тут и в initInfobase

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 Author

Choose a reason for hiding this comment

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

вырубил

<поднятьворотачутьчуть.jpg>

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 (2)
README.md (2)

171-172: Уточните условия сохранения ИБ по умолчанию.

Текущее описание поведения по умолчанию не полностью соответствует возможностям функционала. Предлагаю дополнить информацию о том, что это поведение можно изменить через параметры onAlways, onFailure, onUnstable, onSuccess.

-  * На этапах `initInfobase` и `bdd` база сохраняется в виде артефакта при статусе `UNSTABLE` и `FAILURE`
+  * На этапах `initInfobase` и `bdd` база по умолчанию сохраняется в виде артефакта при статусах `UNSTABLE` и `FAILURE`. Это поведение можно изменить через параметры `onAlways`, `onFailure`, `onUnstable`, `onSuccess` в соответствующих секциях конфигурации.

318-325: Дополните документацию примером конфигурации.

Для лучшего понимания функционала рекомендуется добавить пример конфигурации с различными вариантами настройки параметров сохранения ИБ.

 * для шага `initInfoBase`: '1Cv8.1CD.zip' 
 * для шага `bdd`: '1Cv8.1CD.bdd.zip'
+
+Пример конфигурации:
+
+```json
+"initInfobase": {
+    "archiveInfobase": {
+        "onAlways": false,
+        "onFailure": true,
+        "onUnstable": true,
+        "onSuccess": false
+    }
+},
+"bdd": {
+    "archiveInfobase": {
+        "onAlways": false,
+        "onFailure": true,
+        "onUnstable": true,
+        "onSuccess": false
+    }
+}
+```
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2469669 and 845e70f.

⛔ Files ignored due to path filters (1)
  • resources/globalConfiguration.json is excluded by !**/*.json
📒 Files selected for processing (2)
  • README.md (3 hunks)
  • src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy

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 (2)
src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy (2)

30-35: Вынесите имена архивов в константы

Строковые литералы "1Cv8.1CD.zip" и "1Cv8.1CD.${stage}.zip" лучше вынести в константы класса для улучшения поддерживаемости кода.

 class ZipInfobase implements Serializable {
+    private static final String DEFAULT_ARCHIVE_NAME = "1Cv8.1CD.zip"
+    private static final String STAGE_ARCHIVE_PATTERN = "1Cv8.1CD.%s.zip"
     
     private final JobConfiguration config
     private final String stage

38-44: Упростите логику определения необходимости архивации

Сложное условие лучше вынести в отдельный метод для улучшения читаемости.

+    private boolean shouldArchiveInfobase(ArchiveInfobaseOptions options, Result currentResult) {
+        return options.onAlways
+                || (options.onFailure && (currentResult == Result.FAILURE || currentResult == Result.ABORTED))
+                || (options.onUnstable && currentResult == Result.UNSTABLE)
+                || (options.onSuccess && currentResult == Result.SUCCESS)
+    }
+
     def run() {
         // ...
-        def archiveInfobase = false
-        if (archiveInfobaseOptions.onAlways
-                || (archiveInfobaseOptions.onFailure && (currentResult == Result.FAILURE || currentResult == Result.ABORTED))
-                || (archiveInfobaseOptions.onUnstable && currentResult == Result.UNSTABLE)
-                || (archiveInfobaseOptions.onSuccess && currentResult == Result.SUCCESS)) {
-            archiveInfobase = true
-        }
+        def archiveInfobase = shouldArchiveInfobase(archiveInfobaseOptions, currentResult)
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 845e70f and 1eafa08.

📒 Files selected for processing (1)
  • src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy (1 hunks)
🔇 Additional comments (3)
src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy (3)

1-19: Структура класса реализована корректно!

Класс правильно реализует Serializable для совместимости с Jenkins pipeline, имеет четкую структуру и необходимые зависимости.


53-67: Обработка ошибок реализована корректно!

Метод правильно обрабатывает исключения и возвращает значения по умолчанию при возникновении ошибок. Предыдущие замечания по обработке ошибок были успешно исправлены.


49-50: Добавьте проверку существования директории build/ib

Перед выполнением архивации следует проверить существование директории build/ib.

+        if (!steps.fileExists('build/ib')) {
+            throw new IllegalStateException("Директория build/ib не существует")
+        }
         steps.zip('build/ib', archiveName, '1Cv8.1CD', archiveInfobase)
         steps.stash(archiveName, archiveName, false)
✅ Verification successful

Подтверждаю необходимость проверки существования директории build/ib

Предложенное изменение корректно, так как:

  • Директория build/ib является критически важной для работы pipeline
  • Ранняя проверка существования директории позволит получить более понятное сообщение об ошибке
  • Изменение соответствует существующим практикам в кодовой базе
🏁 Scripts executed

The following scripts were executed for the analysis:

Error: No shell scripts found


Script:

#!/bin/bash
# Search for fileExists usage patterns
ast-grep --pattern 'steps.fileExists($_)'

# Search for build/ib references
rg "build/ib" -B 2 -A 2

# Search for similar zip operations
ast-grep --pattern 'steps.zip($$$)'

Length of output: 8875

@@ -237,6 +237,16 @@ void call() {
}
}
}

stage('Архивация ИБ') {
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 Author

Choose a reason for hiding this comment

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

думал об этом, но лично у меня дымовые и юниты выполняются в транзакции, поэтому сохранять ИБ после этих этапов нет смысла

я посчитал, что у большинства пользователей библиотеки ситуация аналогичная (могу ошибаться)

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)
README.md (1)

317-324: Предлагаю улучшить документацию новой функциональности.

Раздел содержит базовую информацию, но может быть улучшен для большей полезности пользователям.

Предлагаю добавить:

  1. Пример конфигурации в формате JSON
  2. Описание всех доступных статусов сборки
  3. Информацию о том, где искать сохраненные артефакты в интерфейсе Jenkins
 ## Сохранение ИБ в виде артефакта сборки

 Параметры `initInfobase` -> `archiveInfobase` и `bdd` -> `archiveInfobase` отвечают за сохранение информационной базы в виде артефакта сборки после выполнения соответствующих этапов.
 Можно управлять тем, при каких статусах сборки ИБ будет сохранена, см. `onAlways`, `onFailure`, `onUnstable`, `onSuccess`.

 Имя файла формируется следующим образом:
 * для шага `initInfoBase`: '1Cv8.1CD.zip' 
 * для шага `bdd`: '1Cv8.1CD.bdd.zip'
+
+### Пример конфигурации
+
+```json
+{
+    "initInfobase": {
+        "archiveInfobase": {
+            "onFailure": true,
+            "onUnstable": true
+        }
+    },
+    "bdd": {
+        "archiveInfobase": {
+            "onAlways": true
+        }
+    }
+}
+```
+
+### Статусы сборки
+
+* `onAlways` - сохранять при любом статусе сборки
+* `onFailure` - сохранять только при падении сборки
+* `onUnstable` - сохранять при нестабильном статусе (например, при падении тестов)
+* `onSuccess` - сохранять только при успешной сборке
+
+### Доступ к артефактам
+
+Сохраненные артефакты доступны в интерфейсе Jenkins на странице сборки во вкладке "Артефакты".
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1eafa08 and 385bf6a.

⛔ Files ignored due to path filters (1)
  • resources/globalConfiguration.json is excluded by !**/*.json
📒 Files selected for processing (1)
  • README.md (3 hunks)
🔇 Additional comments (2)
README.md (2)

54-54: Корректное добавление новой возможности в список.

Добавление возможности сохранения информационной базы логично дополняет существующий список возможностей библиотеки.


171-171: Корректное указание поведения по умолчанию.

Явное указание того, что по умолчанию информационная база не сохраняется, помогает пользователям понять базовое поведение системы.

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.

Сохранять ИБ после инициализации в виде артефакта (опция)
2 participants