1
0
mirror of https://github.com/firstBitMarksistskaya/jenkins-lib.git synced 2025-03-06 16:16:24 +02:00

Merge pull request #74 from Segate-ekb/feature/useBranchPlugin_parametr

This commit is contained in:
Nikita Fedkin 2022-05-20 20:40:39 +03:00 committed by GitHub
commit df0c3f364d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 46 additions and 10 deletions

View File

@ -145,6 +145,7 @@ pipeline1C()
* Предполагается наличие единственной настройки `SonarQube installation` (`sonarqube` -> `sonarQubeInstallation`).
* Используется `sonar-scanner` из переменной окружения `PATH` (`sonarqube` -> `useSonarScannerFromPath`).
* Если использование `sonar-scanner` из переменной окружения `PATH` выключено, предполагается наличие настроенного глобального инструмента `SonarQube Scanner` с идентификатором инструмента `sonar-scanner` (`sonarqube` -> `sonarScannerToolName`).
* Применяется расчет аргументов командной строки для работы [`branch plugin`](https://github.com/mc1arke/sonarqube-community-branch-plugin) или коммерческих версий SonarQube (`sonarqube` -> `branchAnalysisConfiguration`).
* Если разработка ведется с использованием подсистемы [БСП "Обновление версии ИБ"](https://its.1c.ru/db/bsp315doc#content:4:1:issogl1_обновление_версии_иб), то в значение параметра `sonar.projectVersion=$configurationVersion` утилиты `sonar-scanner` можно передавать версию из созданного общего модуля.
* Шаг анализа не дожидается окончания фонового задания на сервере SonarQube и не анализирует результат прохождения Порога качества (`sonarqube` -> `waitForQualityGate`).
Для этого необходимо заполнить параметр (`sonarqube` -> `infoBaseUpdateModuleName`). Если параметр не заполнен, версия передается из корня конфигурации.

View File

@ -45,7 +45,7 @@
"useSonarScannerFromPath": true,
"sonarScannerToolName": "sonar-scanner",
"infoBaseUpdateModuleName" : "",
"useBranchPlugin" : true,
"branchAnalysisConfiguration": "fromEnv",
"waitForQualityGate": false
},
"syntaxCheck": {

View File

@ -178,9 +178,10 @@
"type" : "string",
"description" : "Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.\n Версия должна задаваться в виде присвоения `Описание.Версия = \"ваш номер версии\";`\n "
},
"useBranchPlugin" : {
"type" : "boolean",
"description" : "Используется ли Branch-plugin в SonarQube"
"branchAnalysisConfiguration" : {
"type" : "string",
"description" : "Вариант конфигурации branch plugin.\n Поддерживаемые варианты:\n * auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;\n * fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.\n Значение по умолчанию: fromEnv.",
"enum" : [ "auto", "fromEnv" ]
},
"waitForQualityGate" : {
"type" : "boolean",

View File

@ -0,0 +1,17 @@
package ru.pulsar.jenkins.library.configuration
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonPropertyDescription
enum BranchAnalysisConfiguration {
@JsonPropertyDescription(
"""Применяется автоконфигурация sonar-scanner силами branchplugin.
Так же может применяться для отключения конфигурирования, если branch plugin отсутствует"""
)
@JsonProperty("auto")
AUTO,
@JsonPropertyDescription("Применяется ручная конфигурация sonar-scanner на основе переменных среды")
@JsonProperty("fromEnv")
FROM_ENV
}

View File

@ -25,8 +25,12 @@ class SonarQubeOptions implements Serializable {
""")
String infoBaseUpdateModuleName
@JsonPropertyDescription("Используется ли Branch-plugin в SonarQube")
Boolean useBranchPlugin
@JsonPropertyDescription("""Вариант конфигурации branch plugin.
Поддерживаемые варианты:
* auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;
* fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.
Значение по умолчанию: fromEnv.""")
BranchAnalysisConfiguration branchAnalysisConfiguration
@JsonPropertyDescription("""Ожидать состояние Quality Gate от SonarQube после загрузки анализа. По умолчанию `false`.
Таймаут ожидания состояния равен таймауту шага.
@ -41,7 +45,7 @@ class SonarQubeOptions implements Serializable {
", sonarScannerToolName='" + sonarScannerToolName + '\'' +
", sonarQubeInstallation='" + sonarQubeInstallation + '\'' +
", infoBaseUpdateModuleName='" + infoBaseUpdateModuleName + '\'' +
", useBranchPlugin='" + useBranchPlugin + '\'' +
", branchAnalysisConfiguration='" + branchAnalysisConfiguration + '\'' +
", waitForQualityGate='" + waitForQualityGate + '\'' +
'}';
}

View File

@ -1,6 +1,7 @@
package ru.pulsar.jenkins.library.steps
import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.BranchAnalysisConfiguration
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.configuration.SourceFormat
import ru.pulsar.jenkins.library.ioc.ContextRegistry
@ -38,8 +39,17 @@ class SonarScanner implements Serializable {
String sonarCommand = "$sonarScannerBinary"
if (config.sonarQubeOptions.useBranchPlugin) {
sonarCommand += " -Dsonar.branch.name=$env.BRANCH_NAME"
def branchAnalysisConfiguration = config.sonarQubeOptions.branchAnalysisConfiguration
if (branchAnalysisConfiguration == BranchAnalysisConfiguration.FROM_ENV) {
if (env.CHANGE_ID){
sonarCommand += " -Dsonar.pullrequest.key=$env.CHANGE_ID"
sonarCommand += " -Dsonar.pullrequest.branch=$env.CHANGE_BRANCH"
sonarCommand += " -Dsonar.pullrequest.base=$env.CHANGE_TARGET"
} else {
sonarCommand += " -Dsonar.branch.name=$env.BRANCH_NAME"
}
} else (branchAnalysisConfiguration == BranchAnalysisConfiguration.AUTO) {
// no-op
}
String projectVersion = computeProjectVersion()

View File

@ -10,6 +10,7 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets;
import static org.assertj.core.api.Assertions.assertThat;
import static ru.pulsar.jenkins.library.configuration.BranchAnalysisConfiguration.AUTO;
class ConfigurationReaderTest {
@ -37,6 +38,7 @@ class ConfigurationReaderTest {
assertThat(jobConfiguration.getSonarQubeOptions().getSonarScannerToolName()).isEqualTo("sonar-scanner");
assertThat(jobConfiguration.getSonarQubeOptions().getSonarQubeInstallation()).isEqualTo("qa");
assertThat(jobConfiguration.getSonarQubeOptions().getUseSonarScannerFromPath()).isTrue();
assertThat(jobConfiguration.getSonarQubeOptions().getBranchAnalysisConfiguration()).isEqualTo(AUTO);
assertThat(jobConfiguration.getSecrets())
.hasFieldOrPropertyWithValue("storage", "1234")

View File

@ -17,7 +17,8 @@
]
},
"sonarqube": {
"sonarQubeInstallation": "qa"
"sonarQubeInstallation": "qa",
"branchAnalysisConfiguration": "auto"
},
"syntaxCheck": {
"checkModes": ["-ThinClient"]