I am looking for a solution to set jenkins job one of the parameter default value based on other parameter value in pipeline
I have two params one Env and ServerName; If I select Env value as Test1 , the ServerName default value should set as "test1servername" before job executes. Appreciate for the solution.
Note: Here ServerName as String Parameter , just the default value should be displayed in text box
parameters([
string(
defaultValue: '',
description: 'Default value should be displayed based on env value',
name: 'ServerName'
),
choice(
choices: ['test1','test2','test3'],
description: 'Select the env',
name: 'Env'
),
])
Related
I am trying to add radio buttons in Jenkins instead of checkboxes when running Build with Parameters. In my existing code, I am getting checkboxes. What changes should I make in my existing code to get the radio buttons. Below is my groovy code:
def call(Map config = [:]) {
paramsList = []
paramsList << booleanParam(name: 'deployToDev', defaultValue: false, description: 'Set to true to deploy to Dev K8s Environment')
paramsList << booleanParam(name: 'deployToTest', defaultValue: false, description: 'Set to true to deploy to Test K8s Environment')
paramsList << booleanParam(name: 'deployToStage', defaultValue: false, description: 'Set to true to deploy to Stage K8s Environment')
properties([parameters(paramsList)])
}
Please find the below screenshot:
You can achieve that easily using the Extended Choice Parameter which has a built in support for all kinds of selection options including radio buttons.
You can use it as follows:
def call(Map config = [:]) {
paramsList = []
// You can also set the default value using the 'defaultValue' option
paramsList << extendedChoice(name: 'DeployTo', description: 'Select the environment to deploy to', type: 'PT_RADIO', value: 'Dev,Test,Stage', visibleItemCount: 5)
properties([parameters(paramsList)])
}
The result will look like:
You can also use the Active Choices plugin, which is a bit more complicated but has more configuration options, it will also allow you to generate the values from a groovy script.
For example:
properties([parameters(
[[$class: 'ChoiceParameter', name: 'DeployTo', choiceType: 'PT_RADIO', description: 'Select the environment to deploy to', script: [$class: 'GroovyScript', script: [classpath: [], sandbox: false, script: "return ['Dev','Test','Stage']"]]]]
)])
I have two jobs:
Build job
Deployment job
I copy the artifacts (jars) generated in the first job to the second job and deploy them to an environment.
properties([
parameters(
[
string(
name: 'buildnumber',
description: 'Buildnumber to deploy'
),
choice(
name: 'env',
choices: ['qa', 'stage', 'prod'],
description: 'Environment where the app should be deployed'
)
]
)
])
node{
stage('Copy artifacts'){
copyArtifacts(projectName: 'my-demo-build-job/master', selector: specific(params.buildnumber))
}
stage('Deploy'){
sh 'Deploying to the specified environment '
}
}
With this I have to manually check the latest/successful builds and put that as a parameter. Is there a way so that we can get a dropdown with all the successful build sorted by build number as a selector from the other job?
You can use the Extended Choice Parameter Plugin for achieving what you want with the help of a groovy script.
You will need to define an extended choice parameter of type Single Select, as a Source for Value choose Groovy Script, and as a groovy script use something like the following:
def job = jenkins.model.Jenkins.instance.getItemByFullName('my-demo-build-job/master')
return job.builds.findResults{
it.result == hudson.model.Result.SUCCESS ? it.getNumber().toInteger() : null
}
This script will go over all the build of the configured job and filter out only the successful builds - which will be returned as the select-list options for the parameter.
The configuration in the pipeline will look like:
properties([
parameters([
extendedChoice(name: 'buildnumber', type: 'PT_SINGLE_SELECT', description: 'Buildnumber to deploy', visibleItemCount: 10, groovyScript:
'''def job = jenkins.model.Jenkins.instance.getItemByFullName('my-demo-build-job/master')
return job.builds.findResults { it.result == hudson.model.Result.SUCCESS ? it.getNumber().toInteger() : null }''',
choice(name: 'env', choices: ['qa', 'stage', 'prod'], description: 'Environment where the app should be deployed'),
])
])
I know how to add a "File" parameter (a possibility to pick and upload a file) to a Jenkins job via the Configuration on its web interface. I would like to know how to add the same kind of paremeter file to a job in a groovy script in Scriptive syntax.
properties([parameters([
string(defaultValue: '', description: '', name: ''),
booleanParam(defaultValue: '', description: '', name: ''),
*fileParamIWantToAdd*(defaultValue: '', description: '', name: ''),
]), pipelineTriggers([])])
How can I pass choice parameters for the downstream job when called inside a stage in the jenkins pipeline?
I tried the below solutions but none worked:
stage('build job') {
steps{
script{
build job: 'test',
parameters: [
choice(choices: "option1\noption2\noption3\n", description: '', name: 'choiceParam')
]
}
}
}
fails with java.lang.UnsupportedOperationException: no known implementation of class hudson.model.ParameterValue is using symbol ‘choice’
Tried these as well:
parameters:
[
[$class: 'ChoiceParameterValue', name: 'choiceParam', value: "1\n\2\n3\n"],
]
fails with java.lang.UnsupportedOperationException: no known implementation of class hudson.model.ParameterValue is named ChoiceParameterValue
I actually want to pass the choice parameter as a build parameter like "$choiceParam" for value so that I can just update the jenkins job configuration instead of always updating the values in the pipeline script
Can someone please help me with this
Thanks
When you are building a job via the Build step, you are kicking it off so you need to have "selected" a value.
In this instance you would pass in the desired 'String' choice. Not a list of choices. i.e. "1"
We create our list of params and then pass that in. So: our current job has these input params:
choice(name: 'ENV', choices: product, description: 'Env'),
choice(name: 'ENV_NO', choices: envParams(product), description: 'Env No'),
We pass these downstream by setting them:
List<ParameterValue> newParams = [
new StringParameterValue('ENV', params.ENV),
new StringParameterValue('ENV_NO', params.ENV_NO),
]
build(job: "job", parameters: newParams, propagate: false)
I am developing a pipeline where in when triggered it should display the parameters and below is the code
node {
stage('preparation') {
timeout(time:15, unit:'MINUTES') {
id: 'userInput', message: 'preparation',
parameters: [
[$class: 'TextParameterDefinition', defaultValue: 'cicd', description: 'dev env', name: 'DEV_PROJECT'],
[$class: 'TextParameterDefinition', defaultValue: 'test', description: 'stage env', name: 'STAGE_PROJECT'],
[$class: 'TextParameterDefinition', defaultValue: 'jboss', description: 'Image Name', name: 'IMAGE_NAME'],
] )
input message: "Is the PARAMETERS(can be visible on leftside) are correctly set for deployment?", ok: "Promote" }
echo "${DEV_PROJECT}"
echo "${STAGE_PROJECT}"
echo "${IMAGE_NAME}"
}
When i do echo its not populating the values of user input.
Iam getting below error. My requirement is the user can input the DEV_PROJECT,STAGE_PROJECT and IMAGE_NAME and the values entered by him should be used in the pipeline scripts down the line in build and deploy stages.Iam getting below error
groovy.lang.MissingPropertyException: No such property: DEV_PROJECT for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:242)
at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:284)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:288)
could anyone let me know how to proceed?
If you have configured your pipeline to accept parameters when it is built — Build with Parameters — they are accessible as Groovy variables inside params.
Example: Using isFoo parameter defined as a boolean parameter (checkbox in the GUI):
node {
sh "isFoo is ${params.isFoo}"
sh 'isFoo is ' + params.isFoo
if (params.isFoo) {
// do something
}
Reference: https://jenkins.io/doc/book/pipeline/getting-started/#global-variable-reference