当前位置: 首页 > 面试题库 >

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

刁瀚昂
2023-03-14
问题内容

我正在尝试为CI流程编写Jenkins共享库。我想引用在\src文件夹中定义的全局函数内的\vars文件夹中的类,因为它可以使我将大多数逻辑放在类中,而不是在全局函数中。我正在遵循Jenkins官方文档中记录的存储库结构:
Jenkins Shared Library结构

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

/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

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

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

我正在努力实现的目标有可能吗?还是我应该将所有逻辑简单地放在/vars类中并避免使用/src文件夹?

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


问题答案:

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



 类似资料:
  • 我跟随詹金斯扩展共享库的管道 src目录应该看起来像标准Java源目录结构。执行管道时,此目录将添加到类路径中。 而vars目录承载定义可从管道访问的全局变量的脚本 注:我比较好奇的是用法上的区别而不是实现上的区别。

  • 我试图从一个位于vars下的新脚本中获取信息,该脚本是从共享库Jenkins类调用的,但出错了。 > 需要-全局配置文件。 目标-能够在共享库中获取全局值,而无需从Jenkins文件发送参数。 文件结构 变量/全局变量。棒极了 shared_library类 詹金斯档案 因此,我可以看到管道中第一次打印的值,但对于第二次打印,我得到: 类:src没有这样的属性:globals。组织。詹金斯。共享图

  • 我正在寻找一些关于Jenkins共享库类设计的指导。使用全局变量作为共享库可以很好地工作,但每次我在src/中定义一个类并希望导入它时,都会遇到无法解析该类的错误。 这是我的共享库结构: 类测试员。棒极了 下面是我想在管道作业中初始化的类的代码。 你好。棒极了 管道作业 在第2行中,我得到错误:无法解析类de.schlumpf.测试器。全局变量sayHello就像一个魅力...有人知道我在这里做错

  • Jenkins共享管道库是否支持文件? 这会引发错误: groovy.lang.缺少属性异常:没有这样的属性:类的结果:groovy.lang.绑定在groovy.lang.Binding.get变量(Binding.java:63)在org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.Sandbox Interceptor.onGetPrope

  • 我如何下载到我的笔记本电脑通过终端使用“wget”或python或任何相关的东西。

  • 我有一个经过验证的谷歌客户端,我想列出其他人公用文件夹中的文件(我认为共享或不共享的文件夹是不相关的,因为它是公用的) 这是我在NodeJS中的代码 注意:文档中没有“folderId”选项:https://developers.google.com/drive/api/v3/reference/files/list-只是一个drivid选项 虽然我将corpa设置为“drive”和drive I