【发布时间】:2021-08-18 17:59:48
【问题描述】:
我正在尝试加载相同 Jenkins shared library 的两个版本。这个库主要包含 Jenkins 和管道的辅助函数。
需要两个版本的原因是我们的许多管道都有一些序言/尾声,通常使用这些辅助函数的最新版本,而在这之间,会调用特定项目的管道,这可能需要旧版本辅助函数的版本。这样,更新辅助函数就不需要修改旧管道。
到目前为止,我正在尝试这样的事情:
def latestlib = library identifier: 'jenkinslib-latest@default', retriever: legacySCM(
[$class: 'SubversionSCM',
locations: [[
depthOption: 'infinity',
ignoreExternalsOption: false,
remote: "svn://../jenkinslib/branches/<latest-branch>"
]],
workspaceUpdater: [
$class: 'CheckoutUpdater'
]
]
)
def olderlib = library identifier: 'jenkinslib-old@default', retriever: legacySCM(
[$class: 'SubversionSCM',
locations: [[
depthOption: 'infinity',
ignoreExternalsOption: false,
remote: "svn://../jenkinslib/branches/<old-branch>"
]],
workspaceUpdater: [
$class: 'CheckoutUpdater'
]
]
)
这个库(它的两个版本)在 src/org/jenkinslib/HelperFunctions.groovy 有一个类 HelperFunctions,看起来像这样:
package org.jenkinslib
class HelperFunctions implements Serializable {
...
}
回到管道,我尝试创建HelperFunction 两个类的实例:
def hf = latestlib.org.jenkinslib.HelperFunctions.new()
def hf2 = olderlib.org.jenkinslib.HelperFunctions.new()
这失败了:
java.lang.LinkageError:加载程序(org/jenkinsci/plugins/workflow/cps/CpsGroovyShell$CleanGroovyClassLoader 的实例):尝试重复的类定义名称:“org/jenkinslib/HelperFunctions”
我想这是有道理的。有没有办法解决这个问题?
【问题讨论】:
标签: jenkins groovy jenkins-groovy