2015-04-08 3 views
1

Я добавил свойства сонара в файл build.gradle, чтобы загрузить проект на сервер при создании проекта с использованием градиента. ниже мой файл build.gradle.Как загрузить проект java для разработки градиента в сервер сонара

import org.tmatesoft.svn.core.wc 
apply plugin: 'java' 
apply plugin: 'maven' 
apply plugin: 'eclipse' 
apply plugin: 'findbugs' 
apply plugin: 'sonar-runner' 
apply plugin: "jacoco" 
group = 'com.example.service' 
sourceCompatibility = 1.5 
version = '1.0' 
jar { 
    manifest { 
     attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version 
    } 
} 
findbugs { 
     // make findbugs non build breaking 
     ignoreFailures = true 
} 
repositories { 
    mavenLocal() 
    mavenCentral() 
} 
dependencies { 
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2' 
    compile 'org.apache.commons:commons-lang3:3.1' 
    compile "org.codehaus.sonar.runner:sonar-runner-api:2.4" 
    testCompile group: 'junit', name: 'junit', version: '4.+' 
} 
test { 
    systemProperties 'property': 'value' 
} 
sonarRunner { 
    sonarProperties { 
     property "sonar.host.url", "http://localhost:9000" 
     property "sonar.sourceEncoding", "UTF-8" 
     property "sonar.projectName", "$project.name" 
     property "sonar.projectKey", "$project.group:$project.name" 
     property "sonar.projectBaseDir","$project.projectDir" 
     property "sonar.working.directory","$project.buildDir/sonar" 
     property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/test.exec" 
    } 
} 
test { 
    jacoco { 
     destinationFile = file("$buildDir/jacoco/test.exec") 
    } 
} 
uploadArchives { 
     repositories { 
      mavenLocal() 
     } 
    } 

Но когда я строил проект из затмения, ничего не происходит. В консоли отсутствует сообщение об ошибке, а проект также не загружается на сервер сонара.

Кто-нибудь знает, как загрузить проект на сервер Sonar при создании с помощью Gradle?

+0

Вы выполняете задачу sonarRunner? –

ответ

0

См. Пару моих сообщений, и вы найдете то, что ищете. В основном, вы должны использовать:

  1. применять плагин: 'сонара-раннер'
  2. Затем я следующий конфиг в < YOUR_GRADLE_HOME> /init.d/someglobal.gradle файл


