根据Jenkins中的第一个参数获取第二个参数

时间:2017-11-19 13:06:05

标签: jenkins groovy parameters jenkins-plugins hudson

我有一个任务,我的Jenkins作业需要两个构建参数。第一个指定应用程序名称,可以是QA,Dev,Prod等,第二个是依赖于第一个的服务器。

示例:如果我选择应用名称作为QA,则第二个参数应显示QAServer1,QAServer2,QAServer3等值。

我使用Active Choices Pluginhttps://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin)完成此操作,但在获取第二个参数内容时遇到问题。

快照: enter image description here

为了获得第二个参数,我编写了一个Groovy代码,该代码读取所选第一个参数的相应文件并获取详细信息。

代码:

#!/usr/bin/env groovy
import hudson.model.*
def Appliname = System.getenv("APPNAME")
//println Appliname
def list1 = []
def directoryName = "C:/Users/Dev/Desktop/JSONSTest"
def fileSubStr = Appliname
def filePattern = ~/${fileSubStr}/
def directory = new File(directoryName)
def findFilenameClosure =
{
   if (filePattern.matcher(it.name).find())
   {
      def jsoname = it.name
      def jsoname1 = jsoname.reverse().take(9).reverse()
      list1.add(jsoname1.substring(1,4))
      String listAsString =  "[\'${list1.join("', '")}\']"
      println "return"+listAsString
   }

}
directory.eachFileRecurse(findFilenameClosure)

上面的代码会将输出打印为return['QAServer1', 'QAServer2'],我想将其用作第二个参数的输入。

第二个参数的快照:

enter image description here

不知何故Groovy脚本没有被执行,第二个参数值仍为空。我怎样才能动态完成这项工作。我是否正确地跟随它。请帮我搞清楚。 TIA

1 个答案:

答案 0 :(得分:1)

您想尝试以下更改

自:

def findFilenameClosure =
{
   if (filePattern.matcher(it.name).find())
   {
      def jsoname = it.name
      def jsoname1 = jsoname.reverse().take(9).reverse()
      list1.add(jsoname1.substring(1,4))
      String listAsString =  "[\'${list1.join("', '")}\']"
      println "return"+listAsString
   }

}
directory.eachFileRecurse(findFilenameClosure)

要:

directory.eachFileRecurse {
       if (filePattern.matcher(it.name).find()) {
          def jsoname = it.name
          def jsoname1 = jsoname.reverse().take(9).reverse()
          list1.add(jsoname1.substring(1,4))      
       } 
    }
    return list1