Триггер Дженкинс Джоб из общей библиотеки - PullRequest
0 голосов
/ 12 декабря 2018

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

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 ]

0 голосов
/ 19 декабря 2018

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

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

0 голосов
/ 10 января 2019

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

0 голосов
/ 12 декабря 2018

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

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