【问题标题】:Groovy script to set SonarQube server settings in Jenkins programaticallyGroovy 脚本以编程方式在 Jenkins 中设置 SonarQube 服务器设置
【发布时间】:2018-04-12 10:45:06
【问题描述】:

我设置了 SonarQube 服务器并为 Jenkins 设置了 SonarQbue 插件。我知道我必须设置两个设置;一个在“管理 Jenkins”>“配置系统”>“SonarQube 服务器”中,另一个(即 SonarQube 扫描仪设置)在“管理 Jenkins”>“全局工具配置”>“SonarQube 扫描仪”中。

我搜索了如何使用 Groovy 脚本设置上述设置的值。当我在 Groovy 脚本控制台中尝试时,This script from GitHub 没有帮助,因为我收到以下错误:

groovy.lang.GroovyRuntimeException: Could not find matching constructor for: hudson.plugins.sonar.SonarInstallation(java.lang.String, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, hudson.plugins.sonar.model.TriggersConfig, java.lang.String, java.lang.String)

我也找不到关于这些 API 的任何文档。请求帮助。谢谢。

【问题讨论】:

    标签: java jenkins groovy sonarqube


    【解决方案1】:

    找到以下解决方案:

    import hudson.model.*
    import jenkins.model.*
    import hudson.plugins.sonar.*
    import hudson.plugins.sonar.model.TriggersConfig
    import hudson.tools.*
    
    // Required environment variables
    def sonar_name = "New setting"
    def sonar_server_url = "http://sonarqube:9000"
    def sonar_auth_token = "<token>"
    def sonar_mojo_version = ''
    def sonar_additional_properties = ''
    def sonar_triggers = new TriggersConfig()
    def sonar_additional_analysis_properties = ''
    def sonar_runner_version = '3.1.0.1141'
    
    def instance = Jenkins.getInstance()
    
    Thread.start {
    
        sleep(10000)
        println("Configuring SonarQube...")
    
        // Get the GlobalConfiguration descriptor of SonarQube plugin.
        def SonarGlobalConfiguration sonar_conf = instance.getDescriptor(SonarGlobalConfiguration.class)
    
        def sonar_inst = new SonarInstallation(
            sonar_name,
            sonar_server_url,
            sonar_auth_token,
            sonar_mojo_version,
            sonar_additional_properties,
            sonar_triggers,
            sonar_additional_analysis_properties
        )
    
        // Only add the new Sonar setting 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()
        }
    
        // Step 2 - Configure SonarRunner
        println("Configuring SonarRunner...")
        def desc_SonarRunnerInst = instance.getDescriptor("hudson.plugins.sonar.SonarRunnerInstallation")
        def sonarRunnerInstaller = new SonarRunnerInstaller(sonar_runner_version)
        def installSourceProperty = new InstallSourceProperty([sonarRunnerInstaller])
        def sonarRunner_inst = new SonarRunnerInstallation("New Setting SonarRunner " + sonar_runner_version, "", [installSourceProperty])
    
        // Only add our Sonar Runner if it does not exist - do not overwrite existing config
        def sonar_runner_installations = desc_SonarRunnerInst.getInstallations()
        def sonar_runner_inst_exists = false
        sonar_runner_installations.each {
            installation = (SonarRunnerInstallation) it
            if (sonarRunner_inst.getName() == installation.getName()) {
                sonar_runner_inst_exists = true
                println("Found existing installation: " + installation.getName())
            }
        }
        if (!sonar_runner_inst_exists) {
            sonar_runner_installations += sonarRunner_inst
            desc_SonarRunnerInst.setInstallations((SonarRunnerInstallation[]) sonar_runner_installations)
            desc_SonarRunnerInst.save()
        }
    
        // Save the state
        instance.save()
    }
    

    希望它可以帮助某人。谢谢。

    【讨论】:

    • auth token 没有被设置,我已经创建了我想设置的凭证,但是如果我通过凭证名称它就不起作用
    • 对我来说也一样,由于某种原因未设置 sonar_auth_token,我使用秘密文本类型创建它
    • @BigBoss 还没有
    • @BigBoss 你可以看看这段代码code 作为答案显示的代码是使用旧的已弃用的 SonarInstallation 构造函数,它没有传递凭据 id 的选项,你可以修改构造函数以传递凭据ID。试一试
    • 我想我试过但没有运气,它对你有用吗?如果是,您可以发送示例吗?谢谢
    猜你喜欢
    • 2019-11-08
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多