在Jenkins Pipeline中,我们有一个由CPSGroovyShell执行的CpsGroovyScript,它带有一个自定义类路径,该路径附加了Global Library位置的路径。
为了能够在我的Jenkins实例上的所有管道可用之前测试我的更改,我想通过卸载类并在运行时从自身修改脚本的类路径来覆盖类路径。
我的想法是在前面添加一个新位置的当前类路径,以便首先找到更改的类。 if
很棒,但是新路径到了classpath的末尾。
this.class.classLoader.addURL()
- 这是当前生产代码的根,默认情况下在classpath中
.../src
- 这是我更改的代码的根,我希望使用它而不是.../branch-src
例如,当我致电.../src
或.../src/com/foo/Bar.groovy
.../branch-src/com/foo/Bar.groovy
覆盖课程import com.foo.Bar
如果这根本无法工作,那么还有其他任何黑客攻击,即完全替换原始类路径,或替换整个类加载器,无论如何。