1
0
mirror of https://github.com/firstBitMarksistskaya/jenkins-lib.git synced 2025-08-25 20:09:25 +02:00

add edt-ripper

This commit is contained in:
Dima
2024-07-24 11:37:47 +03:00
parent 337d1ee1e5
commit fcb233e6df
5 changed files with 75 additions and 19 deletions

View File

@@ -21,7 +21,7 @@
1. Для шага подготовки требуется любой агент с меткой `agent`.
1. Для запуска шага анализа SonarQube требуется агент с меткой `sonar`.
1. Для запуска шагов, работающих с EDT (валидация, трансформация формата исходников) требуется агент с меткой `edt` (если используется несколько версий EDT необходимо к метке добавить версию, например `edt@2021.3.4:x86_64`) и агент с меткой `oscript`, на котором глобально установлена библиотека [stebi](https://github.com/Stepa86/stebi) версии 1.9.1 или новее.
1. Для запуска шагов, работающих с EDT (валидация, трансформация формата исходников) требуется агент с меткой `edt` (если используется несколько версий EDT необходимо к метке добавить версию, например `edt@2021.3.4:x86_64`) и агент с меткой `oscript`, на котором глобально установлена библиотека [stebi](https://github.com/Stepa86/stebi) или [edt-ripper](https://github.com/bia-technologies/edt_ripper).
1. Для запуска шагов, работающих с 1С (подготовка, синтаксический контроль и т.д.) требуется агент с меткой, совпадающей со значением в поле `v8version` файла конфигурации.
1. В качестве ИБ используется файловая база, создаваемая в каталоге `./build/ib`. При необходимости вы можете создать пользователей на фазе инициализации ИБ.
@@ -38,7 +38,7 @@
1. Запуск BDD сценариев с сохранением результатов в формате Allure.
1. Запуск юнит-тестов с помощью фреймворка YAXUnit с сохранением результатов в формате jUnit и Allure.
1. Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
1. Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
1. Запуск валидации проекта средствами EDT и конвертация отчета в форматах BSL или Generic Issue.
1. Запуск статического анализа для SonarQube.
1. Публикация результатов junit и Allure в интерфейс Jenkins.
1. Рассылка результатов сборки на почту и в Telegram.
@@ -148,7 +148,7 @@ pipeline1C()
* Если в репозитории существует файл `./tools/syntax-check-exception-file.txt`, то команде запуска синтаксического контроля конфигурации данный файл будет передаваться как файл с исключениями сообщений об ошибках (параметр `--exception-file`) (`syntaxCheck` -> `exceptionFile`).
* Конфигурационный файл по умолчанию уже содержит ряд "режимов проверки" для синтаксического контроля конфигурации (`syntaxCheck` -> `checkModes`).
* Трансформация результатов валидации EDT:
* По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком) (параметры `resultsTransform` -> `removeSupport` и `resultsTransform` -> `supportLevel`).
* При использовании stebi по умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком) (параметры `resultsTransform` -> `removeSupport` и `resultsTransform` -> `supportLevel`).
* Анализ SonarQube:
* Предполагается наличие единственной настройки `SonarQube installation` (`sonarqube` -> `sonarQubeInstallation`).
* Используется `sonar-scanner` из переменной окружения `PATH` (`sonarqube` -> `useSonarScannerFromPath`).
@@ -156,7 +156,7 @@ pipeline1C()
* Применяется расчет аргументов командной строки для работы [`branch plugin`](https://github.com/mc1arke/sonarqube-community-branch-plugin) или коммерческих версий SonarQube (`sonarqube` -> `branchAnalysisConfiguration`).
* Если разработка ведется с использованием подсистемы [БСП "Обновление версии ИБ"](https://its.1c.ru/db/bsp315doc#content:4:1:issogl1_обновление_версии_иб), то в значение параметра `sonar.projectVersion=$configurationVersion` утилиты `sonar-scanner` можно передавать версию из созданного общего модуля. Для этого необходимо заполнить параметр (`sonarqube` -> `infoBaseUpdateModuleName`). Если параметр не заполнен, версия передается из корня конфигурации.
* По умолчанию шаг анализа не дожидается окончания фонового задания на сервере SonarQube и не анализирует результат прохождения Порога качества (`sonarqube` -> `waitForQualityGate`).
* Если выполнялась валидация EDT, результаты валидации в формате `generic issues` передаются утилите `sonar-scanner` как значение параметра `sonar.externalIssuesReportPaths`.
* Если валидация EDT выполнялась через stebi, путь к результирующему файлу в формате `generic issues` необходимо передать утилите `sonar-scanner` как значение параметра `sonar.externalIssuesReportPaths`. При использовании `edt-ripper` необходимо передать путь к файлу в качестве значения параметра `sonar.bsl.languageserver.reportPaths`
* Рассылка уведомлений:
* Электронная почта:
* Для отправки используется плагин [`email-ext`](https://plugins.jenkins.io/email-ext). Шаблоны сообщений конфигурируются в настройках плагина.

View File

@@ -0,0 +1,12 @@
package ru.pulsar.jenkins.library.configuration
import com.fasterxml.jackson.annotation.JsonProperty
enum GenericIssueFormat {
@JsonProperty("Generic_Issue")
GENERIC_ISSUE,
@JsonProperty("Generic_Issue_10_3")
GENERIC_ISSUE_10_3
}

View File

@@ -7,22 +7,37 @@ import com.fasterxml.jackson.annotation.JsonPropertyDescription
@JsonIgnoreProperties(ignoreUnknown = true)
class ResultsTransformOptions implements Serializable {
@JsonPropertyDescription("Фильтровать замечания по уровню поддержки модуля. По умолчанию включено.")
@JsonPropertyDescription("""Способ преобразования замечаний.
Поддерживается stebi и edt-ripper
По умолчанию содержит значение "stebi".
""")
ResultsTransformerType transformer = ResultsTransformerType.STEBI
@JsonPropertyDescription("Фильтровать замечания по уровню поддержки модуля. Только для stebi. По умолчанию включено.")
Boolean removeSupport = true
@JsonPropertyDescription("""Настройка фильтрации замечаний по уровню поддержки.
@JsonPropertyDescription("""Настройка фильтрации замечаний по уровню поддержки. Только для stebi.
0 - удалить файлы на замке;
1 - удалить файлы на замке и на поддержке;
2 - удалить файлы на замке, на поддержке и снятые с поддержки.
""")
Integer supportLevel
@JsonPropertyDescription("""Формат отчета generic issue. Только для stebi.
Для SonarQube 10.3+ необходимо использовать Generic_Issue_10_3.
По умолчанию Generic_Issue
""")
GenericIssueFormat genericIssueFormat = GenericIssueFormat.GENERIC_ISSUE
@Override
@NonCPS
String toString() {
return "ResultsTransformOptions{" +
"transformer=" + transformer +
"removeSupport=" + removeSupport +
", supportLevel=" + supportLevel +
'}';
"supportLevel=" + supportLevel +
"genericIssueFormat=" + genericIssueFormat +
'}'
}
}

View File

@@ -0,0 +1,12 @@
package ru.pulsar.jenkins.library.configuration
import com.fasterxml.jackson.annotation.JsonProperty
enum ResultsTransformerType {
@JsonProperty("stebi")
STEBI,
@JsonProperty("edt-ripper")
EDT_RIPPER
}

View File

@@ -2,6 +2,7 @@ package ru.pulsar.jenkins.library.steps
import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.configuration.ResultsTransformerType
import ru.pulsar.jenkins.library.configuration.SourceFormat
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import ru.pulsar.jenkins.library.utils.Logger
@@ -10,10 +11,10 @@ import java.nio.file.Paths
class ResultsTransformer implements Serializable {
public static final String RESULT_STASH = 'edt-generic-issue'
public static final String RESULT_FILE = 'build/out/edt-generic-issue.json'
public static final String RESULT_STASH = 'edt-issues'
public static final String RESULT_FILE = 'build/out/edt-issues.json'
private final JobConfiguration config;
private final JobConfiguration config
ResultsTransformer(JobConfiguration config) {
this.config = config
@@ -24,7 +25,7 @@ class ResultsTransformer implements Serializable {
Logger.printLocation()
def env = steps.env();
def env = steps.env()
if (!config.stageFlags.edtValidate) {
Logger.println("EDT validation is disabled. No transform is needed.")
@@ -33,20 +34,36 @@ class ResultsTransformer implements Serializable {
steps.unstash(EdtValidate.RESULT_STASH)
Logger.println("Конвертация результата EDT в Generic Issue")
ResultsTransformerType transformerType = config.resultsTransformOptions.transformer
def edtValidateFile = "$env.WORKSPACE/$EdtValidate.RESULT_FILE"
def genericIssueFile = "$env.WORKSPACE/$RESULT_FILE"
String srcDir = config.sourceFormat == SourceFormat.DESIGNER ? config.srcDir : Paths.get(config.srcDir, "src")
steps.cmd("stebi convert -r $edtValidateFile $genericIssueFile $srcDir")
if (config.resultsTransformOptions.removeSupport) {
def supportLevel = config.resultsTransformOptions.supportLevel
steps.cmd("stebi transform --remove_support $supportLevel --src $srcDir $genericIssueFile")
if (transformerType == ResultsTransformerType.STEBI) {
Logger.println("Конвертация результата EDT в Generic Issue с помощью stebi")
def genericIssueFile = "$env.WORKSPACE/$RESULT_FILE"
def genericIssuesFormat = config.resultsTransformOptions.genericIssueFormat
steps.cmd("stebi convert --format $genericIssuesFormat -r $edtValidateFile $genericIssueFile $srcDir")
if (config.resultsTransformOptions.removeSupport) {
def supportLevel = config.resultsTransformOptions.supportLevel
steps.cmd("stebi transform --format $genericIssuesFormat --remove_support $supportLevel --src $srcDir $genericIssueFile")
}
} else {
Logger.println("Конвертация результата EDT в Issues с помощью edt-ripper")
steps.cmd("edt-ripper parse $edtValidateFile $srcDir $env.WORKSPACE/$RESULT_FILE")
steps.cmd("edt-ripper publish $env.WORKSPACE/build/out/edt-rules.json")
}
steps.archiveArtifacts(RESULT_FILE)
steps.stash(RESULT_STASH, RESULT_FILE)
}
}