diff --git a/src/ru/pulsar/jenkins/library/IStepExecutor.groovy b/src/ru/pulsar/jenkins/library/IStepExecutor.groovy index 9974a90..cff3f66 100644 --- a/src/ru/pulsar/jenkins/library/IStepExecutor.groovy +++ b/src/ru/pulsar/jenkins/library/IStepExecutor.groovy @@ -31,4 +31,8 @@ interface IStepExecutor { def withEnv(List strings, Closure body) def archiveArtifacts(String path) + + def stash(String name, String includes) + + def unstash(String name) } \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/StepExecutor.groovy b/src/ru/pulsar/jenkins/library/StepExecutor.groovy index 3ac4814..7c8f06b 100644 --- a/src/ru/pulsar/jenkins/library/StepExecutor.groovy +++ b/src/ru/pulsar/jenkins/library/StepExecutor.groovy @@ -78,4 +78,14 @@ class StepExecutor implements IStepExecutor { def archiveArtifacts(String path) { steps.archiveArtifacts path } + + @Override + def stash(String name, String includes) { + steps.stash name: name, includes: includes + } + + @Override + def unstash(String name) { + steps.unstash name + } } diff --git a/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy b/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy index bfdae1f..8e9d2e6 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy @@ -21,7 +21,7 @@ class EdtValidate implements Serializable { Logger.printLocation() if (!config.stageFlags.edtValidate) { - steps.echo("EDT validate step is disabled") + Logger.println("EDT validate step is disabled") return } @@ -54,5 +54,6 @@ class EdtValidate implements Serializable { } steps.archiveArtifacts(resultFileRelative) + steps.stash('edt-validate', resultFileRelative) } } diff --git a/src/ru/pulsar/jenkins/library/steps/ResultsTransformer.groovy b/src/ru/pulsar/jenkins/library/steps/ResultsTransformer.groovy new file mode 100644 index 0000000..5143f21 --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/ResultsTransformer.groovy @@ -0,0 +1,48 @@ +package ru.pulsar.jenkins.library.steps + +import ru.pulsar.jenkins.library.IStepExecutor +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.utils.Logger + +class ResultsTransformer implements Serializable { + + private final JobConfiguration config; + private final String rootDir + + ResultsTransformer(JobConfiguration config, String rootDir = 'src/cf') { + this.config = config + this.rootDir = rootDir + } + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + Logger.printLocation() + + if (!config.stageFlags.sonarqube) { + Logger.println("No transform is needed.") + return + } + + def env = steps.env(); + + if (!config.stageFlags.edtValidate) { + Logger.println("EDT validation is disabled. No transform is needed.") + return + } + + steps.unstash('edt-validate') + + Logger.println("Конвертация результата EDT в Generic Issue") + + def genericIssueRelative = "build/out/edt-generic-issue.json" + def edtValidateFile = "$env.WORKSPACE/build/out/edt-validate.xml" + def genericIssueFile = "$env.WORKSPACE/$genericIssueRelative" + + steps.cmd("stebi convert $edtValidateFile $genericIssueFile $rootDir") + + steps.archiveArtifacts(genericIssueRelative) + steps.stash('edt-generic-issue', genericIssueRelative) + } +} diff --git a/src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy b/src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy index d437abc..e4bc350 100644 --- a/src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy +++ b/src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy @@ -44,6 +44,11 @@ class SonarScanner implements Serializable { sonarCommand += " -Dsonar.projectVersion=$configurationVersion" } + if (config.stageFlags.edtValidate) { + steps.unstash("edt-generic-issue") + sonarCommand += " -Dsonar.externalIssuesReportPaths=build/out/edt-generic-issue.json" + } + def sonarQubeInstallation = config.sonarQubeOptions.sonarQubeInstallation if (sonarQubeInstallation == '') { sonarQubeInstallation = null diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index 5660b9c..df6cdfd 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -35,15 +35,6 @@ void call() { } } - stage('SonarQube') { - agent { - label 'sonar' - } - steps { - sonarScanner config - } - } - stage('1C') { agent { label agent1C @@ -89,6 +80,24 @@ void call() { } } } + + stage('Трансформация результатов') { + agent { + label 'oscript' + } + steps { + transform config + } + } + } + } + + stage('SonarQube') { + agent { + label 'sonar' + } + steps { + sonarScanner config } } } diff --git a/vars/transform.groovy b/vars/transform.groovy new file mode 100644 index 0000000..f054ce5 --- /dev/null +++ b/vars/transform.groovy @@ -0,0 +1,10 @@ +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.steps.ResultsTransformer + +def call(JobConfiguration config) { + ContextRegistry.registerDefaultContext(this) + + def transformer = new ResultsTransformer(config) + transformer.run() +} \ No newline at end of file