如何在shell中获取用户输入数据(Jenkinsfile)

时间:2017-05-25 22:21:35

标签: jenkins groovy jenkins-pipeline

我试图通过Jenkinsfile获取用户输入,但我无法在shell中使用它。这是代码:

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}
        '''
}

2 个答案:

答案 0 :(得分:2)

请注意string interpolation:变量将替换为双引号(".."或多行变体"""),但不会替换为单引号('..' ,分别为'''..''')。因此,sh步骤不应替换它,上面的echo应该正确使用它。

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}
        """
}

因此,请确保您完全应用正确的引号,而不是像人们在此处所建议的那样替换它们。

答案 1 :(得分:0)

以下适用于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}"
}