Общая библиотека Jenkins - Импорт классов из папки / src в / vars - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь написать общую библиотеку Jenkins для моего процесса CI. Я хотел бы сослаться на класс, который находится в папке \src внутри глобальной функции, определенной в папке \vars, поскольку это позволило бы мне поместить большую часть логики в классы, а не в глобальные функции. Я следую структуре репозитория, описанной в официальной документации Jenkins: Структура общей библиотеки Jenkins

Вот упрощенный пример того, что у меня есть:


/ src /ru / example / SrcClass.groovy

package com.example

class SrcClass {
  def aFunction() {
    return "Hello from src folder!"
  }
}

/ vars / classFromVars.groovy

import com.example.SrcClass

def call(args) {
  def sc = new SrcClass()
  return sc.aFunction()
}

Jenkinsfile

@Library('<lib-name>') _
pipeline {
  ...
  post {
    always {
      classFromVars()
    }
  }
}

Моя цель былачтобы глобальные классы в папке /vars действовали как своего рода общедоступный фасад и использовали его в моем Jenkinsfile в качестве пользовательского шага без необходимости создания экземпляра класса в блоке script (что делает его совместимым с декларативными конвейерами)). Мне все это кажется довольно простым, но я получаю эту ошибку при запуске файла classFromVars:

<root>\vars\classFromVars.groovy: 1: unable to resolve class com.example.SrcClass
 @ line 1, column 1.
   import com.example.SrcClass
   ^

1 error

Я попытался запустить класс classFromVars напрямую с CLI groovy локально и наУ нас с Дженкинсом одинаковая ошибка в обеих средах. Я также пытался указать classpath при запуске сценария /vars, получая ту же ошибку, с помощью следующей команды:

<root>>groovy -cp <root>\src\com\example vars\classFromVars.groovy

Возможно ли то, что я пытаюсь достичь? Или я должен просто поместить всю свою логику в класс /vars и избегать использования папки /src?

Я нашел несколько репозиториев на GitHub, которые, кажется, указывают, что это возможно, например, это:https://github.com/fabric8io/fabric8-pipeline-library,, который использует классы в папке /src во многих классах в папке /vars.

1 Ответ

0 голосов
/ 23 октября 2019

Как указал @Szymon Stepniak, параметр -cp в моей команде groovy был неверным. Теперь он работает локально и на сервере Jenkins. Я еще должен объяснить, почему это не работает на сервере Дженкинс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...