You've already forked jenkins-lib
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:
@@ -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). Шаблоны сообщений конфигурируются в настройках плагина.
|
||||
|
@@ -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
|
||||
|
||||
}
|
@@ -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 +
|
||||
'}'
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
||||
}
|
@@ -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)
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user