У меня есть сценарий Jenkins, в котором я использую оператор IF, чтобы определить, какие Lambdas развернуть в AWS.Моя работа Jenkins не выполняется, если я пытаюсь развернуть список лямбд, а затем пытаюсь развернуть вторичный список лямбд.
Ниже приведена ошибка, которую я получаю в Jenkins, когда пытаюсь развернуть вторую группу лямбд послеПервая группа работает успешно.
hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: java.lang.Boolean.call() is applicable for argument types: (org.jenkinsci.plugins.workflow.cps.CpsClosure2) values: [org.jenkinsci.plugins.workflow.cps.CpsClosure2@33072452]
Possible solutions: wait(), any(), wait(long), and(java.lang.Boolean), each(groovy.lang.Closure), any(groovy.lang.Closure)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:153)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:158)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:162)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
at WorkflowScript.run(WorkflowScript:70)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:84)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:83)
at sun.reflect.GeneratedMethodAccessor275.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)
at com.cloudbees.groovy.cps.Next.step(Next.java:83)
at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:186)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:370)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:93)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:282)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:270)
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:66)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Этот процесс позволяет потребителю Jenkins выбирать, использовать ли одну лямбду или группу лямбд на основе структуры папок лямбды.
Ниже приведен фрагмент файла Jenkins, который создает список Lambdas для развертывания на основе пользовательского ввода.Пользователь может выбрать развертывание одной лямбды или группы лямбд, код ниже, на основе этого ввода затем определяет, какие лямбды будут обработаны и загружены в AWS.
Первая часть оператора IF проверитесли пользователь развертывает только одну или несколько лямбд.Второй ищет лямбды с именем папки 'lambdas-A', а последний кусок затем ищет лямбды, которые находятся в папке 'lambdas-B'.
stage('checkout')
{
println('Cleaning up old files from directory')
sh "rm -rf /home/ubuntu/workspace/${env.JOB_NAME}/*"
checkout scm
if(lambda_name && lambda_name != "lambda-A-*" && lambda_name != "lambda-B-*")
{
def lambda = lambda_name.split("\\r?\\n")
sh "echo $lambda >> lambdalist"
sh "sed -e 's/, /\\n/g' lambdalist | tr -d '[]' > lambda-list"
}
else if(lambda_name == "lambda-A-*")
{
sh "rm -rf lambdalist lambda-list"
sh "ls -d lambdas/lambda-A-* >> lambda-list"
sh "sed -i 's/^\\w*\\ *//' lambda-list"
sh "sed -i 's/[/]//g' lambda-list"
}
else(lambda_name == "lambda-B-*")
{
sh "rm -rf lambdalist lambda-list"
sh "ls -d lambdas/lambda-B-* >> lambda-list"
sh "sed -i 's/^\\w*\\ *//' lambda-list"
sh "sed -i 's/[/]//g' lambda-list"
}
Что странно, еслиЯ вначале развернул группу Lambdas в lambda-A, и задание выполнено успешно.Если я переключаюсь, чтобы развернуть лямбды в группе B (лямбда-B), я получаю вышеуказанную ошибку.Однако, если я разверну одну лямбду из любой из групп, задание будет развернуто нормально.
Ожидаемое поведение должно состоять в том, что пользователь может запустить задание Jenkins и развернуть лямбда-выражения в группе A, а затем приступить к запускуповторная работа по развертыванию Lambdas в группе B без проблем.
Буду очень признателен за любую помощь, которую вы можете дать.