Jenkinsfile 与字符串变量问题

问题描述

我有一个 Jenkinsfile 和来自输入文件的端口解析列表,

pipeline {
  parameters {
    string(defaultValue: '4000',name: 'Port',trim: true)
  }
  
  stage('Test') {
    steps {
      script {
        echo 'Testing..'
        script {
          def data = readFile(file: 'list.txt')
          println(data)
          def Port = ""
          data.eachLine { line ->
            def arr = line.tokenize('\t')
            println "port: ${arr[0]}}"   # Prints values
            println "port: arr[0]"         # Prints name of Varible
            build quietPeriod: 2,job: 'Downstream_Jenkinsfile_Job',parameters: [string(name: 'Port',value: ${arr[0]})]  # <- ERROR HERE
          }
        }
      }
    }
  }
}

parameters: [string(name: 'Port',value: ${arr[0]})] 给出错误

[Pipeline] End of Pipeline
java.lang.NoSuchMethodError: No such DSL method '$' found among steps [archive,...
at org.kohsuke.groovy.sandBox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
    at org.jenkinsci.plugins.scriptsecurity.sandBox.groovy.SandBoxInterceptor.onMethodCall(SandBoxInterceptor.java:157)

我尝试过:
parameters: [string(name: 'Port',value: ${arr[0]}]
parameters: [string(name: 'Port',value: arr[0]]

是什么导致了这个问题?我打字,没有运气。谢谢

解决方法

必须的

build quietPeriod: 2,job: 'Downstream_Jenkinsfile_Job',parameters: [string(name: 'Port',value: "${arr[0]}")]

如果 $ 包含在 "" 中,则管道可以插入该值,并且在您的示例中,您保留了参数值 ${arr[0]} 但它必须像 "${arr[0]}">