Jenkins共享库-从/ vars中的/ src文件夹导入类

时间:2019-10-23 17:38:52

标签: jenkins groovy jenkins-shared-libraries

我正在尝试为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()
}

Jenkinsfile

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

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

classFromVars

我尝试在本地和Jenkins服务器上直接通过<root>\vars\classFromVars.groovy: 1: unable to resolve class com.example.SrcClass @ line 1, column 1. import com.example.SrcClass ^ 1 error CLI运行classFromVars类,并且在两种环境下都存在相同的错误。我还尝试在运行groovy脚本时指定类路径,并使用以下命令得到相同的错误:

/vars

我要实现的目标是可能的吗?还是我应该将所有逻辑都放在<root>>groovy -cp <root>\src\com\example vars\classFromVars.groovy 类中,避免使用/vars文件夹?

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

1 个答案:

答案 0 :(得分:0)

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