From ba1dd4606da94ebbb0afc572177eefe569b88a42 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 16 Dec 2024 10:18:51 +0300 Subject: [PATCH] refactor coverage cleanup --- .../pulsar/jenkins/library/steps/Bdd.groovy | 4 ++ .../jenkins/library/steps/Coverable.groovy | 1 + .../library/steps/CoverageCleanup.groovy | 52 ------------------ .../jenkins/library/steps/SmokeTest.groovy | 4 ++ .../jenkins/library/steps/WithCoverage.groovy | 53 +++++++++++++++---- .../jenkins/library/steps/Yaxunit.groovy | 4 ++ .../library/utils/CoverageUtils.groovy | 8 +-- vars/coverageCleanup.groovy | 11 ---- vars/pipeline1C.groovy | 15 ------ 9 files changed, 57 insertions(+), 95 deletions(-) delete mode 100644 src/ru/pulsar/jenkins/library/steps/CoverageCleanup.groovy delete mode 100644 vars/coverageCleanup.groovy diff --git a/src/ru/pulsar/jenkins/library/steps/Bdd.groovy b/src/ru/pulsar/jenkins/library/steps/Bdd.groovy index 057bbad..6681084 100644 --- a/src/ru/pulsar/jenkins/library/steps/Bdd.groovy +++ b/src/ru/pulsar/jenkins/library/steps/Bdd.groovy @@ -61,6 +61,10 @@ class Bdd implements Serializable, Coverable { } + String getStageSlug() { + return "bdd" + } + String getCoverageStashPath() { return COVERAGE_STASH_PATH } diff --git a/src/ru/pulsar/jenkins/library/steps/Coverable.groovy b/src/ru/pulsar/jenkins/library/steps/Coverable.groovy index 0dbfdd9..ca6473e 100644 --- a/src/ru/pulsar/jenkins/library/steps/Coverable.groovy +++ b/src/ru/pulsar/jenkins/library/steps/Coverable.groovy @@ -2,6 +2,7 @@ package ru.pulsar.jenkins.library.steps interface Coverable { + String getStageSlug(); String getCoverageStashPath(); String getCoverageStashName(); String getCoveragePidsPath(); diff --git a/src/ru/pulsar/jenkins/library/steps/CoverageCleanup.groovy b/src/ru/pulsar/jenkins/library/steps/CoverageCleanup.groovy deleted file mode 100644 index 7d7c933..0000000 --- a/src/ru/pulsar/jenkins/library/steps/CoverageCleanup.groovy +++ /dev/null @@ -1,52 +0,0 @@ -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 CoverageCleanup implements Serializable { - - private final JobConfiguration config - private final String stageName - - CoverageCleanup(JobConfiguration config, String stageName = "") { - this.config = config - this.stageName = stageName - } - - def run() { - IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() - - Logger.printLocation() - - String pidsFilePath = "build${File.separator}${stageName}-pids" - - def pids = "" - if (steps.fileExists(pidsFilePath)) { - pids = steps.readFile(pidsFilePath) - } - - if (pids.isEmpty()) { - Logger.println("Нет запущенных процессов dbgs и Coverage41C") - return - } - - Logger.println("Завершение процессов dbgs и Coverage41C с pid: $pids") - def command - if (steps.isUnix()) { - command = "kill $pids" - } else { - def pidsForCmd = '' - def pidsArray = pids.split(" ") - - pidsArray.each { - pidsForCmd += "/PID $it" - } - pidsForCmd = pidsForCmd.trim() - - command = "taskkill $pidsForCmd /F" - } - steps.cmd(command, true, false) - } -} diff --git a/src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy b/src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy index f2f8613..31fa236 100644 --- a/src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy +++ b/src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy @@ -121,6 +121,10 @@ class SmokeTest implements Serializable, Coverable { } } + String getStageSlug() { + return "bdd" + } + String getCoverageStashPath() { return COVERAGE_STASH_PATH } diff --git a/src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy b/src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy index f78be6c..a1a34ce 100644 --- a/src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy +++ b/src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy @@ -5,6 +5,7 @@ import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.StepCoverageOptions import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.CoverageUtils +import ru.pulsar.jenkins.library.utils.Logger class WithCoverage implements Serializable { @@ -22,28 +23,58 @@ class WithCoverage implements Serializable { def run() { - def context = CoverageUtils.prepareContext(config, coverageOptions) + if (!coverageOptions.coverage) { + body() + return + } + def context = CoverageUtils.prepareContext(config, coverageOptions) IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() - //noinspection GroovyMissingReturnStatement steps.lock(context.lockableResource) { try { - if (coverageOptions.coverage) { - CoverageUtils.startCoverage(steps, config, context, stage) - } + + CoverageUtils.startCoverage(steps, config, context, stage) body() + + steps.stash(stage.getCoverageStashName(), stage.getCoverageStashPath(), true) + } catch (Exception e) { throw new Exception("При выполнении блока произошла ошибка: ${e}") } finally { - if (coverageOptions.coverage) { - CoverageUtils.stopCoverage(steps, config, context) - } - } - if (coverageOptions.coverage) { - steps.stash(stage.getCoverageStashName(), stage.getCoverageStashPath(), true) + CoverageUtils.stopCoverage(steps, config, context) + + String pidsFilePath = "build/${stage.getStageSlug()}-pids" + + def pids = "" + if (steps.fileExists(pidsFilePath)) { + pids = steps.readFile(pidsFilePath) + } + + if (pids.isEmpty()) { + Logger.println("Нет запущенных процессов dbgs и Coverage41C") + return + } + + Logger.println("Завершение процессов dbgs и Coverage41C с pid: $pids") + def command + if (steps.isUnix()) { + command = "kill $pids || true" + } else { + def pidsForCmd = '' + def pidsArray = pids.split(" ") + + pidsArray.each { + pidsForCmd += "/PID $it" + } + pidsForCmd = pidsForCmd.trim() + + command = "taskkill $pidsForCmd /F > nul" + + } + steps.cmd(command, false, false) } } } diff --git a/src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy b/src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy index e6f657a..fb24ec5 100644 --- a/src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy +++ b/src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy @@ -96,6 +96,10 @@ class Yaxunit implements Serializable, Coverable { } } + String getStageSlug() { + return "yaxunit" + } + String getCoverageStashPath() { return COVERAGE_STASH_PATH } diff --git a/src/ru/pulsar/jenkins/library/utils/CoverageUtils.groovy b/src/ru/pulsar/jenkins/library/utils/CoverageUtils.groovy index 9054292..28700ee 100644 --- a/src/ru/pulsar/jenkins/library/utils/CoverageUtils.groovy +++ b/src/ru/pulsar/jenkins/library/utils/CoverageUtils.groovy @@ -1,6 +1,5 @@ package ru.pulsar.jenkins.library.utils -import org.apache.commons.lang3.RandomStringUtils import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.StepCoverageOptions @@ -42,10 +41,7 @@ class CoverageUtils { def port = options.dbgsPort def currentDbgsPids = getPIDs("dbgs") def currentCoverage41CPids = getPIDs("Coverage41C") - def lockableResource = RandomStringUtils.random(9, true, false) - if (options.coverage) { - lockableResource = "${env.NODE_NAME}_$port" - } + def lockableResource = "${env.NODE_NAME}_$port" return new CoverageContext(lockableResource, config.srcDir, coverageOpts, port, currentDbgsPids, currentCoverage41CPids) @@ -76,7 +72,7 @@ class CoverageUtils { steps.writeFile(stage.getCoveragePidsPath(), pids, 'UTF-8') - Logger.println("Coverage PIDs for cleanup: $pids") + Logger.println("PID процессов dbgs и Coverage41C для ${stage.getStageSlug()}: $pids") } static void stopCoverage(IStepExecutor steps, JobConfiguration config, CoverageContext coverageContext) { diff --git a/vars/coverageCleanup.groovy b/vars/coverageCleanup.groovy deleted file mode 100644 index 92fe345..0000000 --- a/vars/coverageCleanup.groovy +++ /dev/null @@ -1,11 +0,0 @@ -import ru.pulsar.jenkins.library.configuration.JobConfiguration -import ru.pulsar.jenkins.library.ioc.ContextRegistry -import ru.pulsar.jenkins.library.steps.CoverageCleanup - -def call(JobConfiguration config, String stageName) { - ContextRegistry.registerDefaultContext(this) - - def coverageCleanup = new CoverageCleanup(config, stageName) - coverageCleanup.run() - -} \ No newline at end of file diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index fd2e5e2..867e383 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -236,11 +236,6 @@ void call() { bdd config } } - post { - cleanup { - coverageCleanup config, 'bdd' - } - } } } } @@ -293,11 +288,6 @@ void call() { smoke config } } - post { - cleanup { - coverageCleanup config, 'smoke' - } - } } } } @@ -335,11 +325,6 @@ void call() { yaxunit config } } - post { - cleanup { - coverageCleanup config, 'yaxunit' - } - } } } }