Skip to content

Commit 8419157

Browse files
committed
added support for UsernamePasswordMultiBinding
1 parent ca0dc64 commit 8419157

File tree

5 files changed

+51
-34
lines changed

5 files changed

+51
-34
lines changed

docs/Home.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Have a look at the [Jenkins Job DSL Gradle example](https://github.com/sheehan/j
2424
* Added "Configure Project" column for [Extra Columns Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Extra+Columns+Plugin)
2525
* Added support for [PostBuildScript Plugin](https://wiki.jenkins-ci.org/display/JENKINS/PostBuildScript+Plugin)
2626
* Added support for [Xvfb Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Xvfb+Plugin)
27+
* Enhanced support for the [Credentials Binding Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Binding+Plugin)
2728
* The enum argument of `localRepository` for the Maven job and context has changed, see [[Migration]]
2829
* Added partial support for [Plot Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Plot+Plugin)
2930
* 1.30 (March 08 2015)

docs/Job-reference.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2268,6 +2268,8 @@ job {
22682268
file(String variable, String credentialsId)
22692269
string(String variable, String credentialsId)
22702270
usernamePassword(String variable, String credentialsId)
2271+
usernamePassword(String usernameVariable,
2272+
String passwordVariable, String credentialsId) // since 1.31
22712273
zipFile(String variable, String credentialsId)
22722274
}
22732275
}

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

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,42 @@ import javaposse.jobdsl.dsl.JobManagement
66
class CredentialsBindingContext implements Context {
77
private final JobManagement jobManagement
88

9-
Map<String, String> file = [:]
10-
Map<String, String> string = [:]
11-
Map<String, String> usernamePassword = [:]
12-
Map<String, String> zipFile = [:]
9+
final List<Node> nodes = []
1310

1411
CredentialsBindingContext(JobManagement jobManagement) {
1512
this.jobManagement = jobManagement
1613
}
1714

1815
void file(String variable, String credentials) {
19-
this.file[variable] = jobManagement.getCredentialsId(credentials)
16+
addSimpleBinding('File', variable, credentials)
2017
}
2118

2219
void string(String variable, String credentials) {
23-
this.string[variable] = jobManagement.getCredentialsId(credentials)
20+
addSimpleBinding('String', variable, credentials)
2421
}
2522

2623
void usernamePassword(String variable, String credentials) {
27-
this.usernamePassword[variable] = jobManagement.getCredentialsId(credentials)
24+
addSimpleBinding('UsernamePassword', variable, credentials)
25+
}
26+
27+
void usernamePassword(String userVariableName, String passwordVariableName, String credentials) {
28+
jobManagement.requireMinimumPluginVersion('credentials-binding', '1.3')
29+
30+
nodes << new NodeBuilder().'org.jenkinsci.plugins.credentialsbinding.impl.UsernamePasswordMultiBinding' {
31+
credentialsId(jobManagement.getCredentialsId(credentials))
32+
usernameVariable(userVariableName)
33+
passwordVariable(passwordVariableName)
34+
}
2835
}
2936

3037
void zipFile(String variable, String credentials) {
31-
this.zipFile[variable] = jobManagement.getCredentialsId(credentials)
38+
addSimpleBinding('ZipFile', variable, credentials)
39+
}
40+
41+
private void addSimpleBinding(String type, String variableName, String credentials) {
42+
nodes << new NodeBuilder()."org.jenkinsci.plugins.credentialsbinding.impl.${type}Binding" {
43+
variable(variableName)
44+
credentialsId(jobManagement.getCredentialsId(credentials))
45+
}
3246
}
3347
}

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

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -721,32 +721,7 @@ class WrapperContext implements Context {
721721
ContextHelper.executeInContext(closure, context)
722722

723723
wrapperNodes << new NodeBuilder().'org.jenkinsci.plugins.credentialsbinding.impl.SecretBuildWrapper' {
724-
'bindings' {
725-
context.file.each { key, value ->
726-
'org.jenkinsci.plugins.credentialsbinding.impl.FileBinding' {
727-
variable(key)
728-
credentialsId(value)
729-
}
730-
}
731-
context.string.each { key, value ->
732-
'org.jenkinsci.plugins.credentialsbinding.impl.StringBinding' {
733-
variable(key)
734-
credentialsId(value)
735-
}
736-
}
737-
context.usernamePassword.each { key, value ->
738-
'org.jenkinsci.plugins.credentialsbinding.impl.UsernamePasswordBinding' {
739-
variable(key)
740-
credentialsId(value)
741-
}
742-
}
743-
context.zipFile.each { key, value ->
744-
'org.jenkinsci.plugins.credentialsbinding.impl.ZipFileBinding' {
745-
variable(key)
746-
credentialsId(value)
747-
}
748-
}
749-
}
724+
bindings(context.nodes)
750725
}
751726
}
752727

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,6 +1024,31 @@ class WrapperContextSpec extends Specification {
10241024
}
10251025
}
10261026

1027+
def 'call credentials binding with username password multi binding'() {
1028+
setup:
1029+
mockJobManagement.getCredentialsId('foo') >> 'bar'
1030+
1031+
when:
1032+
context.credentialsBinding {
1033+
usernamePassword('A', 'B', 'foo')
1034+
}
1035+
1036+
then:
1037+
context.wrapperNodes.size() == 1
1038+
with(context.wrapperNodes[0]) {
1039+
name() == 'org.jenkinsci.plugins.credentialsbinding.impl.SecretBuildWrapper'
1040+
children().size() == 1
1041+
bindings[0].children().size() == 1
1042+
with(bindings[0].'org.jenkinsci.plugins.credentialsbinding.impl.UsernamePasswordMultiBinding'[0]) {
1043+
children().size() == 3
1044+
usernameVariable[0].value() == 'A'
1045+
passwordVariable[0].value() == 'B'
1046+
credentialsId[0].value() == 'bar'
1047+
}
1048+
}
1049+
1 * mockJobManagement.requireMinimumPluginVersion('credentials-binding', '1.3')
1050+
}
1051+
10271052
def 'call custom tools with no optionals'() {
10281053
when:
10291054
context.customTools(['foo', 'bar'])

0 commit comments

Comments
 (0)