Триггер Дженкинс Джоб из общей библиотеки
Это то, что у меня есть в моей общей библиотеке
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