小编Cla*_*her的帖子

詹金斯管道中“脚本”块之外的动态并行阶段

我正在尝试动态构建并行阶段,如此此处所示。具体来说,我正在尝试在管道范围之外定义的函数中执行此操作,例如:

pipeline{
  stages{
    stage('CI'){
      steps{
        doDynamicParallelSteps()
      }
    }
  }
}

def doDynamicParallelSteps(){
  tests = [:]
  for (f in findFiles(glob: '**/html/*.html')) {
    tests["${f}"] = {
      node {
        stage("${f}") {
          echo '${f}'
        }
      }
    }
  }
  parallel tests
}
Run Code Online (Sandbox Code Playgroud)

问题是,这似乎只有在动态并行生成代码在管道的step {}块内的script {}块内时才起作用(如第一个参考资料所示)。

当运行类似于上面的代码片段的内容时,我在jenkins中看到此错误:

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (java.lang.String, org.jenkinsci.plugins.workflow.cps.CpsClosure2) values: [teststage, org.jenkinsci.plugins.workflow.cps.CpsClosure2@2e1b48b4]
Possible solutions: wait(), any(), trim(), size(), next(), size()
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:153)
    at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
    at WorkflowScript.parallelHandler(WorkflowScript:1383) …
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-pipeline

3
推荐指数
1
解决办法
3246
查看次数

Jenkins共享库,在Jenkinsfile中引用类

我正在构建一个共享库,我想要有类定义,例如:

class Kubernetes implements Serializable{
    def script
    Kubernetes(script){this.script = script}
    def someMethod(){ ... }
}
Run Code Online (Sandbox Code Playgroud)

我已将此类定义放在共享库git repo中,并带有路径src/foo/bar/Kubernetes.groovy.我正在使用jenkins文件顶部的以下步骤导入共享库,在任何节点或管道指令之外:

library identifier: 'custom-lib@master', retriever: modernSCM(
[$class: 'GitSCMSource',
remote: '<my-git-remote>',
credentialsId: '<my-credentials-id>'])
import foo.bar.*
Run Code Online (Sandbox Code Playgroud)

我已经验证了这个库正在被拉,因为我可以引用在vars/目录中创建的自定义DSL步骤.但是,当我编辑我的管道文件以生成该类的实例时,管道启动时会立即引发错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 1276: unable to resolve class Kubernetes 
 @ line 1276, column 16.
   def kube = new Kubernetes(this)
              ^

1 error

at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:958)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:605)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:554)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:133)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:557) …
Run Code Online (Sandbox Code Playgroud)

groovy shared-libraries jenkins jenkins-pipeline

2
推荐指数
1
解决办法
3512
查看次数