向Groovy提供循环多次运行任务的列表
我在Groovy中定义了如下列表:向Groovy提供循环多次运行任务的列表,groovy,jenkins-groovy,Groovy,Jenkins Groovy,我在Groovy中定义了如下列表: all_services:[processor-create, processor-update, read-service] 如何为另一个stage playbook变量${service}的for循环提供此列表 script { sh(""" ansible-playbook -i localhost, cleanup.yml --extra-vars=@${service}.yml """) ... 所以playb
all_services:[processor-create, processor-update, read-service]
如何为另一个stage playbook变量${service}的for循环提供此列表
script {
sh("""
ansible-playbook -i localhost, cleanup.yml --extra-vars=@${service}.yml
""")
...
所以playbook应该运行,若列表有2个项目,那个么它必须为每个项目运行2次
让我说清楚
我有groovy脚本,它有多个阶段:
stages {
stage('Prepare') {
agent any
steps {
script {
if (params.DEPLOY_ALL_SERVICES == true){
all_services = new ArrayList(Arrays.asList("${params.ALL_SERVICES}".split("\\+")))
println "all_services:" + all_services
} else{
if (params.DEPLOY_ALL_EX_SERVICES == true){
all_ex_services = new ArrayList(Arrays.asList("${params.ALL_EX_SERVICES}".split("\\+")))
println "deploy all ex services:" + all_account_services
all_services += all_ex_services
}
println "All Services:" + all_services
}
}
}
}
stage('Create conf'){
agent any
steps {
script {
def services = "$all_services"
println services // it works till here, it's printing the list, if add single quotes to list then hopefully it should loop through it
services.each {service ->
sh("""
ansible-playbook -i localhost, cleanup.yml --extra-vars=@${service}.yml
""")
}
}
}
}
}
当我执行管道时,它能够在控制台上打印列表,但无法将该列表提供到def services=“$all_services”中,它无法让所有列表执行循环
控制台输出println服务:
[processor-create, processor-update, ex-service]
an exception which occurred:
in field com.cloudbees.groovy.cps.impl.FunctionCallEnv.locals
in object com.cloudbees.groovy.cps.impl.FunctionCallEnv@1a3dd25b
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@7f249352
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.LoopBlockScopeEnv@59936027
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@6a3531fb
in field com.cloudbees.groovy.cps.impl.CallEnv.caller
您的问题定义得不够好,无法确定您在寻找什么,但下面是groovy代码:
def services = ['processor-create', 'processor-update', 'read-service']
services.each { service ->
sh("ansible-playbook -i localhost, cleanup.yml --extra-vars=@${service}.yml")
}
def sh(str) {
println "fake execution>> \n${str}\n"
}
演示和。将上述内容保存在solution.groovy
中并执行它将产生:
~> groovy solution.groovy
fake execution>>
ansible-playbook -i localhost, cleanup.yml --extra-vars=@processor-create.yml
fake execution>>
ansible-playbook -i localhost, cleanup.yml --extra-vars=@processor-update.yml
fake execution>>
ansible-playbook -i localhost, cleanup.yml --extra-vars=@read-service.yml
应该注意的是,由于上面的代码使用的是纯groovy,groovy中没有现成的
script
或sh
,因此我模拟了sh
方法,只在stdout上打印结果 @mbjarland我已经更新了上一节中的代码,正如您所说的,通过提供as list,它可以在其中循环,但我有一个问题需要从“所有_服务”向def服务提供list