根据 Jenkins 中的第一个参数获取第二个参数
Getting a second parameter based on the first parameter in Jenkins
我有一个任务,我的 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
你想试试下面的改变吗
发件人:
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
我有一个任务,我的 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
你想试试下面的改变吗
发件人:
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