Fix: Архивировать результирующие файлы 1Cv8.1CD только используемые#175
Fix: Архивировать результирующие файлы 1Cv8.1CD только используемые#175Kyrales wants to merge 5 commits into
Conversation
… или возникла необходимость по ошибке с помещением в stash
WalkthroughВ ZipInfobase.run() добавлено условие: операции zip и stash выполняются только при stage == 'initInfoBase' или если archiveInfobase == true. Логика формирования имени архива сохранена: для initInfoBase — "1Cv8.1CD.zip", иначе — "1Cv8.1CD.{stage}.zip". Объявления публичных сущностей не менялись. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Jenkins as Jenkins Pipeline
participant Zip as ZipInfobase.run
participant FS as FS
participant Stash as Jenkins Stash
Jenkins->>Zip: run(stage, archiveInfobase)
Zip->>FS: delete existing archive (если есть)
alt stage == "initInfoBase"
Zip->>FS: zip 1Cv8.1CD -> 1Cv8.1CD.zip
Zip->>Stash: stash archive
else archiveInfobase == true
Zip->>FS: zip 1Cv8.1CD -> 1Cv8.1CD.{stage}.zip
Zip->>Stash: stash archive
else
Note over Zip: Пропуск zip/stash
end
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested reviewers
Poem
✨ Finishing Touches🧪 Generate unit tests
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: 0
🧹 Nitpick comments (1)
src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy (1)
37-44: Комментарий про область действия опции вводит в заблуждение.Сейчас флаг далее влияет не только на “сохранение артефакта”, но и на сам факт выполнения zip/stash (кроме
initInfoBase). Уточните комментарий, чтобы будущие изменения не поломали поведение по недопониманию.- // опция отвечает только за то, будет ли файл сохранен в виде артефакта + // Внимание: вычисленный ниже флаг управляет сохранением как артефакта + // и одновременно служит триггером выполнения zip/stash (кроме initInfoBase)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy(1 hunks)
⏰ 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 (1)
src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy (1)
49-53: Добавить логирование и разделить флаги архивирования и stash.
Вынести условие вshouldZipAndStash, логировать текущееstageиarchiveInfobaseи, при необходимости, ввести отдельный флаг для stash, чтобы избежать нежелательного stash внеinitInfoBase.
|
Не понимаю, откуда архивирование всего подряд? Основная функциональность этого шага - помещать базу в стэш. вызывается он только из тех мест, где нужно базу потом доставать из стэша. необходимость дополнительного прикладывания зипа как архив тоже вычисляется внутри самого шага. |
@nixel2007 например вариант, если без моего исправления по BDD проверке: В моем коде это исправлено: |
|
ага, я понял. тут есть небольшая проблема. изначально шаг предназначался для запихивания базы в стэш, для последующего анстэша, если это надо будет. потом в него добавился флаг необходимости добавления базы в артефакты. с текущей доработкой помимо изменения поведения по прикладыванию зипа в артефакты так же меняется поведения стэша - необходимость стэша явно зашита в коде по условию архивации или конкретно этапе, что связывает этот универсальный шаг с конкретной логикой, которая может быть заложена в других местах пайплайна. я согласен с необходимостью доработки, но предлагаю чуть развернуть управление - пускай pipeline1C решает, нужно ли добавлять базу в стэш. что-нибудь типа доп параметра doStash. когда он передан как true (из ветки инициализации базы), тогда база добавляется в стэш в любом случае, а в артефакты - по текущей логике с определением currentResult и настроек. если флаг передан как false, то в стэш оно не кладется. Как тебе идея? |
|
А вы не хотите выделить сбор артефактов в отдельный блок в настройках? Зато в итоге можно будет сделать сохранение не только дт, но и cf, cfe например |
@nixel2007 не сильно ли большое усложнение? Сейчас корректировка минимальна и решает конкретную задачу. Мне кажется в артефактах дженкинса база врятли вообще кому нить понадобится и плюс размер Дженкинса как правило не большой резервируется на виртуальных серверах. |
Я регулярно доставал базу из артефактов на анализ падения тестов на VA. При наличии ЖР в аллюре - это удобный инструмент получался |
|
@coderabbitai посмотри работу vars/pipeline1c.groovy и подчиненных файлов. распиши все варианты, в которых информационная база будет или не будет:
|
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: Length of output: 26607 🏁 Script executed: Length of output: 16524 🏁 Script executed: Length of output: 14619
Когда вызывается
|
| Место вызова | Параметр stage |
Имя архива | Условие вызова |
|---|---|---|---|
| После «Инициализация ИБ» (Line 147) | 'initInfoBase' |
1Cv8.1CD.zip |
Всегда, если needInfoBase() = true |
| После «BDD сценарии» (Line 246) | 'bdd' |
1Cv8.1CD.bdd.zip |
Только если stageFlags.bdd = true |
Для syntaxCheck, smoke, yaxunit — zipInfobase не вызывается вообще. Все эти этапы лишь делают unzipInfobase(), который забирает стэш 1Cv8.1CD.zip (от initInfoBase).
Логика внутри ZipInfobase.run() (PR-ветка)
// archiveInfobase = true, если выполняется хотя бы одно условие из настроек:
// onAlways || (onFailure && FAILURE/ABORTED) || (onUnstable && UNSTABLE) || (onSuccess && SUCCESS)
// По умолчанию все флаги = false → archiveInfobase = false
if (stage == 'initInfoBase' || archiveInfobase) {
steps.zip('build/ib', archiveName, '1Cv8.1CD', archiveInfobase)
// ↑ archive: archiveInfobase — определяет, попадёт ли файл в артефакты Jenkins
steps.stash(archiveName, archiveName, false)
}Все варианты поведения
Этап initInfoBase (stage = 'initInfoBase')
Условие stage == 'initInfoBase' — всегда true, поэтому:
| Результат | |
|---|---|
| Zip-файл создаётся | ✅ Всегда |
| Помещается в stash | ✅ Всегда (1Cv8.1CD.zip) — это требуется для bdd/smoke/yaxunit/syntaxCheck |
| Помещается в артефакты | Зависит от initInfoBaseOptions.archiveInfobase: |
→ все флаги false (по умолчанию) |
❌ Не архивируется |
→ onAlways = true |
✅ Всегда |
→ onSuccess = true |
✅ Только при SUCCESS |
→ onFailure = true |
✅ Только при FAILURE / ABORTED |
→ onUnstable = true |
✅ Только при UNSTABLE |
Этап bdd (stage = 'bdd')
Условие stage == 'initInfoBase' — false, управление полностью через archiveInfobase:
| Результат | |
|---|---|
| Zip-файл создаётся | archiveInfobase = true |
| Помещается в stash | archiveInfobase = true (1Cv8.1CD.bdd.zip) |
→ все флаги false (по умолчанию) |
❌ Ни zip, ни stash не создаются |
→ onAlways = true |
✅ Zip + stash + артефакт всегда |
→ onSuccess = true |
✅ Только при SUCCESS |
→ onFailure = true |
✅ Только при FAILURE / ABORTED |
→ onUnstable = true |
✅ Только при UNSTABLE |
| Помещается в артефакты | Только если archiveInfobase = true (то же условие) |
⚠️ Ключевое наблюдение:1Cv8.1CD.bdd.zipни в одном из последующих этапов пайплайна не используется (unzipInfobaseвсегда берёт только1Cv8.1CD.zip). Т.е. стэш дляbddнужен исключительно для сохранения в артефакты — для ручного анализа падений. С текущим PR приarchiveInfobase=false(дефолт) этот стэш не создаётся, что ломает возможность достать базу на анализ (как раз тот кейс, о котором говорил@nixel2007).
Этапы syntaxCheck, smoke, yaxunit
| Результат | |
|---|---|
| Zip-файл создаётся | ❌ zipInfobase не вызывается |
| Помещается в stash | ❌ Не помещается |
| Помещается в артефакты | ❌ Не помещается |
Итог по проблеме
Предложение @nixel2007 с параметром doStash решает именно это расхождение: steps.zip() вызывается по условию archiveInfobase || doStash, а steps.stash() — только по doStash. Тогда для initInfoBase всегда передаётся doStash=true, а для bdd — тоже true (если нужна возможность анализа базы), при этом попадание в артефакты управляется отдельно через archiveInfobase.
🧠 Learnings used
Learnt from: CR
Repo: firstBitMarksistskaya/jenkins-lib PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-27T05:31:27.548Z
Learning: Applies to vars/pipeline1C.groovy : Review and update the main pipeline flow in vars/pipeline1C.groovy when modifying overall pipeline logic
Learnt from: nixel2007
Repo: firstBitMarksistskaya/jenkins-lib PR: 170
File: build.gradle.kts:29-32
Timestamp: 2025-08-26T19:41:49.802Z
Learning: В репозитории firstBitMarksistskaya/jenkins-lib используется sparse-checkout конфигурация, которая исключает .jar файлы (!**/*.jar). Это может привести к тому, что gradle-wrapper.jar отсутствует в рабочем дереве, даже если он существует в репозитории.
There was a problem hiding this comment.
Pull request overview
Оптимизация Jenkins shared library шага архивации ИБ 1C: zip/stash теперь выполняются только когда архив действительно нужен (для initInfoBase или при включенной опции архивации по результату), чтобы не тратить время на лишние операции.
Changes:
- Добавлено условие, ограничивающее выполнение
zip()/stash()для не-initInfoBaseэтапов. - Сохранено обязательное создание/stash архива для
initInfoBase, чтобы последующие этапы могли распаковать ИБ.
| if (stage == 'initInfoBase' | ||
| || archiveInfobase) { | ||
| steps.zip('build/ib', archiveName, '1Cv8.1CD', archiveInfobase) | ||
| steps.stash(archiveName, archiveName, false) | ||
| } |
| if (stage == 'initInfoBase' | ||
| || archiveInfobase) { | ||
| steps.zip('build/ib', archiveName, '1Cv8.1CD', archiveInfobase) | ||
| steps.stash(archiveName, archiveName, false) | ||
| } |
Архивировать результирующие файлы 1Cv8.1CD только, в случае если это была инициализация базы или возникла необходимость отмеченная в опции с помещением в stash.
Сейчас все подряд архивирует после отработки этапа и тратится время на это, а архив не используется.