From 66ac4b10c96c1795d38aa6e6ce7f77bf85345e69 Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Fri, 17 Apr 2020 12:01:43 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20=D1=81?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B0=D0=BA=D1=81=D0=B8=D1=87=D0=B5=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/globalConfiguration.json | 18 +++++++++ resources/schema.json | 26 +++++++++++++ .../configuration/ConfigurationReader.groovy | 3 +- .../configuration/JobConfiguration.groovy | 5 +++ .../configuration/SyntaxCheckOptions.groovy | 32 +++++++++++++++ .../ConfigurationReaderTest.java | 1 + test/unit/resources/jobConfiguration.json | 4 ++ vars/pipeline1C.groovy | 11 +----- vars/syntaxCheck.groovy | 39 +++++++++++++++++++ 9 files changed, 128 insertions(+), 11 deletions(-) create mode 100644 src/ru/pulsar/jenkins/library/configuration/SyntaxCheckOptions.groovy create mode 100644 vars/syntaxCheck.groovy diff --git a/resources/globalConfiguration.json b/resources/globalConfiguration.json index b185a0f..cbdf020 100644 --- a/resources/globalConfiguration.json +++ b/resources/globalConfiguration.json @@ -9,5 +9,23 @@ "sonarQubeInstallation": "", "useSonarScannerFromPath": true, "sonarScannerToolName": "sonar-scanner" + }, + "syntaxCheck": { + "enabled": false, + "groupErrorsByMetadata": true, + "pathToJUnitReport": "./build/out/jUnit/syntax.xml", + "checkModes": [ + "-ThinClient", + "-WebClient", + "-Server", + "-ExtendedModulesCheck", + "-IncorrectReferences", + "-UnreferenceProcedures", + "-HandlersExistence", + "-EmptyHandlers", + "-CheckUseModality", + "-CheckUseSynchronousCalls", + "-DistributiveModules" + ] } } diff --git a/resources/schema.json b/resources/schema.json index 370fa8b..dbe3d6e 100644 --- a/resources/schema.json +++ b/resources/schema.json @@ -43,6 +43,32 @@ "description" : "Имя настроенной утилиты sonar-scanner.\nПрименяется, если useSonarScannerFromPath установлено в false." } } + }, + "syntaxCheck" : { + "type" : "object", + "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SyntaxCheckOptions", + "description" : "Настройки синтаксического контроля", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Синтаксический контроль включен" + }, + "pathToJUnitReport" : { + "type" : "string", + "description" : "Путь к файлу отчета jUnit" + }, + "groupErrorsByMetadata" : { + "type" : "boolean", + "description" : "Группировать выявленные ошибки по объектам метаданных" + }, + "checkModes" : { + "type" : "array", + "description" : "Режимы проверки конфигурации", + "items" : { + "type" : "string" + } + } + } } } } \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy index a51c078..6a1ac1b 100644 --- a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy @@ -34,7 +34,8 @@ class ConfigurationReader implements Serializable { ) { def nonMergeableSettings = Arrays.asList( "secrets", - "sonarQubeOptions" + "sonarQubeOptions", + "syntaxCheckOptions" ).toSet() mergeObjects(baseConfiguration, configurationToMerge, nonMergeableSettings) diff --git a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy index 9feadea..4cde657 100644 --- a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy @@ -17,6 +17,10 @@ class JobConfiguration implements Serializable { @JsonPropertyDescription("Настройки анализа SonarQube") SonarQubeOptions sonarQubeOptions; + @JsonProperty("syntaxCheck") + @JsonPropertyDescription("Настройки синтаксического контроля") + SyntaxCheckOptions syntaxCheckOptions; + @Override @NonCPS String toString() { @@ -24,6 +28,7 @@ class JobConfiguration implements Serializable { "v8version='" + v8version + '\'' + ", secrets=" + secrets + ", sonarQubeOptions=" + sonarQubeOptions + + ", syntaxCheckOptions=" + syntaxCheckOptions + '}'; } } \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/configuration/SyntaxCheckOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/SyntaxCheckOptions.groovy new file mode 100644 index 0000000..a3f994f --- /dev/null +++ b/src/ru/pulsar/jenkins/library/configuration/SyntaxCheckOptions.groovy @@ -0,0 +1,32 @@ +package ru.pulsar.jenkins.library.configuration + +import com.cloudbees.groovy.cps.NonCPS +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.annotation.JsonPropertyDescription + +@JsonIgnoreProperties(ignoreUnknown = true) +class SyntaxCheckOptions implements Serializable { + + @JsonPropertyDescription("Синтаксический контроль включен") + boolean enabled + + @JsonPropertyDescription("Путь к файлу отчета jUnit") + String pathToJUnitReport + + @JsonPropertyDescription("Группировать выявленные ошибки по объектам метаданных") + boolean groupErrorsByMetadata; + + @JsonPropertyDescription("Режимы проверки конфигурации") + String[] checkModes; + + @Override + @NonCPS + String toString() { + return "SyntaxCheckOptions{" + + "enabled=" + enabled + + ", pathToJUnitReport='" + pathToJUnitReport + '\'' + + ", groupErrorsByMetadata=" + groupErrorsByMetadata + + ", checkModes=" + checkModes + + '}'; + } +} diff --git a/test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java b/test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java index 8eb858d..b15a3a7 100644 --- a/test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java +++ b/test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java @@ -36,6 +36,7 @@ class ConfigurationReaderTest { .hasFieldOrPropertyWithValue("storage", "1234") .hasFieldOrPropertyWithValue("storagePath", "UNKNOWN_ID") ; + assertThat(jobConfiguration.getSyntaxCheckOptions().getCheckModes()).hasSize(1); } } \ No newline at end of file diff --git a/test/unit/resources/jobConfiguration.json b/test/unit/resources/jobConfiguration.json index 9fefedc..6f3ca4b 100644 --- a/test/unit/resources/jobConfiguration.json +++ b/test/unit/resources/jobConfiguration.json @@ -2,5 +2,9 @@ "v8version": "8.3.14.1944", "secrets": { "storage": "1234" + }, + "syntaxCheck": { + "enabled": true, + "checkModes": ["-ThinClient"] } } \ No newline at end of file diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index 93ec747..7a178d2 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -69,16 +69,7 @@ void call() { parallel { stage('Синтаксический контроль') { steps { - printLocation() - - installLocalDependencies() - - unzipInfobase() - - // Запуск синтакс-проверки - cmd("oscript_modules/bin/vrunner syntax-check --settings tools/vrunner.json", true) - - junit allowEmptyResults: true, testResults: 'build/out/junitsyntax.xml' + syntaxCheck config } } diff --git a/vars/syntaxCheck.groovy b/vars/syntaxCheck.groovy new file mode 100644 index 0000000..93fd3e7 --- /dev/null +++ b/vars/syntaxCheck.groovy @@ -0,0 +1,39 @@ +import hudson.FilePath +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.ioc.ContextRegistry + +def call(JobConfiguration config) { + + ContextRegistry.registerDefaultContext(this) + + printLocation() + + def options = config.syntaxCheckOptions + if (!options.enabled) { + echo("Syntax-check step is disabled") + return + } + + installLocalDependencies() + + unzipInfobase() + + def junitPath = new FilePath(new File(options.pathToJUnitReport)) + junitPath.mkdirs() + + String command = "oscript_modules/bin/vrunner syntax-check --ibconnection \"/F./build/ib\"" + + if (options.groupErrorsByMetadata) { + command += " --groupbymetadata" + } + + command += " --junitpath " + options.pathToJUnitReport; + + command += " --mode " + options.checkModes.join(" ") + + // Запуск синтакс-проверки + cmd(command, true) + + junit allowEmptyResults: true, testResults: options.pathToJUnitReport + +}