diff --git a/demos/sonarqube/README.md b/demos/sonarqube/README.md index a6404706c6..858280c6f3 100644 --- a/demos/sonarqube/README.md +++ b/demos/sonarqube/README.md @@ -17,6 +17,16 @@ credentials: secret: "secret value" description: "Sonar token" +tool: + sonarRunnerInstallation: + installations: + - name: "SonarQube Scanner" + properties: + - installSource: + installers: + - sonarRunnerInstaller: + id: "7.3.0.5189" + unclassified: sonarglobalconfiguration: # mandatory buildWrapperEnabled: true @@ -36,4 +46,6 @@ unclassified: ## notes -You can add multiple installations. +- You can add multiple SonarQube server installations +- `tool:sonarRunnerInstallation` installs the SonarQube Scanner tool +- The `id` in sonarRunnerInstaller refers to the scanner version to install diff --git a/demos/sonarqube/sonar-with-scanner.yaml b/demos/sonarqube/sonar-with-scanner.yaml new file mode 100644 index 0000000000..a24663d7e8 --- /dev/null +++ b/demos/sonarqube/sonar-with-scanner.yaml @@ -0,0 +1,31 @@ +--- +# SonarQube Plugin Configuration with Scanner Tool Installation + +credentials: + system: + domainCredentials: + - credentials: + - string: + scope: GLOBAL + id: "sonarqube-token" + secret: "${SONAR_TOKEN}" + description: "SonarQube Access Token" + +tool: + sonarRunnerInstallation: + installations: + - name: "SonarQube Scanner" + properties: + - installSource: + installers: + - sonarRunnerInstaller: + id: "7.3.0.5189" + +unclassified: + sonarglobalconfiguration: + buildWrapperEnabled: true + installations: + - name: "sq1" + serverUrl: "http://sonarqube:9000" + credentialsId: "sonarqube-token" + diff --git a/integrations/src/test/java/io/jenkins/plugins/casc/SonarQubeTest.java b/integrations/src/test/java/io/jenkins/plugins/casc/SonarQubeTest.java index b2e0830186..6cce9e7665 100644 --- a/integrations/src/test/java/io/jenkins/plugins/casc/SonarQubeTest.java +++ b/integrations/src/test/java/io/jenkins/plugins/casc/SonarQubeTest.java @@ -5,11 +5,14 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.empty; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import hudson.plugins.sonar.SonarGlobalConfiguration; import hudson.plugins.sonar.SonarInstallation; +import hudson.plugins.sonar.SonarRunnerInstallation; import hudson.plugins.sonar.model.TriggersConfig; +import hudson.tools.InstallSourceProperty; import io.jenkins.plugins.casc.misc.ConfiguredWithReadme; import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithReadmeRule; import jenkins.model.GlobalConfiguration; @@ -41,6 +44,20 @@ public void configure_sonar_globalconfig() { assertTrue(triggers.isSkipScmCause()); assertTrue(triggers.isSkipUpstreamCause()); assertEquals("envVar", triggers.getEnvVar()); + + // Test SonarQube Scanner tool installation + final SonarRunnerInstallation.DescriptorImpl descriptor = + j.jenkins.getDescriptorByType(SonarRunnerInstallation.DescriptorImpl.class); + assertNotNull("SonarRunnerInstallation descriptor should not be null", descriptor); + final SonarRunnerInstallation[] installations = descriptor.getInstallations(); + assertEquals("Should have one SonarQube Scanner installation", 1, installations.length); + assertEquals("SonarQube Scanner", installations[0].getName()); + + // Verify installer is configured + final InstallSourceProperty installSourceProperty = installations[0].getProperties() + .get(InstallSourceProperty.class); + assertNotNull("InstallSourceProperty should be configured", installSourceProperty); + assertEquals("Should have one installer configured", 1, installSourceProperty.installers.size()); } @Test