- parameters
- active choice parameters
- file paramter
- hidden parameter
- mixed parameters
- Jenkins 2.0 pipeline: Scripting active parameters for SCM
parameters
properties([
parameters([
string( defaultValue: '', name: 'stringParams', description: '', trim: false ),
string( defaultValue: 'default', name: 'stringDefaultParams', description: '', trim: false ),
validatingString( defaultValue: '', name: 'validatingString', regex: '.+', description: 'format: <code>.+</code>', failedValidationMessage: 'cannot be empty' ),
choice( choices: ['a', 'b', 'c', 'd'], name: 'choiceParams', description: '' ),
booleanParam( defaultValue: false, name: 'booleanParams', description: '' )
])
])
active choice parameters
properties([
parameters([
[
$class: 'ChoiceParameter',
name: 'provinces',
choiceType: 'PT_SINGLE_SELECT',
description: '',
script: [
$class: 'GroovyScript',
fallbackScript: [classpath: [], sandbox: false, script: '#!groovy return ["accept in ScriptApproval first"]'],
script: [classpath: [],
sandbox: false,
script: '''return[
\'Gansu\',
\'Sichuan\',
\'Disabled:disabled\'
]'''
]
]
], // ChoiceParameter
[
$class: 'CascadeChoiceParameter',
name: 'cities',
referencedParameters: 'provinces',
choiceType: 'PT_CHECKBOX',
description: '',
script: [
$class: 'GroovyScript',
fallbackScript: [classpath: [], sandbox: false, script: '#!groovy return ["accept in ScriptApproval first"]'],
script: [classpath: [],
sandbox: false,
script: '''if (provinces.equals("Gansu")) {
return ["Lanzhou", "Dingxi"]
} else if (provinces.equals("Sichuan")) {
return ["Leshan", "Guangyuan:disabled", "Chengdu:selected"]
} else if (provinces.equals("Disabled")) {
return ["notshow:selected"]
} else {
return ["Unknown provinces"]
}'''
]
]], // CascadeChoiceParameter
[
$class: 'StringParameterDefinition' ,
name: 'lastName' ,
defaultValue: 'Joe' ,
description: ''
], // StringParameterDefinition
[
$class: 'BooleanParameterDefinition',
name: 'notify',
defaultValue: false,
description: ''
] // BooleanParameterDefinition
])
])
or
import groovy.transform.Field import org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript @Field def props = [] @Field def newParams = [] @Field def fb = new SecureGroovyScript("""return ['Script Error!']""", false) @Field def ps = new SecureGroovyScript("""return[ 'Gansu', 'Sichuan', 'Disabled:disabled' ]""", false ) @Field def cs = new SecureGroovyScript("""#!groovy Map citySets = [ Gansu : ['Lanzhou', 'Dingxi'] , Sichuan : ['Leshan', 'Guangyuan', 'Chengdu:selected'] , Disabled : ['notshow:selected'] ] return citySets[provinces] """, false) newParams += [$class: 'ChoiceParameter', name: 'provinces', choiceType: 'PT_SINGLE_SELECT', script: [ $class: 'GroovyScript', script: ps, fallbackScript: fb ], description: '' ] newParams += [$class: 'CascadeChoiceParameter', name: 'cities', referencedParameters: 'provinces', choiceType: 'PT_CHECKBOX', script: [ $class: 'GroovyScript', script: cs, fallbackScript: fb ], description: '' ] props += [$class: 'ParametersDefinitionProperty', parameterDefinitions: newParams] properties( properties: props )
file paramter
[!NOTE|label:references]
- * jenkinsci/file-parameters-plugin
- Package io.jenkins.plugins.file_parameters
- JENKINS-27413 : Handle file parameters
- JENKINS-47333 : file parameter not working in pipeline job
- JENKINS-51245 : file parameter issue in jenkins pipeline
- JENKINS-29289 : InputStep doesn't support File Parameters
- How to overcome Jenkins pipeline inability to use file parameters
- janvrany/jenkinsci-unstashParam-library
create file parameter
final List props = []
final List newParams = []
newParams += [ $class: 'StashedFileParameterDefinition' , name: 'jsonFile', description: 'to upload file' ]
props += [ $class: 'ParametersDefinitionProperty' , parameterDefinitions: newParams ]
properties( properties: props )
// or
properties([ parameters([ stashedFile('FILE') ]) ])
use file parameter
/**
* get the original filename who was uploaded via File Parameter
*
* @param name the parameter name
* @see <a href="https://plugins.jenkins.io/file-parameters/">File Parameter</a>
**/
String getFilename( String name ) {
env.getEnvironment().find { "${name}_FILENAME" == it.key }?.value ?: ''
}
/**
* unstash the file who was uploaded via File Parameter
*
* @param name the parameter name
* @see <a href="https://plugins.jenkins.io/file-parameters/">File Parameter</a>
**/
Boolean unstashFile( String name ) {
String filename = getFilename( name )
if ( filename ) {
unstash "${name}"
sh """ set +x; mv "${name}" ${filename} """
return util.fileFinder( filename, 0 ) && true
} else {
color.alert( '... no uploaded file found ...' )
return false
}
}
hidden parameter
[!NOTE|label:references:]
setup
final List props = [] final List newParams = [] newParams += [ $class: 'WHideParameterDefinition' , name: 'HIDDEN_PARAM', description: 'Hidden param' ] props += [ $class: 'ParametersDefinitionProperty' , parameterDefinitions: newParams ] properties( properties: props ) // or properties([ parameters([ hidden( name: 'hidden_param', defaultValue: 'hidden_value', description: 'Hidden parameter' ) ]) ])
mixed parameters
[!NOTE|label:references:]
import groovy.transform.Field
import org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript
@Field def props = []
@Field def newParams = []
@Field def fb = new SecureGroovyScript("""return ['Script Error!']""", false)
@Field def ps = new SecureGroovyScript("""return[ 'Gansu', 'Sichuan', 'Disabled:disabled' ]""", false )
@Field def cs = new SecureGroovyScript("""#!groovy
Map citySets = [
Gansu : ['Lanzhou', 'Dingxi'] ,
Sichuan : ['Leshan', 'Guangyuan', 'Chengdu:selected'] ,
Disabled : ['notshow:selected']
]
return citySets[provinces]
""", false)
newParams += [ $class: 'StashedFileParameterDefinition' , name: 'filename' , description: 'to upload file' ]
newParams += [ $class: 'StringParameterDefinition' , name: 'lastName' , defaultValue: 'Joe' , description: '' ]
newParams += [ $class: 'StringParameterDefinition' , name: 'firstName' , defaultValue: 'Dan' , description: '' ]
newParams += [
$class : 'ValidatingStringParameterDefinition' ,
defaultValue : '' ,
description : 'timestamps format: <code>YYMMDDHHMMSS</code>' ,
failedValidationMessage : 'Cannot be empty or failed by Regex validation !' ,
name : 'timeStamps' ,
regex : '\\d{2,4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])(2[0-3]|[01][0-9])[0-5][0-9]\\d{0,2}'
]
newParams += [
$class : 'ChoiceParameter' ,
name : 'provinces' ,
choiceType : 'PT_SINGLE_SELECT' ,
script : [
$class : 'GroovyScript' ,
script : ps ,
fallbackScript : fb
] ,
description : ''
]
newParams += [
$class : 'CascadeChoiceParameter' ,
name : 'cities' ,
referencedParameters : 'provinces' ,
choiceType : 'PT_CHECKBOX' ,
script : [
$class : 'GroovyScript' ,
script : cs ,
fallbackScript : fb
] ,
description : ''
]
newParams += [ $class: 'BooleanParameterDefinition' , name: 'notify' , defaultValue: false , description: '' ]
props += [ $class: 'ParametersDefinitionProperty' , parameterDefinitions: newParams ]
properties( properties: props )
podTemplate(cloud: 'DevOps Kubernetes') {
node(POD_LABEL) {
stage('run') {
println """
lastName : ${params.lastName}
firstName : ${params.firstName}
provinces : ${params.provinces}
cities : ${params.cities}
notify : ${params.notify}
timeStamps : ${params.timeStamps}
filename : ${getFilename('filename')}
"""
} // stage
} // node
} // podTemplate
String getFilename( String name ) {
env.getEnvironment().find { "${name}_FILENAME" == it.key }?.value ?: ''
}
Jenkins 2.0 pipeline: Scripting active parameters for SCM
import groovy.transform.Field
import org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript
@Field def props = []
@Field def newParams = []
node('mster') {
setNewProps()
} // node
void setNewProps() {
//Parameters are unknown at first load
try {
regenerateJob = (params.RegenerateJob == null) ? true : params.RegenerateJob
}
catch (MissingPropertyException e) {
regenerateJob = true
}
if (regenerateJob) {
def fb = new SecureGroovyScript("""return ['Script Error!']""", false)
def ps = new SecureGroovyScript("""return[ 'Gansu', 'Sichuan', 'Disabled:disabled' ]""", false )
def cs = new SecureGroovyScript("""#!groovy
Map citySets = [
Gansu : ['Lanzhou', 'Dingxi'] ,
Sichuan : ['Leshan', 'Guangyuan', 'Chengdu:selected'] ,
Disabled : ['notshow:selected']
]
return citySets[provinces]
""", false)
println "Jenkins job ${env.JOB_NAME} gets updated."
currentBuild.displayName = "#" + Integer.toString(currentBuild.number) + ": Initialize job"
newParams += [$class: 'StringParameterDefinition' , name: 'lastName' , defaultValue: 'Joe' , description: '']
newParams += [$class: 'StringParameterDefinition' , name: 'firstName' , defaultValue: 'Dan' , description: '']
newParams += [
$class : 'ValidatingStringParameterDefinition',
name : 'timeStamps' ,
description : 'timestamps format: <code>YYMMDDHHMMSS</code>' ,
failedValidationMessage : 'Cannot be empty or failed by Regex validation !' ,
defaultValue : '' ,
regex : '\\d{2,4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])(2[0-3]|[01][0-9])[0-5][0-9]\\d{0,2}'
]
newParams += [
$class : 'ChoiceParameter' ,
name : 'provinces' ,
choiceType : 'PT_SINGLE_SELECT' ,
script : [
$class : 'GroovyScript' ,
script : ps ,
fallbackScript : fb
] ,
description : ''
]
newParams += [
$class : 'CascadeChoiceParameter' ,
name : 'cities' ,
referencedParameters : 'provinces' ,
choiceType : 'PT_CHECKBOX' ,
script : [
$class : 'GroovyScript' ,
script : cs ,
fallbackScript : fb
] ,
description : ''
]
newParams += [$class: 'BooleanParameterDefinition' , name: 'notify' , defaultValue: false , description: '']
props += [
$class : 'BuildDiscarderProperty',
strategy : [$class: 'LogRotator', daysToKeepStr: '30', artifactDaysToKeepStr: '1', artifactNumToKeepStr: '']
]
props += [$class: 'ParametersDefinitionProperty', parameterDefinitions: newParams]
properties( properties: props )
}
}