Skip to content
Merged

sync #187

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ jobs:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
uses: gradle/actions/setup-gradle@v5
- name: Execute Gradle build
run: ./gradlew check
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,16 @@ pipeline1C()
* Если в настройках шага инициализации не заполнен массив дополнительных шагов миграции (`initInfobase` -> `additionalInitializationSteps`), но в каталоге `tools` присутствуют файлы с именами, удовлетворяющими шаблону `vrunner.init*.json`, то автоматически выполняется запуск `vrunner vanessa` с передачей найденных файлов в качестве значения настроек (параметр `--settings`) в порядке лексикографической сортировки имен файлов.
* BDD:
* Если в конфигурационном файле проекта не заполнена настройка `bdd` -> `vrunnerSteps`, то автоматически выполняется запуск `vrunner vanessa --settings tools/vrunner.json`.
* Инструмент, который вызывается на шаге bdd с помощью команды `vrunner vanessa`, должен сохранять код возврата в файл `build/out/bdd-exit-code.log`.
Например, в конфигурационном файле для Vanessa Automation нужно установить значение параметров:

```
...
"ВыгружатьСтатусВыполненияСценариевВФайл": true,
"ПутьКФайлуДляВыгрузкиСтатусаВыполненияСценариев": "build/out/bdd-exit-code.log",
...
```
Если файл не будет найден, то пайплайн будет считать, что шаг выполнился успешно.
* YAXUnit:
* Если в репозитории существует файл `tools/yaxunit.json`, то он будет передан в качестве параметра для YAXUnit при запуске тестов. Если файла с таким именем нет, то в YAXUnit будет передан файл из текущей библиотеки `resources/yaxunit.json`. Он содержит минимально необходимые параметры и настроен на поиск сценариев в расширении с именем `YAXUnit`.
* Дымовые тесты:
Expand Down
10 changes: 8 additions & 2 deletions src/ru/pulsar/jenkins/library/steps/Bdd.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,15 @@ class Bdd implements Serializable, Coverable {

config.bddOptions.vrunnerSteps.each {
Logger.println("Шаг запуска сценариев командой ${it}")

String vrunnerPath = VRunner.getVRunnerPath()
Integer bddReturnStatus = VRunner.exec("$vrunnerPath ${it} --ibconnection \"/F./build/ib\"", true)
returnStatuses.add(bddReturnStatus)
def bddStepExitCodeFile = "build/out/bdd-exit-code.log"
def command = "$vrunnerPath ${it}"
command += " --ibconnection \"/F./build/ib\""
VRunner.exec(command, true)

def bddStepExitCode = VRunner.readExitStatusFromFile(bddStepExitCodeFile, 0)
returnStatuses.add(bddStepExitCode)
}

if (Collections.max(returnStatuses) > 2) {
Expand Down
6 changes: 5 additions & 1 deletion src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,11 @@ class SmokeTest implements Serializable, Coverable {

if (options.publishToAllureReport) {
steps.stash(ALLURE_STASH, "$allureReportDir/**", true)
steps.archiveArtifacts("$allureReportDir/**")

// Архивируем результат в отдельный архив и отправляем в артефакты.
String archivePath = "build/out/allure/smoke.zip"
Boolean archiveArtifacts = true
steps.zip("$allureReportDir", archivePath, '', archiveArtifacts)
}

if (options.publishToJUnitReport) {
Expand Down
1 change: 1 addition & 0 deletions src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ class WithCoverage implements Serializable {

steps.start(dbgsPath, "--addr=127.0.0.1 --port=${coverageContext.port}")
steps.start(coverageOpts.coverage41CPath, "start -i DefAlias -u http://127.0.0.1:${coverageContext.port} -P $workspaceDir -s $srcDir -o ${stage.getCoverageStashPath()}")
sleep(1000)
steps.cmd("${coverageOpts.coverage41CPath} check -i DefAlias -u http://127.0.0.1:${coverageContext.port}")

def newDbgsPids = getPIDs("dbgs")
Expand Down
29 changes: 29 additions & 0 deletions src/ru/pulsar/jenkins/library/utils/VRunner.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package ru.pulsar.jenkins.library.utils
import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.ioc.ContextRegistry

import java.nio.file.NoSuchFileException

class VRunner {

static final String DEFAULT_VRUNNER_OPTS = "RUNNER_NOCACHEUSE=1"
Expand Down Expand Up @@ -39,4 +41,31 @@ class VRunner {
return fileContent.contains("\"$settingName\"")
}

static Integer readExitStatusFromFile(String path, Integer valueIfNoSuchFile = 1) {

Logger.println("Читаем статус возврата из файла ${path}")

try {
String content = ContextRegistry.getContext().getStepExecutor()
.readFile(path)
.trim()
.replaceAll(/^\uFEFF/, '') // платформа генерирует файл с BOM

if (!content) {
Logger.println("Файл со статусом возврата ${path} пуст")
return 1
} else {
return content.toInteger()
}
} catch (NoSuchFileException e) {
Logger.println("Файл со статусом возврата ${path} не найден: ${e.message}")
return valueIfNoSuchFile
} catch (NumberFormatException e) {
Logger.println("В файле со статусом возврата ${path} записано не числовое значение: ${e.message}")
return 1
} catch (Exception e) {
Logger.println("При чтении файла со статусом возврата ${path} возникла ошибка: ${e.message}")
return 1
}
}
}