Триггер Дженкинс Джоб из общей библиотеки

Это то, что у меня есть в моей общей библиотеке

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)

Любая помощь здесь?

3 ответа

Классы библиотеки не могут напрямую вызывать такие шаги, как 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)

Этот подход имеет ограничения; например, это предотвращает объявление суперкласса.

Альтернативно, набор шагов может быть передан явно с использованием этого в класс библиотеки, в конструктор или только в один метод:

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/

Хорошо. Так что я разобрался с проблемой.

Одним из общих файловых файлов было build.groovy, что вызывало конфликты с шагом сборки. Переименовал файл, и это решило проблему.

Попробуйте добавить propagate а также wait как ниже:

build job: 'Job Name', parameters: [ string(name: 'ENVIRONMENT', value: 'sit'), string(name: 'param1', value: 'value1' ) ],propagate: true, wait: true
Другие вопросы по тегам