jenkins - 在 Jenkins Pipeline 中导入具有常量的类时出错
问题描述
我正在遵循如何在 Jenkins Pipeline 中导入具有常量的类中的方法?
我使用类似的代码,但得到以下错误:
WorkflowScript: 5: unable to resolve class ru.foo.bar.Const
@ line 5, column 1.
import ru.foo.bar.Const
^
1 error
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.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:133)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:126)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:561)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:522)
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)
代码如下:
src/ru/foo/bar/Const.groovy
package ru.foo.bar
class Const {
public static final String BITBUCKET_LOGIN = "DEV_LOGIN"
public static final String BITBUCKET_PASS = "DEV_PASS"
}
return new Const()
import ru.foo.bar.Const
pipeline {
stages {
stage('init') {
steps {
script {
println("${Const.BITBUCKET_LOGIN}")
}
}
} /* 'ais refstack parallel builds' */
}
我的用法有什么不正确的吗?
解决方案
实际上,您需要使该类对您的Jenkinsfile
. 据我了解,这import
还不够。
检查相关的詹金斯文档:
也可以使用 src/ 目录中的类,但比较棘手。@Library 注释在编译之前准备脚本的“类路径”,当遇到库步骤时,脚本已经被编译。因此,您不能导入或以其他方式“静态”引用库中的类型。
但是,您可以动态使用库类(无需类型检查),通过库步骤的返回值中的完全限定名称访问它们。可以使用类似 Java 的语法调用静态方法:
library('my-shared-library').com.mycorp.pipeline.Utils.someStaticMethod()
您还可以访问静态字段,并像调用名为 new 的静态方法一样调用构造函数:
def useSomeLib(helper) { // dynamic: cannot declare as Helper
helper.prepare()
return helper.count()
}
def lib = library('my-shared-library').com.mycorp.pipeline // preselect the package
echo useSomeLib(lib.Helper.new(lib.Constants.SOME_TEXT))
但是您的代码段表明您正在处理凭据。您应该认真考虑妥善处理它们。
environment {
BITBUCKET = credentials('bitbucket')
}
推荐阅读
- r - 从 2019 年 10 月 1 日到 2019 年 12 月 30 日,在 R 中创建时间序列,不包括周末或节假日
- python - django如何从函数中返回classBasedView
- python - 弹出时如何在组合框上启用写入
- owasp - 在白名单操作上使用自定义 REQUEST_HEADER
- .net-core - 当分区未知(但行键是)时检索结果
- python - 如何使用 Numpy 创建给定无符号整数的二进制数字数组?
- typescript - 从接口中删除 TypeScript 可索引类型
- javascript - 添加事件监听器 | 拦截方法调用
- f# - 如何遍历 FSharp.Data HtmlDocument 以将内容提取为字符串?
- c - 简单 C 程序中的溢出