Skip to content

Commit

Permalink
Определение версии (#58)
Browse files Browse the repository at this point in the history
Co-authored-by: kuzja086 <[email protected]>
Co-authored-by: Nikita Fedkin <[email protected]>
  • Loading branch information
3 people authored Dec 9, 2021
1 parent c567cca commit 0e2e9d0
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 17 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,5 +143,6 @@ pipeline1C()
* Предполагается наличие единственной настройки `SonarQube installation` (`sonarqube` -> `sonarQubeInstallation`).
* Используется `sonar-scanner` из переменной окружения `PATH` (`sonarqube` -> `useSonarScannerFromPath`).
* Если использование `sonar-scanner` из переменной окружения `PATH` выключено, предполагается наличие настроенного глобального инструмента `SonarQube Scanner` с идентификатором инструмента `sonar-scanner` (`sonarqube` -> `sonarScannerToolName`).
* Версия из корня конфигурации передается утилите `sonar-scanner` как значение параметра `sonar.projectVersion=$configurationVersion`.
* Если разработка ведется с использованием подсистемы [БСП "Обновление версии ИБ"](https://its.1c.ru/db/bsp315doc#content:4:1:issogl1_обновление_версии_иб), то в значение параметра `sonar.projectVersion=$configurationVersion` утилиты `sonar-scanner` можно передавать версию из созданного общего модуля.
Для этого необходимо заполнить параметр (`sonarqube` -> `infoBaseUpdateModuleName`). Если параметр не заполнен, версия передается из корня конфигурации.
* Если выполнялась валидация EDT, результаты валидации в формате `generic issues` передаются утилите `sonar-scanner` как значение параметра `sonar.externalIssuesReportPaths`.
3 changes: 2 additions & 1 deletion resources/globalConfiguration.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
"sonarqube": {
"sonarQubeInstallation": "",
"useSonarScannerFromPath": true,
"sonarScannerToolName": "sonar-scanner"
"sonarScannerToolName": "sonar-scanner",
"infoBaseUpdateModuleName" : ""
},
"syntaxCheck": {
"groupErrorsByMetadata": true,
Expand Down
4 changes: 4 additions & 0 deletions resources/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,10 @@
"sonarScannerToolName" : {
"type" : "string",
"description" : "Имя настроенной утилиты sonar-scanner.\nПрименяется, если useSonarScannerFromPath установлено в false."
},
"infoBaseUpdateModuleName" : {
"type" : "string",
"description" : "Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.\n Версия должна задаваться в виде присвоения `Описание.Версия = \"ваш номер версии\";`\n "
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,19 @@ class SonarQubeOptions implements Serializable {
)
String sonarScannerToolName

@JsonPropertyDescription("""Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.
Версия должна задаваться в виде присвоения `Описание.Версия = "ваш номер версии";`
""")
String infoBaseUpdateModuleName

@Override
@NonCPS
String toString() {
return "SonarQubeOptions{" +
"useSonarScannerFromPath=" + useSonarScannerFromPath +
", sonarScannerToolName='" + sonarScannerToolName + '\'' +
", sonarQubeInstallation='" + sonarQubeInstallation + '\'' +
", infoBaseUpdateModuleName='" + infoBaseUpdateModuleName + '\'' +
'}';
}
}
41 changes: 26 additions & 15 deletions src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,9 @@ import ru.pulsar.jenkins.library.utils.VersionParser
class SonarScanner implements Serializable {

private final JobConfiguration config;
private final String rootFile

SonarScanner(JobConfiguration config) {
this.config = config
if (config.sourceFormat == SourceFormat.EDT){
this.rootFile = "$config.srcDir/src/Configuration/Configuration.mdo"
} else {
this.rootFile = "$config.srcDir/Configuration.xml"
}
}

def run() {
Expand All @@ -44,15 +38,9 @@ class SonarScanner implements Serializable {

String sonarCommand = "$sonarScannerBinary -Dsonar.branch.name=$env.BRANCH_NAME"

String configurationVersion
if (config.sourceFormat == SourceFormat.EDT) {
configurationVersion = VersionParser.edt(rootFile)
} else {
configurationVersion = VersionParser.configuration(rootFile)
}

if (configurationVersion) {
sonarCommand += " -Dsonar.projectVersion=$configurationVersion"
String projectVersion = computeProjectVersion()
if (projectVersion) {
sonarCommand += " -Dsonar.projectVersion=$projectVersion"
}

if (config.stageFlags.edtValidate) {
Expand All @@ -69,4 +57,27 @@ class SonarScanner implements Serializable {
steps.cmd(sonarCommand)
}
}

private String computeProjectVersion() {
String projectVersion
String nameOfModule = config.sonarQubeOptions.infoBaseUpdateModuleName

if (!nameOfModule.isEmpty()) {
String rootFile
if (config.sourceFormat == SourceFormat.EDT) {
rootFile = "$config.srcDir/src/CommonModules/$nameOfModule/Module.bsl"
} else {
rootFile = "$config.srcDir/CommonModules/$nameOfModule/Ext/Module.bsl"
}
projectVersion = VersionParser.ssl(rootFile)
} else if (config.sourceFormat == SourceFormat.EDT) {
String rootFile = "$config.srcDir/src/Configuration/Configuration.mdo"
projectVersion = VersionParser.edt(rootFile)
} else {
String rootFile = "$config.srcDir/Configuration.xml"
projectVersion = VersionParser.configuration(rootFile)
}

return projectVersion
}
}
5 changes: 5 additions & 0 deletions src/ru/pulsar/jenkins/library/utils/VersionParser.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import java.util.regex.Pattern

class VersionParser implements Serializable {
final static VERSION_REGEXP = ~/(?i)<version>(.*)<\/version>/
final static VERSION_REGEXP_SSL = ~/(?i)Описание.Версия = "(.*)";/

static String configuration(rootFile = 'src/cf/Configuration.xml') {
return extractVersionFromFile(rootFile, VERSION_REGEXP)
Expand All @@ -21,6 +22,10 @@ class VersionParser implements Serializable {
return extractVersionFromFile(versionFile, VERSION_REGEXP)
}

static String ssl(versionFile) {
return extractVersionFromFile(versionFile, VERSION_REGEXP_SSL)
}

private static String extractVersionFromFile(String filePath, Pattern regexp) {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()

Expand Down

0 comments on commit 0e2e9d0

Please sign in to comment.