allprojects { 

    apply plugin: 'java' 
    apply plugin: 'codenarc' 
    apply plugin: 'pmd' 
    apply plugin: 'findbugs' 
    apply plugin: 'checkstyle' 
    apply plugin: 'jacoco' 

    apply plugin: 'sonar-runner' 

    //JavaCompile(Works with recent Gradle versions) or Compile (works with Gradle 1.6) 
    //tasks.withType(Compile) { 
    tasks.withType(JavaCompile) { 
    options.debug = true 
    options.compilerArgs = ["-g"] 
    } 

    //You don't need sourceSets if your project is following Maven/Gradle standard structure. In my case, we don't follow src/main/java but have src/java thus, in the global file, I have dont_change_me as the value for sourceSets main java and I'm setting it to src/java in the Project's build.gradle. dont_change_me is required here as I'm/was using sourceSet.main.xx.xxx values in few of the tasks here. 

    sourceSets { 
     main { 
     java { 
      srcDir 'dont_change_me' 
     } 
     resources { 
      srcDir 'dont_change_me' 
     } 
     } 
     test { 
     java { 
      srcDir 'dont_change_me' 
     } 
     resources { 
      srcDir 'dont_change_me' 
     } 
     } 
     integrationTest { 
     java { 
      srcDir 'dont_change_me' 
     } 
     resources { 
      srcDir 'dont_change_me' 
     } 
     } 
     acceptanceTest { 
     java { 
      srcDir 'dont_change_me' 
     } 
     resources { 
      srcDir 'dont_change_me' 
     } 
     } 

    } 

    def sonarServerUrl = "kobalori.company.com" 

    sonarRunner { 
    sonarProperties { 
     property "sonar.host.url", "http://$sonarServerUrl:9000" 
     property "sonar.jdbc.url", "jdbc:h2:tcp://$sonarServerUrl:9092/sonar" 
     property "sonar.jdbc.driverClassName", "org.h2.Driver" 
     property "sonar.jdbc.username", "sonar" 
     property "sonar.jdbc.password", "sonar" 
     property "sonar.junit.reportsPath", "build/test-results/UT" 
     property "sonar.surefire.reportsPath", "build/test-results/UT" 
     //property "sonar.dynamicAnalysis", "reuseReports" 
     property "sonar.binaries", "build/classes/main" 
     property "sonar.java.binaries", "build/classes/main" 
     // property "sonar.libraries", "build/libs/*.jar" 
     property "sonar.sources", "src/java" 
     //property "sonar.sources", "src/main/groovy" 
     //property "sonar.sources", "src/java, src/main/groovy" 
     //property "sonar.tests", "test/java, src/test/groovy, src/groovy-test, src/java-test" 
     //property "sonar.tests", "src/test/groovy" 
     property "sonar.tests", "test/java, src/java-test" 

     //properties ["sonar.sources"] = sourceSets.main.allSource.srcDirs 
     //properties ["sonar.tests"] += sourceSets.test.allJava.srcDirs 
     //properties ["sonar.tests"] += sourceSets.integrationTest.allJava.srcDirs 

     } 
    } 

    //sonarRunner { 
    // toolVersion = '2.4' 
    //} 


    checkstyle { 
     configFile = new File(rootDir, "config/checkstyle.xml") 
     ignoreFailures = true 
     //sourceSets = [sourceSets.main, sourceSets.test, sourceSets.integrationTest] 
     sourceSets = [sourceSets.main] 
    } 


    findbugs { 
     ignoreFailures = true 
     sourceSets = [sourceSets.main] 
     //toolVersion = "2.0.3" 
    } 

    // pmd { 
    //  ruleSets = ["basic", "braces", "design"] 
    //  ignoreFailures = true 
    // } 

    //Required with Gradle 2.0+ -- 2.0+ -- 2.3 
    pmd { 
     ruleSets = ["java-basic", "java-braces", "java-design" ] 
     ignoreFailures = true 
    } 

//Try this or later version too. 
//pmd { 
// toolVersion = '4.3' 
//} 

    jacoco { 
     //toolVersion = "0.6.2.201302030002" 
     //toolVersion = "0.7.0.201403182114" 
     //toolVersion = "0.7.1.201404171759" 
     toolVersion = "0.7.2.201409121644" 

     reportsDir = file("$buildDir/customJacocoReportDir") 

    } 

task testReport(type: TestReport) { 
    destinationDir = file("$buildDir/reports/tests/allTests") 
    //testResultDirs = file("$buildDir/test-results/allTests") 
} 


    test { 
    maxParallelForks = 5 
    forkEvery = 50 
    ignoreFailures = true 

    //testReportDir = file("$buildDir/reports/tests/UT") 
    //destinationDir = file("$buildDir/reports/tests/UT") 
    //testResultsDir = file("$buildDir/test-results/UT") 

    //testLogging.showStandardStreams = true 

    //onOutput { descriptor, event -> 
    // logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message) 
    //} 

    //Following Jacoco test section is required only in Jenkins instance extra common file 
    jacoco { 
     //The following vars works ONLY with 1.6 of Gradle 
    // destPath = file("$buildDir/jacoco/UT/jacocoUT.exec") 
    // classDumpPath = file("$buildDir/jacoco/UT/classpathdumps") 

     //Following vars works only with versions >= 1.7 version of Gradle 
     destinationFile = file("$buildDir/jacoco/UT/jacocoUT.exec") 
     // classDumpFile = file("$buildDir/jacoco/UT/classpathdumps") 
    } 
    } 

    task integrationTest(type: Test) { 
    //Always run tests 
    outputs.upToDateWhen { false } 
    ignoreFailures = true 

    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 

    //testReportDir = file("$buildDir/reports/tests/IT") 
    //testResultsDir = file("$buildDir/test-results/IT") 

    //Following Jacoco test section is required only in Jenkins instance extra common file 
    jacoco { 
     //This works with 1.6 
     //destPath = file("$buildDir/jacoco/IT/jacocoIT.exec") 
     // classDumpPath = file("$buildDir/jacoco/IT/classpathdumps") 

     //Following works only with versions >= 1.7 version of Gradle 
     destinationFile = file("$buildDir/jacoco/IT/jacocoIT.exec") 
     // classDumpFile = file("$buildDir/jacoco/IT/classpathdumps") 
    } 
    } 

    task acceptanceTest (type: Test) { 
    //Always run tests 
    outputs.upToDateWhen { false } 
    ignoreFailures = true 

    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 

    //testReportDir = file("$buildDir/reports/tests/AT") 
    //testResultsDir = file("$buildDir/test-results/AT") 

    //Following Jacoco test section is required only in Jenkins instance extra common file 
    jacoco { 
     //This works with 1.6 
     //destPath = file("$buildDir/jacoco/AT/jacocoAT.exec") 
     // classDumpPath = file("$buildDir/jacoco/AT/classpathdumps") 

     //Following works only with versions >= 1.7 version of Gradle 
     destinationFile = file("$buildDir/jacoco/AT/jacocoAT.exec") 
     // classDumpFile = file("$buildDir/jacoco/AT/classpathdumps") 
    } 
    } 

    jacocoTestReport { 
     group = "Reporting" 
     description = "Generate Jacoco coverage reports after running tests." 
     //ignoreFailures = true 

     //executionData = files('build/jacoco/UT/jacocoUT.exec') 
     //executionData = files('build/jacoco/IT/jacocoIT.exec') 
     //executionData = files('build/jacoco/UT/jacocoUT.exec', 'build/jacoco/IT/jacocoIT.exec') 

     //executionData = files(['build/jacoco/UT/jacocoUT.exec', 'build/jacoco/IT/jacocoIT.exec']) 
     executionData = fileTree(dir: 'build/jacoco', include: '**/*.exec') 

     reports { 
      xml{ 
       enabled true 
       //Following value is a file 
       destination "${buildDir}/reports/jacoco/xml/jacoco.xml" 
      } 
      csv.enabled false 
      html { 
       enabled true 
       //Following value is a folder 
       destination "${buildDir}/reports/jacoco/html" 
      } 
     } 

     //sourceDirectories = files(sourceSets.main.allJava.srcDirs) 
     sourceDirectories = files(['src/java','src/main/java', 'src/main/groovy']) 
     classDirectories = files('build/classes/main') 

     //------------------------------------------ 
     //additionalSourceDirs = files(['test/java','test/groovy','src/java-test', 'src/groovy-test']) 
     //additionalSourceDirs = files(['src/test/groovy']) 
     //additionalSourceDirs += files('src/java-test') 

     //additionalClassDirs = files('build/classes/test') 
     //additionalClassDirs += files('build/classes/integrationTest') 
     //additionalClassDirs += files('build/classes/acceptanceTest') 
     //------------------------------------------ 


     //IGNORE THE FOLLOWING 
     //------------------------------------------ 
     //sourceDirectories = files(sourceSets.main.allJava.srcDirs) 
     //classDirectories = files(sourceSets.main.output.classesDir) 
     //classDirectories = files("build/classes/main") 

     //additionalSourceDirs = files("test/java") 
     //additionalSourceDirs += files("src/java-test") 

     //additionalClassDirs = files("build/classes/test") 
     //additionalClassDirs += files("build/classes/integrationTest") 

     //additionalSourceDirs = fileTree(dir: "test", include: "**/*.*") 
     //additionalSourceDirs += fileTree(dir: "src/java-test", include: "**/*.*") 

     //additionalClassDirs = fileTree(dir: "build/*est", include: "**/*.class") 
     //additionalClassDirs += fileTree(dir: "build/jacoco/*T/classpathdumps/com/thc", include: "**/*.class") 

     //additionalClassDirectories = fileTree(dir: "build/*est", include: "**/*.class") 
     //additionalClassDirectories += fileTree(dir: "build/jacoco/*T/classpathdumps/com/thc", include: "**/*.class") 

     //additionalSourceDirs = files(['test/java', 'src/java-test']) 
     //additionalSourceDirs = files(sourceSets.test.allJava.srcDirs) 
     //additionalSourceDirs += files(sourceSets.integrationTest.allJava.srcDirs) 
     //additionalSourceDirs += files(sourceSets.acceptanceTest.allJava.srcDirs) 
     // additionalClassDirs = files(['build/jacoco/UT/classpathdumps/com/thc', 'build/jacoco/IT/classpathdumps/com/thc']) 
     //additionalClassDirs = files(['build/jacoco/UT/classpathdumps/com/thc']) 


    //additionalSourceDirs = files('test/java', 'src/java-test') 
    // additionalClassDirs = files('build/jacoco/UT/classpathdumps/com/thc', 'build/jacoco/IT/classpathdumps/com/thc') 

    //sourceDirectories = files('src/main/java') 
    // classDirectories = files('build/classes/main') 

    //sourceDirectories = fileTree('src/main/java') 
    // classDirectories = fileTree('build/classes/main') 


    //additionalSourceDirectories = fileTree('test/java', 'test/resources', 'src/java-test') 
    // additionalClassDirectories = fileTree('build/classes/test', 'build/classes/integrationTest') 


    //additionalSourceDirs = files(sourceSets.test.allJava.srcDirs,sourceSets.integrationTest.allJava.srcDirs) 
    //additionalSourceDirs = files(sourceSets.*.allJava.srcDirs) 
    //additionalSourceDirs += files(sourceSets.test.allJava.srcDirs) 
    //additionalSourceDirs += files(sourceSets.integrationTest.allJava.srcDirs) 

    //additionalSourceDirs = files('src/java', 'test/java', 'test/resources', 'src/java-test', 'conf') 
    //additionalClasseDirs = files('build/classes') 
    //executionData = files('build/jacoco/test.exec', 'build/jacoco/integrationTest.exec', 'build/jacoco/acceptanceTest.exec') 

    //additionalSourceDirs = files(sourceSets.integrationTest.allSource.srcDirs) 

    //additionalSourceDirs = files('src/java', 'test/java', 'test/resources', 'src/java-test', 'conf') 
    //additionalSourceDirs = files(sourceSets.test.allJava.srcDirs) 
    //additionalSourceDirs = files(sourceSets.integrationTest.allJava.srcDirs) 
    //additionalSourceDirs = files([sourceSets.main.allJava.srcDirs) 
    } 
} 

