首页 > 解决方案 > 在另一个 java 管道项目中引用库时,在共享库中定义的 @Grab 不起作用

问题描述

我们使用 Groovy 创建了一个管道共享库,并在其中一个 java 项目中引用了它。在运行单个构建时,共享库的构建正在成功,但是当我们引用共享库并运行 java 项目的 jenkins 管道构建时,它会因以下错误而失败。

org.jenkinsci.plugins.workflow.cps.CpsCompilationErrorsException: startup failed:
file:/var/lib/jenkins/jobs/Pipeline%20Test/jobs/pipeline-test/branches/develop/builds/10/libs/c3-shared-library/src/com/test/c3/http/JenkinsHttpClient.groovy: 6: unable to resolve class jodd.http.HttpRequest
 @ line 6, column 1.
   @Grab("org.jodd:jodd-http:5.1.0")

c3-shared-library - JenkinsHttpClient.groovy:

#! /usr/bin/groovy
package com.test.c3.http

import com.cloudbees.groovy.cps.NonCPS
import groovy.json.JsonBuilder
@Grab("org.jodd:jodd-http:5.1.0")
import jodd.http.HttpRequest
import jodd.http.HttpResponse


class JenkinsHttpClient implements Serializable {

    private String userAgent


    JenkinsHttpClient(String userAgent = "Jenkins"){
        this.userAgent = userAgent
    }

特此附上jenkins配置。请检查并提供您的宝贵意见。

詹金斯配置

共享库管道 build.grade:

group "com.test.c3"
version "1.0.0-develop-SNAPSHOT"

apply plugin: 'maven'
apply plugin: 'groovy'

repositories {
    mavenCentral()
}

compileGroovy {
    groovyOptions.configurationScript = file("gradle/config.groovy")
}

sourceSets {
    groovy {
        main.groovy.srcDirs += 'src/'
        main.groovy.srcDirs += 'vars/'
        test.groovy.srcDirs += 'tests/'
    }
}

dependencies {
    compile "org.apache.ivy:ivy:2.5.0"
    compile 'org.codehaus.groovy:groovy-all:2.5.9'
    compile 'org.jodd:jodd-http:5.1.0'
    compile 'com.cloudbees:groovy-cps:1.31'

    testImplementation group: 'junit', name: 'junit', version: '4.4'
}

标签: jenkinsgroovyjenkins-pipelinejenkins-groovy

解决方案


推荐阅读