Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/Handling-Credentials.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,9 @@ like build variables as in the examples above.
github('foo/ci-configuration')
}
wrappers {
injectPasswords()
injectPasswords {
injectGlobalPasswords()
}
}
steps {
dsl {
Expand Down
3 changes: 3 additions & 0 deletions docs/Home.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins
* Support for the older versions of the [CloudBees Docker Build and Publish
Plugin](https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Docker+Build+and+Publish+plugin) is deprecated, see
[Migration](Migration#migrating-to-145)
* Enhanced support for the [EnvInject Plugin](https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin)
* Deprecated a method for the [EnvInject Plugin](https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin), see
[Migration](Migration#migrating-to-145)
* 1.44 (March 11 2016)
* Added support for the [Mattermost Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Mattermost+Plugin)
([JENKINS-32764](https://issues.jenkins-ci.org/browse/JENKINS-32764))
Expand Down
27 changes: 27 additions & 0 deletions docs/Migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,33 @@ Plugin](https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Docker+Build+and+P
The `runDslEngine` methods in `DslScriptLoader` are [[deprecated|Deprecation-Policy]] and will be removed. Use the new
`runScripts` method instead.

### EnvInject Plugin

The DSL support for the [EnvInject Plugin](https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin) has changed to
enable masking passwords and enabling / disabling global passwords injection.
By default global paswords injection is disabled to match the
[EnvInject Plugin](https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin) default configuration.

DSL prior to 1.45
```groovy
job('example') {
wrappers {
injectPasswords()
}
}
```

DSL since 1.45
```groovy
job('example') {
wrappers {
injectPasswords {
injectGlobalPasswords()
}
}
}
```

## Migrating to 1.44

### Git
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
job('example') {
wrappers {
injectPasswords()
injectPasswords {
injectGlobalPasswords()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package javaposse.jobdsl.dsl.helpers.wrapper

import javaposse.jobdsl.dsl.AbstractContext
import javaposse.jobdsl.dsl.JobManagement
import javaposse.jobdsl.dsl.RequiresPlugin

class EnvInjectPasswordsContext extends AbstractContext {
boolean injectGlobalPasswords = false
boolean maskPasswordParameters = true

EnvInjectPasswordsContext(JobManagement jobManagement) {
super(jobManagement)
}

/**
* Injects global passwords provided by Jenkins configuration. Defaults to {@code false}.
*
* @since 1.45
*/
void injectGlobalPasswords(boolean injectGlobalPasswords = true) {
this.injectGlobalPasswords = injectGlobalPasswords
}

/**
* Masks passwords provided by build parameters. Defaults to {@code true}.
*
* @since 1.45
*/
@RequiresPlugin(id = 'envinject', minimumVersion = '1.90')
void maskPasswordParameters(boolean maskPasswordParameters = true) {
this.maskPasswordParameters = maskPasswordParameters
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ class WrapperContext extends AbstractExtensibleContext {
*
* @since 1.23
*/
@Deprecated
@RequiresPlugin(id = 'envinject')
void injectPasswords() {
wrapperNodes << new NodeBuilder().'EnvInjectPasswordWrapper' {
Expand All @@ -274,6 +275,27 @@ class WrapperContext extends AbstractExtensibleContext {
}
}

/**
* Injects passwords as environment variables into the job.
*
* @since 1.45
*/
@RequiresPlugin(id = 'envinject')
void injectPasswords(@DslContext(EnvInjectPasswordsContext) Closure injectPasswordsClosure) {
EnvInjectPasswordsContext injectPasswordsContext = new EnvInjectPasswordsContext(jobManagement)
ContextHelper.executeInContext(injectPasswordsClosure, injectPasswordsContext)

wrapperNodes << new NodeBuilder().'EnvInjectPasswordWrapper' {
injectGlobalPasswords(injectPasswordsContext.injectGlobalPasswords)

if (jobManagement.isMinimumPluginVersionInstalled('envinject', '1.90')) {
maskPasswordParameters(injectPasswordsContext.maskPasswordParameters)
}

passwordEntries()
}
}

/**
* Wrap the job with pre- and post-build steps which are only executed when a manual release build is triggered.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -702,7 +702,7 @@ class WrapperContextSpec extends Specification {
thrown(DslScriptException)
}

def 'call injectPasswords'() {
def 'call injectPasswords, deprecated variant'() {
when:
context.injectPasswords()

Expand All @@ -716,6 +716,56 @@ class WrapperContextSpec extends Specification {
1 * mockJobManagement.requirePlugin('envinject')
}

def 'call injectPasswords with minimal args'() {
setup:
mockJobManagement.isMinimumPluginVersionInstalled('envinject', '1.90') >> true

when:
context.injectPasswords {}

then:
with(context.wrapperNodes[0]) {
name() == 'EnvInjectPasswordWrapper'
children().size() == 3
injectGlobalPasswords[0].value() == false
maskPasswordParameters[0].value() == true
passwordEntries[0].children().size() == 0
}
}

def 'call injectPasswords with minimal args, plugin version older than 1.90'() {
when:
context.injectPasswords {}

then:
with(context.wrapperNodes[0]) {
name() == 'EnvInjectPasswordWrapper'
children().size() == 2
injectGlobalPasswords[0].value() == false
passwordEntries[0].children().size() == 0
}
}

def 'call injectPasswords with all args'() {
setup:
mockJobManagement.isMinimumPluginVersionInstalled('envinject', '1.90') >> true

when:
context.injectPasswords {
injectGlobalPasswords()
maskPasswordParameters(false)
}

then:
with(context.wrapperNodes[0]) {
name() == 'EnvInjectPasswordWrapper'
children().size() == 3
injectGlobalPasswords[0].value() == true
maskPasswordParameters[0].value() == false
passwordEntries[0].children().size() == 0
}
}

def 'call buildName'() {
when:
context.buildName('#${BUILD_NUMBER} && <test>')
Expand Down