mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
22ee06dc17
* Enable configuration via yaml file * Add documentation * Add tests
63 lines
1.8 KiB
Groovy
63 lines
1.8 KiB
Groovy
import com.cloudbees.groovy.cps.NonCPS
|
|
|
|
def call(Map parameters = [:], body) {
|
|
handlePipelineStepErrors(stepName: 'dockerExecute', stepParameters: parameters){
|
|
def dockerImage = parameters.get('dockerImage', '')
|
|
Map dockerEnvVars = parameters.get('dockerEnvVars', [:])
|
|
def dockerOptions = parameters.get('dockerOptions', '')
|
|
Map dockerVolumeBind = parameters.get('dockerVolumeBind', [:])
|
|
|
|
if(dockerImage?.isEmpty()){
|
|
echo '[dockerExecute] No Docker image provided - running on local environment.'
|
|
body()
|
|
}else{
|
|
def image = docker.image(dockerImage)
|
|
image.pull()
|
|
image.inside(getDockerOptions(dockerEnvVars, dockerVolumeBind, dockerOptions)) {
|
|
body()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns a string with docker options containing
|
|
* environment variables (if set).
|
|
* Possible to extend with further options.
|
|
* @param dockerEnvVars Map with environment variables
|
|
*/
|
|
@NonCPS
|
|
private getDockerOptions(Map dockerEnvVars, Map dockerVolumeBind, def dockerOptions) {
|
|
def specialEnvironments = [
|
|
'http_proxy',
|
|
'https_proxy',
|
|
'no_proxy',
|
|
'HTTP_PROXY',
|
|
'HTTPS_PROXY',
|
|
'NO_PROXY'
|
|
]
|
|
def options = ""
|
|
if (dockerEnvVars) {
|
|
for (String k : dockerEnvVars.keySet()) {
|
|
options += " --env ${k}=" + dockerEnvVars[k].toString()
|
|
}
|
|
}
|
|
|
|
for (String envVar : specialEnvironments) {
|
|
if (dockerEnvVars == null || !dockerEnvVars.containsKey(envVar)) {
|
|
options += " --env ${envVar}"
|
|
}
|
|
}
|
|
|
|
if (dockerVolumeBind) {
|
|
for (String k : dockerVolumeBind.keySet()) {
|
|
options += " --volume ${k}:" + dockerVolumeBind[k].toString()
|
|
}
|
|
}
|
|
|
|
if (dockerOptions) {
|
|
options += " ${dockerOptions}"
|
|
}
|
|
return options
|
|
}
|