1

考虑在 Jenkins 中作为共享库加载的 repo 中的这个 groovy 文件:

/ vars
|
--- Utility.groovy

// Utility.groovy

def funcA() { ... }

def funcB() { ... }

在 Jenkinsfile 中:

// Jenkinsfile

@Library('LibName') _

pipeline {
...
steps {
   script {
      def util = new Utility()
      util.funcA()
   }
 }
}

这工作正常。但是如果我尝试动态加载库:

// Jenkinsfile

pipeline {
   ...
   steps {
       script {
          library 'LibName'
          def util = new Utility()
       }

    }


}

那行不通...

有人可以就文档中的这句话解释一下吗:

Jenkins 中共享库的文档说:

在内部,vars 目录中的脚本按需实例化为单例。为方便起见,这允许在单个 .groovy 文件中定义多个方法。

4

1 回答 1

0

动态加载 Jenkins 共享库有一些限制和挑战,因为:

也可以使用 src/ 目录中的类,但比较棘手。@Library 注释在编译之前准备脚本的“类路径”,当遇到库步骤时,脚本已经被编译。因此,您不能导入或以其他方式“静态”引用库中的类型。这是解释here

似乎这个问题与这个问题有点相似

于 2021-02-07T20:59:28.130 回答