4

我正在尝试为我的 CI 流程编写一个 Jenkins 共享库。我想引用\src文件夹中定义的全局函数内的\vars文件夹中的类,因为它允许我将大部分逻辑放在类中而不是全局函数中。我正在关注 Jenkins 官方文档中记录的存储库结构: Jenkins Shared Library structure

这是我所拥有的简化示例:


/src/com/example/SrcClass.groovy

package com.example

class SrcClass {
  def aFunction() {
    return "Hello from src folder!"
  }
}

/vars/classFromVars.groovy

import com.example.SrcClass

def call(args) {
  def sc = new SrcClass()
  return sc.aFunction()
}

詹金斯文件

@Library('<lib-name>') _
pipeline {
  ...
  post {
    always {
      classFromVars()
    }
  }
}

我的目标是让文件夹中的全局类/vars充当一种公共外观,并在我Jenkinsfile的自定义步骤中使用它,而不必在script块中实例化一个类(使其与声明性管道兼容)。这对我来说似乎很简单,但是在运行classFromVars文件时出现此错误:

<root>\vars\classFromVars.groovy: 1: unable to resolve class com.example.SrcClass
 @ line 1, column 1.
   import com.example.SrcClass
   ^

1 error

我尝试在本地和 Jenkins 服务器上classFromVars直接使用 CLI 运行该类,但在两种环境中都有相同的错误。groovy我还尝试在运行/vars脚本时指定类路径,得到相同的错误,使用以下命令:

<root>>groovy -cp <root>\src\com\example vars\classFromVars.groovy

我想要实现的目标是可能的吗?或者我应该简单地将我的所有逻辑放在/vars课堂上并避免使用该/src文件夹?

我在 GitHub 上发现了几个似乎表明这是可能的存储库,例如这个:https ://github.com/fabric8io/fabric8-pipeline-library ,它使用/src文件夹中的类在许多类中/vars文件夹。

4

1 回答 1

0

正如@Szymon Stepniak 指出的那样,-cp我的groovy命令中的参数不正确。它现在可以在本地和 Jenkins 服务器上运行。我还没有解释为什么它不能在 Jenkins 服务器上运行。

于 2019-10-23T19:06:26.117 回答