В groovy, не в состоянии сопоставить строку с регулярным выражением. groovy.lang.MissingMethodException происходит - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь сопоставить строку с шаблоном регулярных выражений. Я получаю следующую ошибку:

ERROR: Build step failed with exception 
groovy.lang.MissingMethodException: No signature of method: 
Script1.$() is applicable for argument types: (Script1$_performCleanup_closure1) values: [Script1$_performCleanup_closure1@166d5b57] 
Possible solutions: is(java.lang.Object), run(), run(), any(), use([Ljava.lang.Object;), any(groovy.lang.Closure)   at 
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)     at 
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81)   at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)    at 
Script1.performCleanup(Script1.groovy:23)   at Script1$performCleanup.callCurrent(Unknown Source)   at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:174)    at 
Script1.run(Script1.groovy:76)  at groovy.lang.GroovyShell.evaluate(GroovyShell.java:585)   at 
groovy.lang.GroovyShell.evaluate(GroovyShell.java:623)  at 
groovy.lang.GroovyShell.evaluate(GroovyShell.java:594)  at 
org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript.evaluate(SecureGroovyScript.java:
349)    at hudson.plugins.groovy.SystemGroovy.run(SystemGroovy.java:95)     at 
hudson.plugins.groovy.SystemGroovy.perform(SystemGroovy.java:59)    at 
hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)   at 
hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)   at 
hudson.model.Build$BuildExecution.build(Build.java:206)     at 
hudson.model.Build$BuildExecution.doRun(Build.java:163)     at 
hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)   at 
hudson.model.Run.execute(Run.java:1810)     at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)  
at hudson.model.ResourceController.execute(ResourceController.java:97)  at 
hudson.model.Executor.run(Executor.java:429)

Мой код:

     regex = /^(Build|Create|E2E|UTs|Cleanup).*_branch-113$|^Robots.*_branch-113-.*/
     if (jobName ==~ ${regex}) {
                println("Regex pattern: ${regex} matches with" + jobName)
     } else {
                println("Regex pattern: ${regex} does not matches with" + jobName)
     }

В выводе:

Мой шаблон регулярных выражений имеет вид --- ^(Построить | Создать | E2E | UTs | Очистить). _branch-113 $ | ^ Роботы. _branch-113 -. *

И я ожидаю jobName и выходные данныеприведенный выше код для jobName должен быть таким:

  1. Robots-abcd_repo_tool-Undo-Abcd fail
  2. Robots-fegdh_1_branch-113-HUJIK pass
  3. Robots-iopkl_1_branch-154-AL fail
  4. Create-bst_branch-113 pass
  5. Create-cm_2_branch154 fail
  6. Build_DEV__test_branch-113 pass

1 Ответ

2 голосов
/ 21 октября 2019

Я думаю, что решение является прямым, то есть уберите ${} в операторе if. Как это:

 regex = /^(Build|Create|E2E|UTs|Cleanup).*_branch-113$|^Robots.*_branch-113-.*/
 if (jobName ==~ regex) {
            println("Regex pattern: ${regex} matches with" + jobName)
 } else {
            println("Regex pattern: ${regex} does not matches with" + jobName)
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...