Groovy 如何在循环中以字符串形式访问文件参数值

Groovy 如何在循环中以字符串形式访问文件参数值,groovy,jenkins-pipeline,gstring,Groovy,Jenkins Pipeline,Gstring,在我们的Jenkins文件中,我们有很多参数(参数化构建),在本例中,我想检查每个参数是否被切换并执行相应操作。这些参数有相似的名称,但以不同的十进制结束,所以我想对它们进行迭代以实现这一点 我有点像: if ("${TEST_00}" == "true") { testTasksToRun.add(testsList[0]) } if ("${TEST_01}" == "true") { testTasksToRun.add(testsList[1]) } if ("${TEST_02}" =

在我们的Jenkins文件中,我们有很多参数(参数化构建),在本例中,我想检查每个参数是否被切换并执行相应操作。这些参数有相似的名称,但以不同的十进制结束,所以我想对它们进行迭代以实现这一点

我有点像:

if ("${TEST_00}" == "true") { testTasksToRun.add(testsList[0]) }
if ("${TEST_01}" == "true") { testTasksToRun.add(testsList[1]) }
if ("${TEST_02}" == "true") { testTasksToRun.add(testsList[2]) }
if ("${TEST_03}" == "true") { testTasksToRun.add(testsList[3]) }
if ("${TEST_04}" == "true") { testTasksToRun.add(testsList[4]) }
if ("${TEST_05}" == "true") { testTasksToRun.add(testsList[5]) }
for(int i=0; i<testsList.size(); i++) {
    if ("${TEST_0${i}}" == "true") {
        testTasksToRun.add(testsList[i])
    }
}
但我想要的是:

if ("${TEST_00}" == "true") { testTasksToRun.add(testsList[0]) }
if ("${TEST_01}" == "true") { testTasksToRun.add(testsList[1]) }
if ("${TEST_02}" == "true") { testTasksToRun.add(testsList[2]) }
if ("${TEST_03}" == "true") { testTasksToRun.add(testsList[3]) }
if ("${TEST_04}" == "true") { testTasksToRun.add(testsList[4]) }
if ("${TEST_05}" == "true") { testTasksToRun.add(testsList[5]) }
for(int i=0; i<testsList.size(); i++) {
    if ("${TEST_0${i}}" == "true") {
        testTasksToRun.add(testsList[i])
    }
}

for(int i=0;i您可以使用this关键字并引用当前作用域的属性来执行此操作

导入groovy.transform.Field
def testsList=['a','b','c']
@场
def TEST_00=“正确”
@场
def TEST_01=“错误”
@场
def TEST_02=“正确”

for(int i=0;i
params
是一个
GlobalVariable
,当被访问时返回一个不可修改的映射。您可以看到实现

因为它返回一个
映射
,所以可以使用与普通Groovy映射相同的策略对其进行迭代

params.each{key,value->
//做事
}
for(参数中的条目){
//entry.key或entry.value
}

Groovy CPS库的较新版本应该可以处理大多数迭代情况,因为问题已经解决。

谢谢Jacob,我很快会尝试一下!遗憾的是,我认为它不起作用,因为参数是由Jenkins插件注入的,所以我猜它没有使用@Field注释……我认为Jenkins中不需要的@Field注释,它为您解决了这一问题。我使用它只是为了让它在Groovy控制台中作为脚本运行。无可否认,我没有在Jenkins中测试过这一点。我添加了一个Jenkins脚本,演示类似于您尝试演示的内容。我想我无法像那样保存参数,因为它们添加了
属性([parameters([string])(name:'BRANCH',defaultValue:'master'))]
,但是当mkobit在他的答案上发布时,所有参数都可以在
参数[]
!:)中访问。谢谢你,mkobit!使用
参数[“TEST_0${i}”]
非常有效:)