Вы можете игнорировать // прокомментированные строки, поскольку я просто играл. После завершения сборки Gradle вам необходимо запустить jacocoTestReport.

я запускаю это:

gradle clean build jacocoTestReport 

(Это поможет мне построить, покрытие кода исходного основного кода с помощью тестов Unit).

Для получения информации об ИТ (охват тестового кода интеграции или любое покрытие неинтерактивных тестов) сначала запускаю внешнюю JVM (Tomcat и т. Д.). Затем я передаю информацию агента jacoco во внешнюю JVM (то есть Tomcat в моем случае), как это (где я помещаю jacocoagent.jar внутри некоторой папки (tomcat в моем случае) и говорю внешнему JVM (экземпляр Tomcat), чтобы начать заполнять Покрытие кода Jacoco, это создаст файл jacocoIT.exec для покрытия кода основного исходного кода с помощью ИТ-тестов вместо модульных тестов). Примечание: У меня есть эта PROJ_EXTRA_JVM_OPTS переменной вкладываются в сценарии запуска Tomcat, где я передаю его на Tomcat запустить команду так, чтобы экземпляр Tomcat знать, где для создания jacocoIT.exec файла:

export PROJ_EXTRA_JVM_OPTS=-javaagent:tomcat/jacocoagent.jar=destfile=build/jacoco/IT/jacocoIT.exec,append=false 

