Я пытаюсь написать общую библиотеку 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
.