SonarQube Jenkins Plugin init groovy for global configuration

932 views
Skip to first unread message

iniw...@gmail.com

unread,
Aug 2, 2016, 1:17:25 PM8/2/16
to SonarQube, duarte....@sonarsource.com
I'm trying to setting up configuration of SonarQube Server and SonarQube Runner via init groovy script for Jenkins.

With this PR https://github.com/SonarSource/sonar-scanner-jenkins/pull/38 SonarQube Server configuration was moved to some Jenkins "GlobalConfiguration" class and now after execution of init groovy script, i don't see that in UI my settings are presented, it's became available only restart of Jenkins server. And the tricky thing is that after i executed my groovy script, i could retrieve information and see that it was added in configuration, i'm just missing how it could be updated from UI side "on the fly" without restart of Jenkins.

Here's the script:
def SonarGlobalConfiguration sonar_conf = new SonarGlobalConfiguration();

def sonar_inst = new SonarInstallation(
   
"Sonar", // Name
    sonar_server_url,
   
SQServerVersions.SQ_5_1_OR_LOWER,
   
"", // Token
    sonar_db_url,
    sonar_db_login
,
    sonar_db_password
,
    sonar_plugin_version
,
    sonar_additional_props
,
   
new TriggersConfig(),
    sonar_account_login
,
    sonar_account_password
,
   
"" // Additional Analysis Properties
)

// Only add Sonar if it does not exist - do not overwrite existing config
def sonar_installations = sonar_conf.getInstallations()
def sonar_inst_exists = false
sonar_installations
.each {
    installation
= (SonarInstallation) it
   
if (sonar_inst.getName() == installation.getName()) {
        sonar_inst_exists
= true
        println
("Found existing installation: " + installation.getName())
   
}
}

if (!sonar_inst_exists) {
    sonar_installations
+= sonar_inst
    sonar_conf
.setInstallations((SonarInstallation[]) sonar_installations)
    sonar_conf
.save()
}


iniw...@gmail.com

unread,
Aug 2, 2016, 4:53:45 PM8/2/16
to SonarQube, duarte....@sonarsource.com, iniw...@gmail.com
Double-checked, configuration is presented in "hudson.plugins.sonar.SonarGlobalConfiguration.xml" file, but i wrote previously, not presented in UI.

Duarte Meneses

unread,
Aug 4, 2016, 4:59:45 AM8/4/16
to SonarQube, duarte....@sonarsource.com, iniw...@gmail.com
SonarGlobalConfiguration gets loaded on startup of the sonar plugin and is kept in memory.
You need to fetch that single instance from Jenkins' object container.

I'm not familiar with groovy scripts in Jenkins but it might be something like this:
import hudson.model.*
import hudson.plugins.sonar.SonarGlobalConfiguration
 
SonarGlobalConfiguration global = Hudson.instance.getDescriptorByType(SonarGlobalConfiguration.class)

This will probably only work as a system script (running in Jenkins master, with the main classloader).

iniw...@gmail.com

unread,
Aug 13, 2016, 7:41:24 AM8/13/16
to SonarQube, duarte....@sonarsource.com, iniw...@gmail.com
Thank you, this is exactly what i missed after i have migrated code on new GlobalConfiguration, now it works.
Reply all
Reply to author
Forward
0 new messages