Skip to content

Commit f88f644

Browse files
committed
Merge pull request #399 from CoreMedia/pre-scm
added support for the pre-scm build step plugin
2 parents cc9b454 + 8f70431 commit f88f644

File tree

5 files changed

+114
-0
lines changed

5 files changed

+114
-0
lines changed

docs/Home.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Have a look at the [Jenkins Job DSL Gradle example](https://github.com/sheehan/j
1717

1818
## Release Notes
1919
* 1.31 (unreleased)
20+
* Added support for [Pre-SCM Build Step Plugin](https://wiki.jenkins-ci.org/display/JENKINS/pre-scm-buildstep)
2021
* The enum argument of `localRepository` for the Maven job and context has changed, see [[Migration]]
2122
* 1.30 (March 08 2015)
2223
* Added support for [Custom Tools Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Custom+Tools+Plugin)

docs/Job-reference.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ freeStyleJob(String name) { // since 1.30
108108
maskPasswords() // since 1.26
109109
nodejs(String installation) // since 1.27
110110
preBuildCleanup(Closure closure = null) // since 1.22
111+
preScmSteps(Closure closure) // since 1.31
111112
rbenv(String rubyVersion, Closure rbenvClosure = null) // since 1.27
112113
release(Closure releaseClosure) // since 1.22
113114
runOnSameNodeAs(String jobName, boolean useSameWorkspace = false)
@@ -1854,6 +1855,39 @@ job('example') {
18541855

18551856
(since 1.22)
18561857

1858+
### Pre SCM Build Steps
1859+
1860+
```groovy
1861+
job {
1862+
wrappers {
1863+
preScmSteps {
1864+
steps(Closure stepClosure)
1865+
failOnError(boolean failOnError = true) // defaults to false
1866+
}
1867+
}
1868+
}
1869+
```
1870+
1871+
Allows build steps to run before SCM checkout. Requires the
1872+
[Pre-SCM Build Step Plugin](https://wiki.jenkins-ci.org/display/JENKINS/pre-scm-buildstep).
1873+
1874+
See [Build Steps](#build-steps) for available steps in the `stepClosure`.
1875+
1876+
```groovy
1877+
job {
1878+
wrappers {
1879+
preScmSteps {
1880+
steps {
1881+
shell('echo Hello World')
1882+
}
1883+
failOnError()
1884+
}
1885+
}
1886+
}
1887+
```
1888+
1889+
(since 1.31)
1890+
18571891
### Log File Size Checker Plugin
18581892

18591893
```groovy
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package javaposse.jobdsl.dsl.helpers.wrapper
2+
3+
import javaposse.jobdsl.dsl.Context
4+
import javaposse.jobdsl.dsl.ContextHelper
5+
import javaposse.jobdsl.dsl.DslContext
6+
import javaposse.jobdsl.dsl.JobManagement
7+
import javaposse.jobdsl.dsl.helpers.step.StepContext
8+
9+
class PreScmStepsContext implements Context {
10+
final StepContext stepContext
11+
boolean failOnError
12+
13+
PreScmStepsContext(JobManagement jobManagement) {
14+
this.stepContext = new StepContext(jobManagement)
15+
}
16+
17+
void steps(@DslContext(StepContext) Closure closure) {
18+
ContextHelper.executeInContext(closure, stepContext)
19+
}
20+
21+
void failOnError(boolean failOnError = true) {
22+
this.failOnError = failOnError
23+
}
24+
}

job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/wrapper/WrapperContext.groovy

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,4 +751,24 @@ class WrapperContext implements Context {
751751
convertHomesToUppercase context.convertHomesToUppercase
752752
}
753753
}
754+
755+
/**
756+
* <org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper>
757+
* <buildSteps>
758+
* <hudson.tasks.Shell>
759+
* <command>echo hello</command>
760+
* </hudson.tasks.Shell>
761+
* </buildSteps>
762+
* <failOnError>false</failOnError>
763+
* </org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper>
764+
*/
765+
void preScmSteps(@DslContext(PreScmStepsContext) Closure closure) {
766+
PreScmStepsContext context = new PreScmStepsContext(jobManagement)
767+
ContextHelper.executeInContext(closure, context)
768+
769+
wrapperNodes << new NodeBuilder().'org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper' {
770+
buildSteps(context.stepContext.stepNodes)
771+
failOnError(context.failOnError)
772+
}
773+
}
754774
}

job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/helpers/wrapper/WrapperContextSpec.groovy

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,4 +1013,39 @@ class WrapperContextSpec extends Specification {
10131013
}
10141014
}
10151015
}
1016+
1017+
def 'pre SCM build steps with minimal options'() {
1018+
when:
1019+
context.preScmSteps {
1020+
}
1021+
1022+
then:
1023+
with(context.wrapperNodes[0]) {
1024+
name() == 'org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper'
1025+
children().size() == 2
1026+
buildSteps[0].children().size() == 0
1027+
failOnError[0].value() == false
1028+
}
1029+
}
1030+
1031+
def 'pre SCM build steps with all options'() {
1032+
when:
1033+
context.preScmSteps {
1034+
steps {
1035+
shell('echo HELLO')
1036+
batchFile('echo WORLD')
1037+
}
1038+
failOnError()
1039+
}
1040+
1041+
then:
1042+
with(context.wrapperNodes[0]) {
1043+
name() == 'org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper'
1044+
children().size() == 2
1045+
buildSteps[0].children().size() == 2
1046+
buildSteps[0].children()[0].name() == 'hudson.tasks.Shell'
1047+
buildSteps[0].children()[1].name() == 'hudson.tasks.BatchFile'
1048+
failOnError[0].value() == true
1049+
}
1050+
}
10161051
}

0 commit comments

Comments
 (0)