user_dev
user_dev

Reputation: 1431

How to get user input data in shell (Jenkinsfile)

I am trying to take user input through Jenkinsfile but I can't use that in the shell. Here is the code:

def userInput =  timeout(time:60, unit:'SECONDS') {input(
     id: 'userInput', message: 'URL Required', parameters: [
     [$class: 'TextParameterDefinition', defaultValue: '', description: 'URL', name: 'url'],
    ])
  }

node{
        echo "Env jsfsjaffwef:"+userInput) //this works
        echo "${userInput}" //but this does not
        sh '''
          python test.py ${userInput}
        '''
}

Upvotes: 0

Views: 1997

Answers (2)

StephenKing
StephenKing

Reputation: 37630

Be careful about string interpolation: Variables will be replaced inside double quotes ("..", or the multi-line variant """), but not inside single quotes ('..', resp. '''..'''). So the sh step shouldn't have it replaced, the echo above should have it correctly.

def userInput =  timeout(time:60, unit:'SECONDS') {input(
     id: 'userInput', message: 'URL Required', parameters: [
     [$class: 'TextParameterDefinition', defaultValue: '', description: 'URL', name: 'url'],
    ])
  }

node {
        echo "Env jsfsjaffwef:"+userInput) //this works
        echo "${userInput}" // this should have also worked before
        sh """
          python test.py ${userInput}
        """
}

So make sure that you exactly apply the right quotes and don't just replace them compared to what people suggest here.

Upvotes: 2

Jacob
Jacob

Reputation: 940

The following works for me on Jenkins 2.62:

def userInput =  input(
     id: 'userInput', message: 'URL Required', parameters: [
     [$class: 'TextParameterDefinition', defaultValue: '', description: 'URL', name: 'url'],
    ])

node('master') {
    sh "echo userInput is: ${userInput}"
}

Upvotes: 0

Related Questions