【问题标题】:Getting a second parameter based on the first parameter in Jenkins根据Jenkins中的第一个参数获取第二个参数
【发布时间】:2018-05-02 19:07:42
【问题描述】:

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

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

我正在使用Active Choices Plugin (https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin) 来完成这项工作,但在获取第二个参数内容时遇到了问题。

快照:

为了获取第二个参数,我编写了一个 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'],我想将其用作第二个参数的输入。

第二个参数的快照:

Groovy 脚本不知何故没有被执行,第二个参数值保持为空。我怎样才能动态地完成这项工作。我是不是马上就跟着它。请帮我弄清楚。 TIA

【问题讨论】:

  • 如果你从外面运行上面的脚本,你会得到什么输出?
  • 我能够得到所需的输出 - return['QAServer1', 'QAServer2'](作为第二个参数的输入 - POP)
  • 你发现同样的脚本在 jenkins 参数脚本中不起作用?
  • 是的。这是正确的。但是根据为插件提供的文档,只有 if-else 子句用于根据第一个参数获取第二个参数内容。如果您要从头开始尝试,请编写一个 groovy 脚本,它只提供输出为 return['QAServer1', 'QAServer2'] 并尝试执行它。仍然想知道我错过了什么。

标签: jenkins groovy parameters jenkins-plugins hudson


【解决方案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

【讨论】:

  • 你没有打印输出来获取内容
  • 你在JSONTest目录中有什么?
  • JSONTest 包含与第一个参数相关的文件,我从中解析它并获取第二个参数的值。
  • 我已经尝试过您的建议。我仍然没有看到填充第二个参数的值。我认为 Groovy 脚本不会在该部分执行。
  • @Dev,感谢您的耐心等待,如果更改后的脚本在jenkins之外执行,您会看到什么?
猜你喜欢
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2018-03-22
  • 2019-08-05
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多