问题标签 [jenkins-shared-libraries]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
163 浏览

jenkins - Jenkins 共享库:通过 Builder 模式实例化类失败

CloudBees 核心:2.249.1.2-滚动

此处的代码位于 Jenkins 共享库中,而该共享库又被其他 Jenkins 共享库调用。

下面是标准 Builder 模式的实现,用于创建自定义 HttpRequest 类的实例。

类中的调用,即。Change.groovy 如下:

错误:

我在看什么?

0 投票
1 回答
93 浏览

groovy - 是否可以禁用属性语法以访问 groovy 中的 getter?

让我们有一个时髦的类,比如:

通常在 groovy 中,使用属性名称或 getter 访问值是完全有效的——这通常会给出相同的结果SomeClass

但是 - 由于 Jenkins Pipeline 实现中的缺陷 - 有时(!)您被迫使用 getter - 因为普通属性访问将不起作用(使用某些类层次结构时),请参阅:JENKINS-47143。坏事是相同的代码可能适用于某些工作,而它不适用于其他工作:

现在我已经为我们的 Jenkins 共享库进行了几个单元测试——但缺少的是一种检测属性访问的方法,简而言之:一种禁止属性访问的方法,因此单元测试已经提前抱怨。

0 投票
1 回答
248 浏览

jenkins - 将环境变量作为管道参数传递给 Jenkins 共享库

我有一个共享的 Jenkins 库,其中包含我的 Jenkinsfile 管道。该库的结构如下:

myPipeline.groovy文件

我的 Jenkinsfile 如下:

詹金斯文件

现在,我想用命令替换"Some name"字符串。"env.JOB_NAME"通常在 Jenkinsfile 中,我会使用它name = "${env.JOB_NAME}"来获取信息,但是因为我使用的是我的共享库,所以它无法工作。错误信息如下:

我试图玩弄括号和其他符号,但从未成功过。我认为我错误地传递了一个参数。一旦库运行我正在调用的管道(通过命令) ,我希望 Jenkinsfile 分配"${env.JOB_NAME}"给变量projectNamemyPipeline{}

0 投票
1 回答
2902 浏览

jenkins - 向 Jenkins 共享库提供参数

我有一个用于 Jenkinsfile 的 Jenkins 共享库。examFun()我的库有一个完整的管道,它有一个在我的管道中使用的函数(让我们称之为)。

我的詹金斯文件:

我的共享库文件(称为jenkinsPipeline.groovy):

它工作正常,但是 的值examFun()是硬编码的,将来可能需要更改。因此,我希望能够从我的 Jenkinsfile 中更改它们(就像我可以更改一样 exampleArg)。在这篇文章之后,我尝试了以下方法:

我改变了examFun()

并从我的 Jenkinsfile 中调用它,如下所示

但这不起作用(可能是因为我的库是通过 构建的 def call(body){})。之后,我尝试将 jenkinsPipeline.groovy 拆分为 2 个文件:第一个文件包含我的管道部分,第二个文件examFun()包含randClass其中。我将我的 Jenkinsfile 修改为如下:

但又一次没有成功。错误总是说

更新 - 新错误

感谢 zett42 ,我已经成功解决了这个错误。但是,我遇到了下面提到的另一个错误:

为了解决这个问题,就我而言,我需要examFun()在我的 Jenkinsfile 中分配一个变量并将其作为参数传递给jenkinsPipeline{}. 功能代码如下: Jenkinsfile

jenkinsPipeline.groovy

0 投票
1 回答
401 浏览

jenkins - 使用 Jenkins Shared Pipeline 中的另一个类

我目前正在使用 Jenkins 库,而我的工作没有问题。现在我正在尝试做一些重构,有一大块代码可以用 AWS 帐户来确定,以用于我们目前在库中拥有的几乎所有工具。

我创建了以下文件“get account.groovy”

然后我尝试从其他 groovy 脚本之一中执行此操作:

但这不起作用,因为它正在当前工作目录中而不是库目录中查找该文件

我无法弄清楚从已经被使用的库中调用另一个类的最佳方法是什么。

0 投票
0 回答
179 浏览

jenkins - 如何在 jenkins 共享库中定义凭据和环境变量

目前我的 Jenkins 文件中有以下代码

由于此代码在多个地方使用,我希望此代码位于共享库中,例如 vars/commonCredentials.groovy

存档此文件的最佳方法是什么?如何在我的 Jenkins 文件中使用它?

0 投票
1 回答
218 浏览

jenkins - 如何使用 Subversion 设置 Jenkins 共享库

我在网上看到的 Jenkins 共享库设置的每个示例都是基于 Git/GitHub 的。任何人都可以使用 Subversion 帮助我吗?
我挣扎了很多,但无法弄清楚应该将什么指定为Default version. 我尝试了许多不同的 , 组合,Project Repository Base但都没有奏效。 附件是我的 SVN 存储库设置的屏幕截图。我知道它不符合标准,它应该以某种方式工作,因为它只是一个演示项目。 Include branchesLibrary NameDefault version



在此处输入图像描述

0 投票
0 回答
49 浏览

jenkins-groovy - 在 Jenkins Groovy 共享库设计中使用 sh() 与 execute() - 在主机之间切换?

当使用运行“sh”与“执行”的一段测试代码时,我注意到环境变量存在很大差异。它很快看起来好像涉及两个完全不同的主机 - 即使调用行在相同的脚本级别上只有大约两行。

我的测试代码就是这样(简化/原理):

示例构建产生了以下输出:

观察到环境变量的许多其他差异。理由:这绝对不是同一个运行时环境,甚至可能不是同一个计算机系统。我此刻很疑惑!

这怎么能理解?这怎么可能控制?事实上,我希望 execute() 调用的行为与 sh() 相同。

0 投票
1 回答
258 浏览

jenkins - 将环境变量从 Jenkins 文件传递​​/注入/引用到具有通用代码的共享库

我有一个用于所有存储库的通用 Jenkins 共享库,如下所示

vars/_publish.groovy

詹金斯文件

这适用于 1 项单一服务。现在我想为所有服务/项目保留这个 jenkins 共享库,但每个服务都有不同的环境变量。

vars/_publish.groovy中的环境块 {}有 10 个环境变量,这些变量对于所有项目/服务都不是恒定的。这些值因项目/服务而异。如何将 env 变量传递给这个 jenkins 共享库以用于不同的项目?每个项目/服务都有不同的 Jenkins 管道。我可以将变量从 jenkinsfile 传递到共享库吗?任何人都可以帮忙吗?

0 投票
0 回答
123 浏览

java - Jenkins 共享库无法将 Java 类从 src 导入到 vars 脚本

我创建了具有以下结构的共享 jenkins 库:

  • mylib/src/com/company/config/Config.java(这个类包含 lambdas)
  • mylib/vars/configClient.groovy(包含几个带有注释@NonCPS 的方法并从 com.company.config.Config 导入)

这个共享库通过 @Library('mylib@develop') 作为基于文件夹的共享库包含在 Jenkins 上,我在 configClient.groovy 中得到异常结果:org.jenkinsci.plugins.workflow.cps.CpsCompilationErrorsException: startup failed: .... unable to resolve class

我多次验证了包的路径(它是正确的),我将包结构从 Maven 默认修改为 src/ - vars/。我用 @NonCPS 注释了 groovy 脚本中的所有函数,因为 java 类非常复杂,无法序列化。我也做了检查以通过创建简单的类new,我得到了同样的错误:'无法解析类'

我从管道中调用了这个库。有人可以提出任何如何调试或修复的想法吗?