You've already forked jenkins-lib
forked from jenkins/jenkins-lib
Merge pull request #76 from ivanmolodec/feature-edt-version
Добавил возможность указать версию edt для сборки
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
|
||||
1. Для шага подготовки требуется любой агент с меткой `agent`.
|
||||
1. Для запуска шага анализа SonarQube требуется агент с меткой `sonar`.
|
||||
1. Для запуска шагов, работающих с EDT (валидация, трансформация формата исходников) требуется агент с меткой `edt` и агент с меткой `oscript`, на котором глобально установлена библиотека [stebi](https://github.com/Stepa86/stebi) версии 1.9.1 или новее.
|
||||
1. Для запуска шагов, работающих с EDT (валидация, трансформация формата исходников) требуется агент с меткой `edt` (если используется несколько версий EDT необходимо к метке добавить версию, например `edt@2021.3.4:x86_64`) и агент с меткой `oscript`, на котором глобально установлена библиотека [stebi](https://github.com/Stepa86/stebi) версии 1.9.1 или новее.
|
||||
1. Для запуска шагов, работающих с 1С (подготовка, синтаксический контроль и т.д.) требуется агент с меткой, совпадающей со значением в поле `v8version` файла конфигурации.
|
||||
1. В качестве ИБ используется файловая база, создаваемая в каталоге `./build/ib`. При необходимости вы можете создать пользователей на фазе инициализации ИБ.
|
||||
|
||||
@@ -76,6 +76,7 @@ pipeline1C()
|
||||
Пример переопределения:
|
||||
|
||||
* указывается точная версия платформы (и соответственно метка агента, см. ограничения)
|
||||
* указывается точная версия модуля EDT (и соответственно метка агента, см. ограничения)
|
||||
* идентификаторы credentials для пути к хранилищу и к паре логин/пароль для авторизации в хранилище (необходимы, если применяются шаги, работающие с информационной базой)
|
||||
* включаются шаги запуска статического анализа SonarQube, валидации средствами EDT и синтаксического контроля
|
||||
|
||||
@@ -83,6 +84,7 @@ pipeline1C()
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/firstBitSemenovskaya/jenkins-lib/master/resources/schema.json",
|
||||
"v8version": "8.3.14.1976",
|
||||
"edtVersion": "2021.3.4:x86_64",
|
||||
"secrets": {
|
||||
"storagePath": "f7b21c02-711a-4883-81c5-d429454e3f8b",
|
||||
"storage" : "c1fc5f33-67d4-493f-a2a4-97d3040e4b8c"
|
||||
@@ -103,6 +105,7 @@ pipeline1C()
|
||||
|
||||
* Общее:
|
||||
* В качестве маски версии платформы используется строка "8.3" (`v8version`).
|
||||
* По-умолчанию версия модуля EDT не заполнена, т.к. в случае единственной версии для утилиты ring дополнительного указания не требуется (`edtVersion`).
|
||||
* Исходники конфигурации ожидаются в каталоге `src/cf` (`srcDir`).
|
||||
* Формат исходников - выгрузка из Конфигуратора (`sourceFormat`).
|
||||
* Ветка по умолчанию (для комбинированного режима загрузки конфигурации) - "main" (`defaultBranch`).
|
||||
|
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"$schema": "schema.json",
|
||||
"v8version": "8.3",
|
||||
"edtVersion": "",
|
||||
"srcDir": "src/cf",
|
||||
"sourceFormat": "designer",
|
||||
"defaultBranch": "main",
|
||||
|
@@ -6,6 +6,10 @@
|
||||
"type" : "string",
|
||||
"description" : "Версия платформы 1С:Предприятие в формате 8.3.хх.хххх."
|
||||
},
|
||||
"edtVersion" : {
|
||||
"type" : "string",
|
||||
"description" : "Версия модуля 1C:Enterprise Development Tools формате xxxx.x.x:x86_64"
|
||||
},
|
||||
"srcDir" : {
|
||||
"type" : "string",
|
||||
"description" : "Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту"
|
||||
|
@@ -12,6 +12,9 @@ class JobConfiguration implements Serializable {
|
||||
@JsonPropertyDescription("Версия платформы 1С:Предприятие в формате 8.3.хх.хххх.")
|
||||
String v8version
|
||||
|
||||
@JsonPropertyDescription("Версия модуля 1C:Enterprise Development Tools формате xxxx.x.x:x86_64")
|
||||
String edtVersion
|
||||
|
||||
@JsonPropertyDescription("Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту")
|
||||
String srcDir
|
||||
|
||||
@@ -65,6 +68,7 @@ class JobConfiguration implements Serializable {
|
||||
String toString() {
|
||||
return "JobConfiguration{" +
|
||||
"v8version='" + v8version + '\'' +
|
||||
", edtVersion='" + edtVersion + '\'' +
|
||||
", srcDir='" + srcDir + '\'' +
|
||||
", sourceFormat=" + sourceFormat +
|
||||
", stageFlags=" + stageFlags +
|
||||
@@ -90,4 +94,16 @@ class JobConfiguration implements Serializable {
|
||||
return (initMethod == InitInfoBaseMethod.FROM_SOURCE) ||
|
||||
(initMethod == InitInfoBaseMethod.DEFAULT_BRANCH_FROM_STORAGE && branchName != defaultBranch)
|
||||
}
|
||||
|
||||
String v8AgentLabel() {
|
||||
return v8version
|
||||
}
|
||||
|
||||
String edtAgentLabel() {
|
||||
String edtVersionForRing = "edt"
|
||||
if (edtVersion != '') {
|
||||
edtVersionForRing += "@" + edtVersion
|
||||
}
|
||||
return edtVersionForRing
|
||||
}
|
||||
}
|
@@ -5,6 +5,7 @@ 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.Constants
|
||||
import ru.pulsar.jenkins.library.utils.EDT
|
||||
import ru.pulsar.jenkins.library.utils.Logger
|
||||
|
||||
class DesignerToEdtFormatTransformation implements Serializable {
|
||||
@@ -34,12 +35,13 @@ class DesignerToEdtFormatTransformation implements Serializable {
|
||||
|
||||
def workspaceDir = "$env.WORKSPACE/$WORKSPACE"
|
||||
def configurationRoot = new File(env.WORKSPACE, config.srcDir).getAbsolutePath()
|
||||
def edtVersionForRing = EDT.ringModule(config)
|
||||
|
||||
steps.deleteDir(workspaceDir)
|
||||
|
||||
Logger.println("Конвертация исходников из формата конфигуратора в формат EDT")
|
||||
|
||||
def ringCommand = "ring edt workspace import --configuration-files \"$configurationRoot\" --project-name $PROJECT_NAME --workspace-location \"$workspaceDir\""
|
||||
def ringCommand = "ring $edtVersionForRing workspace import --configuration-files \"$configurationRoot\" --project-name $PROJECT_NAME --workspace-location \"$workspaceDir\""
|
||||
|
||||
def ringOpts = [Constants.DEFAULT_RING_OPTS]
|
||||
steps.withEnv(ringOpts) {
|
||||
|
@@ -6,6 +6,7 @@ import ru.pulsar.jenkins.library.configuration.JobConfiguration
|
||||
import ru.pulsar.jenkins.library.configuration.SourceFormat
|
||||
import ru.pulsar.jenkins.library.ioc.ContextRegistry
|
||||
import ru.pulsar.jenkins.library.utils.Constants
|
||||
import ru.pulsar.jenkins.library.utils.EDT
|
||||
import ru.pulsar.jenkins.library.utils.Logger
|
||||
|
||||
class EdtToDesignerFormatTransformation implements Serializable {
|
||||
@@ -37,13 +38,14 @@ class EdtToDesignerFormatTransformation implements Serializable {
|
||||
def projectDir = new File("$env.WORKSPACE/$srcDir").getCanonicalPath()
|
||||
def workspaceDir = "$env.WORKSPACE/$WORKSPACE"
|
||||
def configurationRoot = "$env.WORKSPACE/$CONFIGURATION_DIR"
|
||||
def edtVersionForRing = EDT.ringModule(config)
|
||||
|
||||
steps.deleteDir(workspaceDir)
|
||||
steps.deleteDir(configurationRoot)
|
||||
|
||||
Logger.println("Конвертация исходников из формата EDT в формат Конфигуратора")
|
||||
|
||||
def ringCommand = "ring edt workspace export --workspace-location \"$workspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\""
|
||||
def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$workspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\""
|
||||
|
||||
def ringOpts = [Constants.DEFAULT_RING_OPTS]
|
||||
steps.withEnv(ringOpts) {
|
||||
|
@@ -5,6 +5,7 @@ import ru.pulsar.jenkins.library.configuration.JobConfiguration
|
||||
import ru.pulsar.jenkins.library.configuration.SourceFormat
|
||||
import ru.pulsar.jenkins.library.ioc.ContextRegistry
|
||||
import ru.pulsar.jenkins.library.utils.Constants
|
||||
import ru.pulsar.jenkins.library.utils.EDT
|
||||
import ru.pulsar.jenkins.library.utils.Logger
|
||||
|
||||
class EdtValidate implements Serializable {
|
||||
@@ -44,10 +45,11 @@ class EdtValidate implements Serializable {
|
||||
}
|
||||
|
||||
def resultFile = "$env.WORKSPACE/$RESULT_FILE"
|
||||
def edtVersionForRing = EDT.ringModule(config)
|
||||
|
||||
Logger.println("Выполнение валидации EDT")
|
||||
|
||||
def ringCommand = "ring edt workspace validate --workspace-location \"$workspaceLocation\" --file \"$resultFile\" $projectList"
|
||||
def ringCommand = "ring $edtVersionForRing workspace validate --workspace-location \"$workspaceLocation\" --file \"$resultFile\" $projectList"
|
||||
def ringOpts = [Constants.DEFAULT_RING_OPTS]
|
||||
steps.withEnv(ringOpts) {
|
||||
steps.catchError {
|
||||
|
12
src/ru/pulsar/jenkins/library/utils/EDT.groovy
Normal file
12
src/ru/pulsar/jenkins/library/utils/EDT.groovy
Normal file
@@ -0,0 +1,12 @@
|
||||
package ru.pulsar.jenkins.library.utils
|
||||
|
||||
import ru.pulsar.jenkins.library.configuration.JobConfiguration
|
||||
|
||||
final class EDT {
|
||||
|
||||
static String ringModule(JobConfiguration config) {
|
||||
return config.edtAgentLabel()
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@ package ru.pulsar.jenkins.library.configuration;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import ru.pulsar.jenkins.library.utils.TestUtils;
|
||||
|
||||
@@ -31,6 +32,7 @@ class ConfigurationReaderTest {
|
||||
|
||||
// then
|
||||
assertThat(jobConfiguration.getV8version()).isEqualTo("8.3.14.1944");
|
||||
assertThat(jobConfiguration.getEdtVersion()).isEqualTo("2021.3.4:x86_64");
|
||||
|
||||
assertThat(jobConfiguration.getSonarQubeOptions().getSonarScannerToolName()).isEqualTo("sonar-scanner");
|
||||
assertThat(jobConfiguration.getSonarQubeOptions().getSonarQubeInstallation()).isEqualTo("qa");
|
||||
@@ -61,4 +63,52 @@ class ConfigurationReaderTest {
|
||||
assertThat(jobConfiguration.getTimeoutOptions().getZipInfoBase()).isEqualTo(123);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testV8AgentLabel() throws IOException {
|
||||
// given
|
||||
String config = IOUtils.resourceToString(
|
||||
"jobConfiguration.json",
|
||||
StandardCharsets.UTF_8,
|
||||
this.getClass().getClassLoader()
|
||||
);
|
||||
|
||||
// when
|
||||
JobConfiguration jobConfiguration = ConfigurationReader.create(config);
|
||||
|
||||
// then
|
||||
assertThat(jobConfiguration.v8AgentLabel()).isEqualTo("8.3.14.1944");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testEdtAgentLabel() throws IOException {
|
||||
// given
|
||||
String config = IOUtils.resourceToString(
|
||||
"jobConfiguration.json",
|
||||
StandardCharsets.UTF_8,
|
||||
this.getClass().getClassLoader()
|
||||
);
|
||||
|
||||
// when
|
||||
JobConfiguration jobConfiguration = ConfigurationReader.create(config);
|
||||
|
||||
// then
|
||||
assertThat(jobConfiguration.edtAgentLabel()).isEqualTo("edt@2021.3.4:x86_64");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
void testInfoBaseFromFiles() throws IOException {
|
||||
// given
|
||||
String config = IOUtils.resourceToString(
|
||||
"jobConfiguration.json",
|
||||
StandardCharsets.UTF_8,
|
||||
this.getClass().getClassLoader()
|
||||
);
|
||||
|
||||
// when
|
||||
JobConfiguration jobConfiguration = ConfigurationReader.create(config);
|
||||
|
||||
// then
|
||||
assertThat(jobConfiguration.infoBaseFromFiles()).isFalse();
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,39 @@
|
||||
package ru.pulsar.jenkins.library.utils;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import ru.pulsar.jenkins.library.configuration.ConfigurationReader;
|
||||
import ru.pulsar.jenkins.library.configuration.JobConfiguration;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class EDTTest {
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
TestUtils.setupMockedContext();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRingModule() throws IOException {
|
||||
|
||||
// given
|
||||
String config = IOUtils.resourceToString(
|
||||
"jobConfiguration.json",
|
||||
StandardCharsets.UTF_8,
|
||||
this.getClass().getClassLoader()
|
||||
);
|
||||
|
||||
// when
|
||||
JobConfiguration jobConfiguration = ConfigurationReader.create(config);
|
||||
String edtModule = EDT.ringModule(jobConfiguration);
|
||||
|
||||
// then
|
||||
assertThat(edtModule).isEqualTo("edt@2021.3.4:x86_64");
|
||||
}
|
||||
|
||||
}
|
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"v8version": "8.3.14.1944",
|
||||
"edtVersion": "2021.3.4:x86_64",
|
||||
"secrets": {
|
||||
"storage": "1234"
|
||||
},
|
||||
|
@@ -11,6 +11,9 @@ JobConfiguration config
|
||||
@Field
|
||||
String agent1C
|
||||
|
||||
@Field
|
||||
String agentEdt
|
||||
|
||||
void call() {
|
||||
|
||||
//noinspection GroovyAssignabilityCheck
|
||||
@@ -35,7 +38,8 @@ void call() {
|
||||
steps {
|
||||
script {
|
||||
config = jobConfiguration() as JobConfiguration
|
||||
agent1C = config.v8version
|
||||
agent1C = config.v8AgentLabel()
|
||||
agentEdt = config.edtAgentLabel()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -54,7 +58,7 @@ void call() {
|
||||
stages {
|
||||
stage('Трансформация из формата EDT') {
|
||||
agent {
|
||||
label 'edt'
|
||||
label agentEdt
|
||||
}
|
||||
when {
|
||||
beforeAgent true
|
||||
@@ -114,7 +118,7 @@ void call() {
|
||||
|
||||
stage('Трансформация в формат EDT') {
|
||||
agent {
|
||||
label 'edt'
|
||||
label agentEdt
|
||||
}
|
||||
when {
|
||||
beforeAgent true
|
||||
@@ -139,7 +143,7 @@ void call() {
|
||||
stages {
|
||||
stage('Валидация EDT') {
|
||||
agent {
|
||||
label 'edt'
|
||||
label agentEdt
|
||||
}
|
||||
steps {
|
||||
timeout(time: config.timeoutOptions.edtValidate, unit: TimeUnit.MINUTES) {
|
||||
|
Reference in New Issue
Block a user