Skip to content

Commit 105ee6d

Browse files
committed
Merge pull request #406 from CoreMedia/sonar
added support for Sonar Plugin
2 parents ebf05ee + 4b4c138 commit 105ee6d

File tree

6 files changed

+167
-0
lines changed

6 files changed

+167
-0
lines changed

docs/Home.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Have a look at the [Jenkins Job DSL Gradle example](https://github.com/sheehan/j
1919
* 1.31 (unreleased)
2020
* Added support for [Build Node Column Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Build+Node+Column+Plugin)
2121
* Added support for [Pre-SCM Build Step Plugin](https://wiki.jenkins-ci.org/display/JENKINS/pre-scm-buildstep)
22+
* Added support for [Sonar Plugin](http://docs.sonarqube.org/display/SONAR/Jenkins+Plugin)
2223
* Added `ignorePostCommitHooks` option for SCM trigger
2324
* Added support for [PostBuildScript Plugin](https://wiki.jenkins-ci.org/display/JENKINS/PostBuildScript+Plugin)
2425
* The enum argument of `localRepository` for the Maven job and context has changed, see [[Migration]]

docs/Job-reference.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ freeStyleJob(String name) { // since 1.30
250250
publishScp(String site, Closure scpClosure)
251251
rundeck(String jobId, Closure rundeckClosure = null) // since 1.24
252252
s3(String profile, Closure s3Closure) // since 1.26
253+
sonar(Closure sonarClosure = null) // since 1.31
253254
stashNotifier(Closure stashNotifierClosure = null) // since 1.23
254255
tasks(String pattern, excludePattern = '', high = '', normal = '', low = '',
255256
ignoreCase = false, Closure staticAnalysisClosure = null)
@@ -4419,6 +4420,41 @@ job('example-3') {
44194420
44204421
(Since 1.23)
44214422
4423+
### Sonar
4424+
4425+
```groovy
4426+
job {
4427+
publishers {
4428+
sonar {
4429+
branch(String branch)
4430+
overrideTriggers {
4431+
skipIfEnvironmentVariable(String environmentVariable)
4432+
}
4433+
}
4434+
}
4435+
}
4436+
```
4437+
4438+
Allows to trigger SonarQube analysis. Requires the
4439+
[Sonar Plugin](http://docs.sonarqube.org/display/SONAR/Jenkins+Plugin).
4440+
4441+
```groovy
4442+
// run Sonar analysis for feature-xy branch,
4443+
// but skip if SKIP_SONAR environment variable is set to true
4444+
job {
4445+
publishers {
4446+
sonar {
4447+
branch('feature-xy')
4448+
overrideTriggers {
4449+
skipIfEnvironmentVariable('SKIP_SONAR')
4450+
}
4451+
}
4452+
}
4453+
}
4454+
```
4455+
4456+
(since 1.31)
4457+
44224458
### StashNotifier Publisher
44234459
44244460
```groovy

job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/publisher/PublisherContext.groovy

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1725,6 +1725,50 @@ class PublisherContext implements Context {
17251725
}
17261726
}
17271727

1728+
/**
1729+
* <hudson.plugins.sonar.SonarPublisher>
1730+
* <jdk>(Inherit From Job)</jdk>
1731+
* <branch/>
1732+
* <language/>
1733+
* <mavenOpts/>
1734+
* <jobAdditionalProperties/>
1735+
* <triggers>
1736+
* <skipScmCause>false</skipScmCause>
1737+
* <skipUpstreamCause>false</skipUpstreamCause>
1738+
* <envVar/>
1739+
* </triggers>
1740+
* <mavenInstallationName>(Inherit From Job)</mavenInstallationName>
1741+
* <rootPom/>
1742+
* <settings class="jenkins.mvn.DefaultSettingsProvider"/>
1743+
* <globalSettings class="jenkins.mvn.DefaultGlobalSettingsProvider"/>
1744+
* <usePrivateRepository>false</usePrivateRepository>
1745+
* </hudson.plugins.sonar.SonarPublisher>
1746+
*/
1747+
void sonar(@DslContext(SonarContext) Closure sonarClosure = null) {
1748+
SonarContext sonarContext = new SonarContext()
1749+
ContextHelper.executeInContext(sonarClosure, sonarContext)
1750+
1751+
publisherNodes << new NodeBuilder().'hudson.plugins.sonar.SonarPublisher' {
1752+
jdk('(Inherit From Job)')
1753+
branch(sonarContext.branch ?: '')
1754+
language()
1755+
mavenOpts()
1756+
jobAdditionalProperties()
1757+
if (sonarContext.overrideTriggers) {
1758+
triggers {
1759+
skipScmCause(false)
1760+
skipUpstreamCause(false)
1761+
envVar(sonarContext.sonarTriggersContext.skipIfEnvironmentVariable ?: '')
1762+
}
1763+
}
1764+
mavenInstallationName('(Inherit From Job)')
1765+
rootPom()
1766+
settings(class: 'jenkins.mvn.DefaultSettingsProvider')
1767+
globalSettings(class: 'jenkins.mvn.DefaultGlobalSettingsProvider')
1768+
usePrivateRepository(false)
1769+
}
1770+
}
1771+
17281772
private static createDefaultStaticAnalysisNode(String publisherClassName, Closure staticAnalysisClosure,
17291773
String pattern) {
17301774
StaticAnalysisContext staticAnalysisContext = new StaticAnalysisContext()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package javaposse.jobdsl.dsl.helpers.publisher
2+
3+
import javaposse.jobdsl.dsl.Context
4+
import javaposse.jobdsl.dsl.ContextHelper
5+
import javaposse.jobdsl.dsl.DslContext
6+
7+
class SonarContext implements Context {
8+
String branch
9+
boolean overrideTriggers
10+
final SonarTriggersContext sonarTriggersContext = new SonarTriggersContext()
11+
12+
void branch(String branch) {
13+
this.branch = branch
14+
}
15+
16+
void overrideTriggers(@DslContext(SonarTriggersContext) Closure sonarTriggersClosure) {
17+
overrideTriggers = true
18+
ContextHelper.executeInContext(sonarTriggersClosure, sonarTriggersContext)
19+
}
20+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package javaposse.jobdsl.dsl.helpers.publisher
2+
3+
import javaposse.jobdsl.dsl.Context
4+
5+
class SonarTriggersContext implements Context {
6+
String skipIfEnvironmentVariable
7+
8+
void skipIfEnvironmentVariable(String environmentVariable) {
9+
this.skipIfEnvironmentVariable = environmentVariable
10+
}
11+
}

job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/helpers/publisher/PublisherContextSpec.groovy

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3025,4 +3025,59 @@ class PublisherContextSpec extends Specification {
30253025
scriptOnlyIfSuccess[0].value() == false
30263026
}
30273027
}
3028+
3029+
def 'call sonar with no options'() {
3030+
when:
3031+
context.sonar()
3032+
3033+
then:
3034+
with(context.publisherNodes[0]) {
3035+
name() == 'hudson.plugins.sonar.SonarPublisher'
3036+
children().size() == 10
3037+
jdk[0].value() == '(Inherit From Job)'
3038+
branch[0].value() == ''
3039+
language[0].value().empty
3040+
mavenOpts[0].value().empty
3041+
jobAdditionalProperties[0].value().empty
3042+
mavenInstallationName[0].value() == '(Inherit From Job)'
3043+
rootPom[0].value().empty
3044+
settings[0].value().empty
3045+
settings[0].@class == 'jenkins.mvn.DefaultSettingsProvider'
3046+
globalSettings[0].value().empty
3047+
globalSettings[0].@class == 'jenkins.mvn.DefaultGlobalSettingsProvider'
3048+
usePrivateRepository[0].value() == false
3049+
}
3050+
}
3051+
3052+
def 'call sonar with all options'() {
3053+
when:
3054+
context.sonar {
3055+
branch('test')
3056+
overrideTriggers {
3057+
skipIfEnvironmentVariable('FOO')
3058+
}
3059+
}
3060+
3061+
then:
3062+
with(context.publisherNodes[0]) {
3063+
name() == 'hudson.plugins.sonar.SonarPublisher'
3064+
children().size() == 11
3065+
jdk[0].value() == '(Inherit From Job)'
3066+
branch[0].value() == 'test'
3067+
language[0].value().empty
3068+
mavenOpts[0].value().empty
3069+
jobAdditionalProperties[0].value().empty
3070+
mavenInstallationName[0].value() == '(Inherit From Job)'
3071+
rootPom[0].value().empty
3072+
settings[0].value().empty
3073+
settings[0].@class == 'jenkins.mvn.DefaultSettingsProvider'
3074+
globalSettings[0].value().empty
3075+
globalSettings[0].@class == 'jenkins.mvn.DefaultGlobalSettingsProvider'
3076+
usePrivateRepository[0].value() == false
3077+
triggers[0].children().size() == 3
3078+
triggers[0].skipScmCause[0].value() == false
3079+
triggers[0].skipUpstreamCause[0].value() == false
3080+
triggers[0].envVar[0].value() == 'FOO'
3081+
}
3082+
}
30283083
}

0 commit comments

Comments
 (0)