Jenkins Pipeline には、CPSGroovyShell によって実行される CpsGroovyScript があり、グローバル ライブラリの場所へのパスが追加されたカスタム クラスパスがあります。
Jenkins インスタンスのすべてのパイプラインで使用できるようにする前に変更をテストできるようにするために、実行時にクラスをアンロードし、スクリプトのクラスパスをそれ自体から変更して、クラスパスをオーバーライドしたいと考えています。
私の考えは、変更されたクラスが最初に見つかるように、現在のクラスパスに新しい場所を追加することです。this.class.classLoader.addURL()素晴らしいですが、新しいパスはクラスパスの最後になります。
.../src- これは現在の本番コードのルートであり、デフォルトではクラスパスに
あります.../branch-src- これは変更したコードのルートです。.../src
たとえば、私が呼び出したときにクラスをオーバーライド.../src/com/foo/Bar.groovyし たい.../branch-src/com/foo/Bar.groovyimport com.foo.Barnew com.foo.Bar()
これがまったく機能しない場合、他のハックがあります。つまり、元のクラスパスを完全に置き換えるか、クラスローダー全体を置き換えるなどです。