0

这就是我在共享库文件中的内容

build job: 'Job Name',
          parameters:
          [
               string(name: 'ENVIRONMENT', value: 'sit'),
               string(name: 'param1', value: 'value1' )
          ]

它失败并出现以下错误:

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: build.call() is applicable for argument types: (java.util.LinkedHashMap) values: [[job:**********, parameters:[@string(name=ENVIRONMENT,value=sit), ...]]]
Possible solutions: call(java.lang.Object, java.lang.Object, java.lang.Object), wait(), any(), wait(long), main([Ljava.lang.String;), any(groovy.lang.Closure)

这里有什么帮助吗?

4

3 回答 3

0

Ok. So I figured out the problem.

One of the shared file name was build.groovy which was causing conflicts with build pipeline step. Renamed the file and that fixed the issue.

于 2018-12-19T01:05:07.940 回答
0

尝试添加propagate如下wait

build job: 'Job Name', parameters: [ string(name: 'ENVIRONMENT', value: 'sit'), string(name: 'param1', value: 'value1' ) ],propagate: true, wait: true
于 2018-12-12T06:47:28.743 回答
0

库类不能直接调用 sh 或 git 等步骤。但是,它们可以实现封闭类范围之外的方法,这些方法又会调用管道步骤,例如:

// src/org/foo/Zot.groovy
package org.foo;

def checkOutFrom(repo) {
  git url: "git@github.com:jenkinsci/${repo}"
}

return this

然后可以从脚本管道调用它:

def z = new org.foo.Zot()
z.checkOutFrom(repo)

这种方法有局限性;例如,它阻止了超类的声明。

或者,可以使用 this 将一组步骤显式传递给库类、构造函数或仅一个方法:

package org.foo
class Utilities implements Serializable {
  def steps
  Utilities(steps) {this.steps = steps}
  def mvn(args) {
    steps.sh "${steps.tool 'Maven'}/bin/mvn -o ${args}"
  }
}

在类上保存状态时,例如上面,该类必须实现 Serializable 接口。这确保了使用该类的流水线(如下例所示)可以在 Jenkins 中正确挂起和恢复。

@Library('utils') import org.foo.Utilities
def utils = new Utilities(this)
node {
  utils.mvn 'clean package'
}

如果库需要访问全局变量,例如 env,则应该以类似的方式将这些变量显式传递到库类或方法中。

而不是将大量变量从脚本管道传递到库中,

package org.foo
class Utilities {
  static def mvn(script, args) {
    script.sh "${script.tool 'Maven'}/bin/mvn -s ${script.env.HOME}/jenkins.xml -o ${args}"
  }
}

上面的示例显示脚本被传递到一个静态方法,从脚本管道调用如下:

@Library('utils') import static org.foo.Utilities.*
node {
  mvn this, 'clean package'
}

有关更多信息,请参阅 jenkins 共享库文档:https ://jenkins.io/doc/book/pipeline/shared-libraries/

于 2019-01-10T12:17:08.663 回答