问题标签 [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.
jenkins - Jenkins 共享库:通过 Builder 模式实例化类失败
CloudBees 核心:2.249.1.2-滚动
此处的代码位于 Jenkins 共享库中,而该共享库又被其他 Jenkins 共享库调用。
下面是标准 Builder 模式的实现,用于创建自定义 HttpRequest 类的实例。
类中的调用,即。Change.groovy 如下:
错误:
我在看什么?
groovy - 是否可以禁用属性语法以访问 groovy 中的 getter?
让我们有一个时髦的类,比如:
通常在 groovy 中,使用属性名称或 getter 访问值是完全有效的——这通常会给出相同的结果SomeClass
:
但是 - 由于 Jenkins Pipeline 实现中的缺陷 - 有时(!)您被迫使用 getter - 因为普通属性访问将不起作用(使用某些类层次结构时),请参阅:JENKINS-47143。坏事是相同的代码可能适用于某些工作,而它不适用于其他工作:
现在我已经为我们的 Jenkins 共享库进行了几个单元测试——但缺少的是一种检测属性访问的方法,简而言之:一种禁止属性访问的方法,因此单元测试已经提前抱怨。
jenkins - 将环境变量作为管道参数传递给 Jenkins 共享库
我有一个共享的 Jenkins 库,其中包含我的 Jenkinsfile 管道。该库的结构如下:
myPipeline.groovy文件
我的 Jenkinsfile 如下:
詹金斯文件
现在,我想用命令替换"Some name"
字符串。"env.JOB_NAME"
通常在 Jenkinsfile 中,我会使用它name = "${env.JOB_NAME}"
来获取信息,但是因为我使用的是我的共享库,所以它无法工作。错误信息如下:
我试图玩弄括号和其他符号,但从未成功过。我认为我错误地传递了一个参数。一旦库运行我正在调用的管道(通过命令) ,我希望 Jenkinsfile 分配"${env.JOB_NAME}"
给变量projectName
myPipeline{}
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:
jenkins - 使用 Jenkins Shared Pipeline 中的另一个类
我目前正在使用 Jenkins 库,而我的工作没有问题。现在我正在尝试做一些重构,有一大块代码可以用 AWS 帐户来确定,以用于我们目前在库中拥有的几乎所有工具。
我创建了以下文件“get account.groovy”
然后我尝试从其他 groovy 脚本之一中执行此操作:
但这不起作用,因为它正在当前工作目录中而不是库目录中查找该文件
我无法弄清楚从已经被使用的库中调用另一个类的最佳方法是什么。
jenkins - 如何在 jenkins 共享库中定义凭据和环境变量
目前我的 Jenkins 文件中有以下代码
由于此代码在多个地方使用,我希望此代码位于共享库中,例如 vars/commonCredentials.groovy
存档此文件的最佳方法是什么?如何在我的 Jenkins 文件中使用它?
jenkins-groovy - 在 Jenkins Groovy 共享库设计中使用 sh() 与 execute() - 在主机之间切换?
当使用运行“sh”与“执行”的一段测试代码时,我注意到环境变量存在很大差异。它很快看起来好像涉及两个完全不同的主机 - 即使调用行在相同的脚本级别上只有大约两行。
我的测试代码就是这样(简化/原理):
示例构建产生了以下输出:
观察到环境变量的许多其他差异。理由:这绝对不是同一个运行时环境,甚至可能不是同一个计算机系统。我此刻很疑惑!
这怎么能理解?这怎么可能控制?事实上,我希望 execute() 调用的行为与 sh() 相同。
jenkins - 将环境变量从 Jenkins 文件传递/注入/引用到具有通用代码的共享库
我有一个用于所有存储库的通用 Jenkins 共享库,如下所示
vars/_publish.groovy
詹金斯文件
这适用于 1 项单一服务。现在我想为所有服务/项目保留这个 jenkins 共享库,但每个服务都有不同的环境变量。
vars/_publish.groovy中的环境块 {}有 10 个环境变量,这些变量对于所有项目/服务都不是恒定的。这些值因项目/服务而异。如何将 env 变量传递给这个 jenkins 共享库以用于不同的项目?每个项目/服务都有不同的 Jenkins 管道。我可以将变量从 jenkinsfile 传递到共享库吗?任何人都可以帮忙吗?
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
,我得到了同样的错误:'无法解析类'
我从管道中调用了这个库。有人可以提出任何如何调试或修复的想法吗?