如何在Jenkins中用Gradle编译含@Library与@NonCPS的代码
解决脚本式流水线中@Library和@NonCPS的Gradle编译错误
我之前也碰到过一模一样的问题!这俩注解属于Jenkins Pipeline的核心API,但光随便加个workflow依赖还不够,得找对正确的依赖包和配置方式,我给你梳理几个关键步骤:
1. 引入正确的Jenkins Pipeline依赖
@NonCPS和@Library分别来自不同的Jenkins插件依赖,你需要在build.gradle里明确指定这两个依赖(版本尽量和你Jenkins服务器的版本匹配,避免兼容性问题):
dependencies { // 提供@NonCPS注解 compile 'org.jenkins-ci.plugins.workflow:workflow-cps:2.92' // 提供@Library注解 compile 'org.jenkins-ci.plugins.workflow:workflow-libs:2.19' // Jenkins核心依赖,避免其他关联API找不到 compile 'org.jenkins-ci.main:jenkins-core:2.346.3' }
2. 添加Jenkins官方仓库
Jenkins的插件依赖不在Maven Central上,所以必须在build.gradle里添加Jenkins的公共仓库,否则Gradle拉取不到对应的依赖包:
repositories { mavenCentral() maven { url 'https://repo.jenkins-ci.org/public/' } }
3. 调整Java版本兼容
大部分Jenkins版本还是基于Java 8运行的,所以要确保你的Gradle编译配置和Java 8兼容:
sourceCompatibility = 1.8 targetCompatibility = 1.8
4. 注意脚本式流水线的场景差异
如果你只是在Jenkinsfile里直接使用这些注解,其实不需要本地编译Jenkinsfile——Jenkins服务器会自动解析并运行。只有当你把流水线逻辑抽成了独立的Groovy类库(需要本地编译后上传到Jenkins库)时,才需要上面的配置。
按照上面的步骤调整后,应该就能解决找不到注解类的问题了。我当时就是因为漏加了Jenkins的仓库,导致依赖一直拉取不到,折腾了好半天😂
内容的提问来源于stack exchange,提问作者Tin Topolovec
相关产品推荐
相关产品推荐

