2014-02-14 5 views
3

Я попытался использовать CopyArtifacts(), а также написал настраиваемый блок настройки для копирования артефактов из сборки upstream. Я получаю ошибки в обоих, как показано ниже -CopyArtifacts (...) дает ошибку при использовании в job-dsl-plugin в Jenkins

FATAL: No signature of method: javaposse.jobdsl.dsl.Job.CopyArtifacts() is applicable for argument types: (java.lang.String, java.lang.String, jobDSL$_run_closure1_closure4_closure14) values: [xxx-StarTrooper-master.unity, target/**, [email protected]] 
groovy.lang.MissingMethodException: No signature of method: javaposse.jobdsl.dsl.Job.CopyArtifacts() is applicable for argument types: (java.lang.String, java.lang.String, jobDSL$_run_closure1_closure4_closure14) values: [xxx-StarTrooper-master.unity, target/**, [email protected]] 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55) 
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) 
    at jobDSL$_run_closure1_closure4.doCall(jobDSL.groovy:43) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 

Мой фрагмент кода, как показано ниже -

CopyArtifacts(downstreamUnityJob.name,'target/**'){ 
    buildNumber("${UNITY_BUILD_NUMBER}") 
} 

Когда я пытаюсь пользовательский конфигурационный блок я получаю сообщение об ошибке, а также -

FATAL: No signature of method: groovy.util.Node.call() is applicable for argument types: (java.lang.String) values: [xxx-StarTrooper-master.unity] 
Possible solutions: wait(), name(), value(), any(), wait(long), get(java.lang.String) 
groovy.lang.MissingMethodException: No signature of method: groovy.util.Node.call() is applicable for argument types: (java.lang.String) values: [xxx-StarTrooper-master.unity] 
Possible solutions: wait(), name(), value(), any(), wait(long), get(java.lang.String) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55) 
    at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 
    at jobDSL$_run_closure1_closure4_closure14_closure16.doCall(jobDSL.groovy:49) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

и вот мой блок конфигурации -

configure { 
    project -> project/ builders/'hudson.plugins.copyartifact.CopyArtifact'{ 
     projectName downstreamUnityJob.name //downstreamUnityJob comes from another job dsl object 
     project downstreamUnityJob.name 
     filter 'target/**' 
     selector('class':"hudson.plugins.copyartifact.SpecificBuild"){ 
      buildNumber "$UNITY_BUILD_NUMBER" 
     } 
    } 
} 

Можете ли вы сообщить мне, что мне не хватает?

ответ

2

В JobDsl, copyArtifacts нужно начинать со строчной с (не заглавными буквами C, как есть)

Job dsl wiki Смотрите здесь и StepContext.copyArtifacts

+0

Спасибо. Это была опечатка. Даже после фиксации у меня была аналогичная проблема. Позднее я выяснил проблему. Вызов copyArtifacts (...) должен быть под шагами {...} – b0s0nparticle88

+0

@ b0s0nparticle88: если вы найдете проблему, ответьте на нее сами и отметите ответ –

0

Ах, я столкнулся с той же проблемой.

configure { project -> 
    project/builders << 'hudson.plugins.copyartifact.CopyArtifact' { 
     project(value.deps.get(0)) 
     filter(value.ins) 
     target('') 
     buildChooser(class: 'hudson.plugins.copyartifact.SpecificBuildSelector') { 
     buildNumber('${parentBuildNo}') 
     } 
     doNotFingerprintArtifacts(true) 
    } 
    } 

привело к FATAL: No signature of method: groovy.util.Node.call() для меня.

Я решил это, изменив имя изменяющегося элемента XML с project на myProject. Поскольку модификатор project в блоке configure затеняет имя элемента, который вы изменяете, для аргумента закрытия необходимо использовать другое имя.

configure { myProject -> 
    myProject/builders << 'hudson.plugins.copyartifact.CopyArtifact' { 
     project(value.deps.get(0)) 
     filter(value.ins) 
     target('') 
     buildChooser(class: 'hudson.plugins.copyartifact.SpecificBuildSelector') { 
     buildNumber('${parentBuildNo}') 
     } 
     doNotFingerprintArtifacts(true) 
    } 
    } 

Успех!

0

Для вашей проблемы вы должны использовать атрибут delegate.

Ваш элемент может иметь конфликт с другим.

Вот пример:

 configure { project -> 
     project/builders << 'hudson.plugins.copyartifact.CopyArtifact' { 
     delegate.project 'BLABLA' // DELEGATE 
     ... 
    }