Jenkins:按名称获取文件夹库

Jenkins: Get FOLDER Library by Name

/vars 中我有 AaConfig.groovy.

的文件夹

在作业的 Groovy 脚本中我有:

#!groovy
@Library('globals') _

Class config = AaConfig

我可以使用 config 而不是 AaConfig,在后续代码中没有问题。

This is useful because I can call different configuration files: AaConfig, BbConfig, etc. without changing anything because i'm calling them through config

所以现在我很贪心:-),想在外部指定配置文件:

#!groovy
@Library('globals') _

String configName = "AaConfig"
Class config = Class.forName(configName)

现在我得到:

java.lang.ClassNotFoundException: AaConfig

有什么解决办法吗?

如果您想通过反射加载 AaConfig class,那么您必须使用与管道脚本相同的 classloader。 Class.forName() 在这种情况下使用 ClassLoaderForClassArtifacts while Groovy CPS plugin uses CpsGroovyShell$CleanGroovyClassLoader.

您可以在下方找到使用管道电流 classloader:

加载 class 的示例
String configName = 'AaConfig'

Class config = this.getClass().getClassLoader().loadClass(configName)