1
0
mirror of https://github.com/firstBitMarksistskaya/jenkins-lib.git synced 2025-08-25 20:09:25 +02:00
This commit is contained in:
Dima
2023-07-17 18:04:16 +03:00
parent c956cb0d85
commit a527a24173
11 changed files with 60 additions and 46 deletions

View File

@@ -26,7 +26,8 @@
1. При использовании EDT версии 2024.1.0 и выше вместо ring используется 1cedtcli, который должен быть прописан в PATH на агенте.
1. Для запуска шагов, работающих с 1С (подготовка, синтаксический контроль и т.д.) требуется агент с меткой, совпадающей со значением в поле `v8version` файла конфигурации.
1. В качестве ИБ используется файловая база, создаваемая в каталоге `./build/ib`. При необходимости вы можете создать пользователей на фазе инициализации ИБ.
1. Для замеров покрытия на агентах должны быть установлены [Coverage41C](https://github.com/1c-syntax/Coverage41C), EDT и сервер отладки dbgs.
1. Для замеров покрытия на агентах должны быть установлены [Coverage41C](https://github.com/1c-syntax/Coverage41C), EDT и сервер отладки dbgs. Вместо установки EDT целиком можно использовать только отдельные ее компоненты, см. [Coverage41C/README.md](https://github.com/1c-syntax/Coverage41C).
1. Для параллельного выполнения шагов `bdd` и `smoke` с включенными замерами покрытия на одной ноде необходимо, чтобы в `jobConfiguration.json` были указаны **разные** порты сервера отладки для каждого шага. Параллельные билды с замерами покрытия на одной ноде не поддерживаются.
## Возможности

View File

@@ -85,6 +85,10 @@
"coverage" : {
"type" : "boolean",
"description" : "Выполнять замер покрытия"
},
"dbgsPort" : {
"type" : "boolean",
"description" : "Порт, на котором будет запущен сервер отладки для замера покрытия"
}
}
}
@@ -238,6 +242,10 @@
"coverage" : {
"type" : "boolean",
"description" : "Выполнять замер покрытия"
},
"dbgsPort" : {
"type" : "boolean",
"description" : "Порт, на котором будет запущен сервер отладки для замера покрытия"
}
}
},
@@ -250,10 +258,6 @@
"type" : "string",
"description" : "Путь к исполняемому файлу dbgs.\n По умолчанию равен /opt/1cv8/current/dbgs.\n "
},
"dbgsPort" : {
"type" : "integer",
"description" : "Порт сервера отладки.\n По умолчанию равен 1550.\n "
},
"coverage41CPath" : {
"type" : "string",
"description" : "Путь к исполняемому файлу Coverage41C\n По умолчанию равен Coverage41C.\n "

View File

@@ -19,12 +19,16 @@ class BddOptions implements Serializable {
@JsonPropertyDescription("Выполнять замер покрытия")
Boolean coverage = false
@JsonPropertyDescription("Порт, на котором будет запущен сервер отладки для замера покрытия")
Boolean dbgsPort = 1550
@Override
@NonCPS
String toString() {
return "BddOptions{" +
"vrunnerSteps=" + vrunnerSteps +
"coverage=" + coverage +
'}';
"dbgsPort=" + dbgsPort +
'}'
}
}

View File

@@ -12,11 +12,6 @@ class CoverageOptions implements Serializable {
''')
String dbgsPath
@JsonPropertyDescription('''Порт сервера отладки.
По умолчанию равен 1550.
''')
int dbgsPort = 1550
@JsonPropertyDescription('''Путь к исполняемому файлу Coverage41C
По умолчанию равен Coverage41C.
''')
@@ -27,7 +22,6 @@ class CoverageOptions implements Serializable {
String toString() {
return "coverageOptions{" +
"dbgsPath=" + dbgsPath +
"dbgsPort=" + dbgsPort +
", coverage41CPath=" + coverage41CPath +
'}'
}

View File

@@ -15,7 +15,7 @@ class SmokeTestOptions implements Serializable {
@JsonPropertyDescription("""Путь к конфигурационному файлу для xddTestRunner.
По умолчанию содержит значение "./tools/xUnitParams.json".
""")
String xddConfigPath;
String xddConfigPath
@JsonPropertyDescription("""Выполнять публикацию результатов в отчет Allure.
По умолчанию выключено.
@@ -30,6 +30,9 @@ class SmokeTestOptions implements Serializable {
@JsonPropertyDescription("Выполнять замер покрытия")
Boolean coverage = false
@JsonPropertyDescription("Порт, на котором будет запущен сервер отладки для замера покрытия")
Boolean dbgsPort = 1650
@Override
@NonCPS
String toString() {
@@ -39,6 +42,7 @@ class SmokeTestOptions implements Serializable {
", publishToAllureReport=" + publishToAllureReport +
", publishToJUnitReport=" + publishToJUnitReport +
", coverage=" + coverage +
", dbgsPort=" + dbgsPort +
'}'
}
}

View File

@@ -12,6 +12,10 @@ class Bdd implements Serializable {
private final JobConfiguration config
public static final String ALLURE_STASH = 'bdd-allure'
public static final String COVERAGE_STASH_NAME = 'bdd-coverage'
public static final String COVERAGE_STASH_PATH = 'build/out/bdd-coverage.xml'
Bdd(JobConfiguration config) {
this.config = config
}
@@ -38,17 +42,17 @@ class Bdd implements Serializable {
List<Integer> returnStatuses = []
def coverageOpts = config.coverageOptions
def port = coverageOpts.dbgsPort
def lockable_resource = RandomStringUtils.random(9, true, false)
def port = options.dbgsPort
def lockableResource = RandomStringUtils.random(9, true, false)
if (options.coverage) {
lockable_resource = "${env.NODE_NAME}_$port"
lockableResource = "${env.NODE_NAME}_$port"
}
steps.lock(null, 1, lockable_resource) {
steps.lock(null, 1, lockableResource) {
if (options.coverage) {
steps.start("${coverageOpts.dbgsPath} --addr=127.0.0.1 --port=$port")
steps.start("${coverageOpts.coverage41CPath} start -i DefAlias -u http://127.0.0.1:$port -P $workspaceDir -s $srcDir -o build/out/bdd-coverage.xml")
steps.start("${coverageOpts.coverage41CPath} start -i DefAlias -u http://127.0.0.1:$port -P $workspaceDir -s $srcDir -o $COVERAGE_STASH_PATH")
steps.cmd("${coverageOpts.coverage41CPath} check -i DefAlias -u http://127.0.0.1:$port")
}
@@ -70,16 +74,13 @@ class Bdd implements Serializable {
if (options.coverage) {
steps.cmd("${coverageOpts.coverage41CPath} stop -i DefAlias -u http://127.0.0.1:$port")
}
return 0
}
}
steps.stash('bdd-allure', 'build/out/allure/**', true)
steps.stash(ALLURE_STASH, 'build/out/allure/**', true)
steps.stash('bdd-cucumber', 'build/out/cucumber/**', true)
if (options.coverage) {
steps.stash('bdd-coverage', 'build/out/bdd-coverage.xml', true)
steps.stash(COVERAGE_STASH_NAME, COVERAGE_STASH_PATH, true)
}
}

View File

@@ -31,13 +31,13 @@ class PublishAllure implements Serializable {
safeUnstash('init-allure')
}
if (config.stageFlags.bdd) {
safeUnstash('bdd-allure')
safeUnstash(Bdd.ALLURE_STASH)
}
if (config.stageFlags.yaxunit && config.yaxunitOptions.publishToAllureReport) {
safeUnstash(Yaxunit.YAXUNIT_ALLURE_STASH)
}
if (config.stageFlags.smoke && config.smokeTestOptions.publishToAllureReport) {
safeUnstash(SmokeTest.SMOKE_ALLURE_STASH)
safeUnstash(SmokeTest.ALLURE_STASH)
}
def env = steps.env()

View File

@@ -1,18 +1,20 @@
package ru.pulsar.jenkins.library.steps
import hudson.FilePath
import org.apache.commons.lang.RandomStringUtils
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.FileUtils
import ru.pulsar.jenkins.library.utils.Logger
import ru.pulsar.jenkins.library.utils.PortPicker
import ru.pulsar.jenkins.library.utils.StringJoiner
import ru.pulsar.jenkins.library.utils.VRunner
class SmokeTest implements Serializable {
public static final String SMOKE_ALLURE_STASH = 'smoke-allure'
public static final String ALLURE_STASH = 'smoke-allure'
public static final String COVERAGE_STASH_NAME = 'smoke-coverage'
public static final String COVERAGE_STASH_PATH = 'build/out/smoke-coverage.xml'
private final JobConfiguration config
@@ -104,25 +106,31 @@ class SmokeTest implements Serializable {
command += " $testsPath"
}
def coverageOpts = config.coverageOptions;
def port = PortPicker.getPort();
port = 1550;
def coverageOpts = config.coverageOptions
def port = options.dbgsPort
def lockableResource = RandomStringUtils.random(9, true, false)
if (options.coverage) {
steps.start("${coverageOpts.dbgsPath} --addr=127.0.0.1 --port=$port")
steps.start("${coverageOpts.coverage41CPath} start -i DefAlias -u http://127.0.0.1:$port -P $workspaceDir -s $srcDir -o build/out/smoketest-coverage.xml")
steps.cmd("${coverageOpts.coverage41CPath} check -i DefAlias -u http://127.0.0.1:$port")
lockableResource = "${env.NODE_NAME}_$port"
}
steps.withEnv(logosConfig) {
VRunner.exec(command, true)
}
steps.lock(null, 1, lockableResource) {
if (options.coverage) {
steps.start("${coverageOpts.dbgsPath} --addr=127.0.0.1 --port=$port")
steps.start("${coverageOpts.coverage41CPath} start -i DefAlias -u http://127.0.0.1:$port -P $workspaceDir -s $srcDir -o $COVERAGE_STASH_PATH")
steps.cmd("${coverageOpts.coverage41CPath} check -i DefAlias -u http://127.0.0.1:$port")
}
if (options.coverage) {
steps.cmd("${coverageOpts.coverage41CPath} stop -i DefAlias -u http://127.0.0.1:$port")
steps.withEnv(logosConfig) {
VRunner.exec(command, true)
}
if (options.coverage) {
steps.cmd("${coverageOpts.coverage41CPath} stop -i DefAlias -u http://127.0.0.1:$port")
}
}
if (options.publishToAllureReport) {
steps.stash(SMOKE_ALLURE_STASH, "$allureReportDir/**", true)
steps.stash(ALLURE_STASH, "$allureReportDir/**", true)
steps.archiveArtifacts("$allureReportDir/**")
}
@@ -132,7 +140,7 @@ class SmokeTest implements Serializable {
}
if (options.coverage) {
steps.stash('smoketest-coverage', 'build/out/smoketest-coverage.xml', true)
steps.stash(COVERAGE_STASH_NAME, COVERAGE_STASH_PATH, true)
}
}

View File

@@ -75,13 +75,13 @@ class SonarScanner implements Serializable {
StringJoiner coveragePathsConstructor = new StringJoiner(",")
if (config.stageFlags.bdd && config.bddOptions.coverage) {
steps.unstash("bdd-coverage")
coveragePathsConstructor.add("build/out/bdd-coverage.xml")
steps.unstash(Bdd.COVERAGE_STASH_NAME)
coveragePathsConstructor.add(Bdd.COVERAGE_STASH_PATH)
}
if (config.stageFlags.smoke && config.smokeTestOptions.coverage) {
steps.unstash("smoketest-coverage")
coveragePathsConstructor.add("build/out/smoketest-coverage.xml")
steps.unstash(SmokeTest.COVERAGE_STASH_NAME)
coveragePathsConstructor.add(SmokeTest.COVERAGE_STASH_PATH)
}
String coveragePaths = coveragePathsConstructor.toString()

View File

@@ -75,7 +75,6 @@ class jobConfigurationTest {
rule.assertLogContains("sonarScannerToolName='sonar-scanner'", run)
rule.assertLogContains("initMethod=FROM_SOURCE", run)
rule.assertLogContains("dbgsPath=C:\\Program files\\1cv8\\8.3.12.1500\\bin\\dbgs.exe", run)
rule.assertLogContains("dbgsPort=4543", run)
rule.assertLogContains("coverage41CPath=C:\\coverage\\Coverage41C.exe", run)
}
}

View File

@@ -13,7 +13,6 @@
},
"coverage": {
"dbgsPath": "C:\\\\Program files\\\\1cv8\\\\8.3.12.1500\\\\bin\\\\dbgs.exe",
"dbgsPort": 4543,
"coverage41CPath": "C:\\\\coverage\\\\Coverage41C.exe"
}
}