Дженкинс не может разрешить зависимости для глобальной общей библиотеки

#jenkins #gradle #groovy #jenkins-pipeline

#дженкинс #gradle #groovy #дженкинс-конвейер

Вопрос:

Я пытаюсь настроить конвейер Дженкинса с помощью Jenkinsfile, который вызывает методы из самореализованной глобальной разделяемой библиотеки с @Library("name-of-library") во главе файла Jenkinsfile.

Однако библиотека, которую я использую, — это заводной проект, организованный Gradle. То есть у нас есть build.gradle в корне всего репозитория библиотеки, где определены зависимости.

 dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.4.15'
    compile group: 'commons-io', name: 'commons-io', version: '2.6'
    compile group: 'eu.agno3.jcifs', name: 'jcifs-ng', version: '2.1.1'
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.8.0-beta4'
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-all:1.9.5'
    testCompile group:'com.lesfurets', name:'jenkins-pipeline-unit', version:'1.0'
}
  

Когда мы запустили сборку на основе конвейера, описанного выше, мы обнаружили, что Дженкинс может не распознать build.gradle , что приводит к следующим ошибкам:

 org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
file:/var/lib/jenkins/jobs/test-pipeline/builds/4/libs/name-of-library/src/com/test/model/SMBConnection.groovy: 4: unable to resolve class jcifs.context.BaseContext
 @ line 4, column 1.
   import jcifs.context.BaseContext
   ^

file:/var/lib/jenkins/jobs/test-pipeline/builds/4/libs/name-of-library/src/com/test/model/SMBConnection.groovy: 5: unable to resolve class jcifs.config.BaseConfiguration
 @ line 5, column 1.
   import jcifs.config.BaseConfiguration
   ^

file:/var/lib/jenkins/jobs/test-pipeline/builds/4/libs/name-of-library/src/com/test/model/SMBConnection.groovy: 3: unable to resolve class jcifs.CIFSContext
 @ line 3, column 1.
   import jcifs.CIFSContext
   ^

3 errors

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:958)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:605)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:554)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:254)
    at groovy.lang.GroovyClassLoader.recompile(GroovyClassLoader.java:761)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:718)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:787)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell$TimingLoader.loadClass(CpsGroovyShell.java:158)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:677)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:545)
    at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:185)
Caused: BUG! exception in phase 'semantic analysis' in source unit 'WorkflowScript' The lookup for com.test.controller.factory.CustboxFacadeFactory caused a failed compilaton. There should not have been any compilation from this call.
    at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:190)
    at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:170)
    at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:126)
    at org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:676)
    at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:313)
    at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1245)
    at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:176)
    at org.codehaus.groovy.control.CompilationUnit$12.call(CompilationUnit.java:663)
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:943)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:605)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:554)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
    at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
    at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:131)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:125)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:560)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:521)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:320)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE
  

Я попытался добавить эти зависимости в начало Jenkinsfile с grape обозначением.

 @Grapes([
  @Grab(group='commons-io', name='commons-io', version='2.6'),
  @Grab(group='eu.agno3.jcifs', name='jcifs-ng', version='2.1.1'),
  @Grab(group='org.slf4j', name='slf4j-api', version='1.8.0-beta4')
])
  

Однако это ничему не помогает.
Поскольку библиотека, которую я использую, содержит сотни файлов groovy, я не думаю, что добавление обозначения grape в начале каждого файла groovy является хорошей идеей.

Я также попытался преобразовать build.gradle в pom.xml и поместить его в корень репозитория библиотеки. Однако это тоже ничему не помогает.

Есть ли что-нибудь, что я могу попробовать, не переписывая этапы конвейера в задачи gradle и не используя sh('./gradlew task-name') в Jenkinsfile?