Тогда я бегу Gradle задачи запустить IT-тесты,

gradle integrationTest 

Затем, когда они работают успешно, вы заметите jacocoIT.exec имеет некоторый размер файла (но это все еще не завершена). Чтобы Tomcat очистил информацию о покрытии кода в файле jacocoIT.exec, вы должны теперь STOP tomcat (целевой JVM) экземпляр.

Я запустил скрипт stop tomcat, и Tomcat теперь остановлен. На данный момент я обнаружил, что мой файл jacocoIT.exec теперь полностью заполнен большим размером файла (чем это было до Stop tomcat).

На этом этапе я запускаю задачу Gradle jacocoTestReport и SonarRunner путем запуска (который генерирует COMBINED Unit + IT-код покрытия основного исходного кода с помощью тестов Unit + IT +, также отправляет информацию в Sonar, используя/устанавливая - Dsonar.xx.уу = значение (которое вы можете легко передать в командной строке или в Дженкинс (Invoke Gradle Plugin> Переключатели/опций):

gradle jacocoTestReport -x test -x testClasses sonarRunner 

ПРИМЕЧАНИЕ: Убедитесь, что вы передаете -Dsonar.xx переменную правильно

. Для экс: я прохожу следующие опции/переключатели во время вызова sonarRunner задачи (это предполагает в случае SonarQube, у вас есть панель проекта с необходимым Widgets на месте/включено):

Здесь переменных $ {TestType} имеет значение = IT В нем все остальные переменные a re определены в конфигурации Jenkins Global (JENKINS_URL и т. д. или они доступны как переменные среды по умолчанию Jenkins). Я использую SVN (как средство управления исходными текстами), таким образом, используется SVN_URL (который является переменной env по умолчанию Jenkins, если ваше задание Jenkins использует SVN в качестве элемента управления Source для исходного кода проверки).

--stacktrace -x test -x testClasses -Dsonar.jacoco.itReportPath=build/jacoco/${testType}/jacoco${testType}.exec -Dsonar.sources=src/java -Dsonar.java.binaries=build/classes/main -Dsonar.binaries="build/classes/main" -Dsonar.tests=test/java,src/java-test -Dsonar.jacoco.reportPath=build/jacoco/UT/jacocoUT.exec -Dsonar.junit.reportsPath=build/test-results -Dsonar.surefire.reportsPath=build/test-results -Dsonar.dynamicAnalysis=reuseReports -Dsonar.build-stability.url=jenkins:${JENKINS_URL}/job/${JOB_NAME} -Dsonar.scm.url=scm:svn:${SVN_URL} 
Смежные вопросы