问题标签 [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 - Log4j2 写入 Jenkins 管道作业控制台输出?
如何使用 log4j2 将消息记录到 Jenkins 管道作业控制台输出(在作业运行时)?
通过控制台输出,我的意思是从通常找到的作业输出的文本日志:
http://localhost:8080/job/<Job Name>/<Job Run Number>/console
C:\Program Files (x86)\Jenkins\jobs\<Job Name>\builds\<Job Run Number>\log
例如,从使用共享库的 Jenkins 管道作业中,调用 log4j2 的类Logger.info()
:
理想情况下,我希望能够在运行时设置额外的 log4j2 配置以添加针对当前正在运行的作业的控制台输出流的“附加程序”。
我计划尝试的一件事是直接从 log4j2 附加到C:\Program Files (x86)\Jenkins\jobs\<Job Name>\builds\<Job Run Number>\log
文件,这是我必须在运行时设置的配置。但是,我不知道这与 Jenkins 的控制台输出视图的兼容性如何,或者 Jenkins 在作业执行期间是否锁定了文件,或者在 Jenkins 写入文件的同时是否会出现未知问题。
jenkins - jenkins 在我自己的共享库中使用其他变量
我正在编写自己的共享库。现在我想在我的代码中使用全局变量。我怎样才能做到这一点?
IE 我写了一个类。
jenkins - 我可以在共享库中定义和参数化整个声明性管道吗?
本质上,我希望我的 Jenkinsfile 看起来像这样:
然后我的共享库(/vars/descriptivePipeline.groovy)将如下所示:
我想集中管道配置,所以我不必担心 Jenkinsfile 蔓延。声明性管道可以做到这一点吗?
jenkins - 如何从共享库 src 文件运行完整的 Jenkins 脚本化管道阶段
我最近开始使用 Jenkins 管道中的 Jenkins 共享库。我创建了一个“func.groov”类并将其放在“src/org/prj/func.groovy”下:
Jenkinsfile(脚本)看起来像:
所以目前它有效。我的问题是如何创建一个完整的阶段(如“A”)作为 func.groovy 共享库中的一个函数,其中包括,例如:
- GIT 结帐步骤
- sh 编译步骤
- Artifactory 部署步骤
我实际上希望使用 Jenkins 管道和分片库创建一个“构建块”(在我的示例中为“构建”)。
jenkins - Jenkins Pipeline - 共享 jar 中的调用函数
所以这是我的项目设置
- 一个单独的 groovy 项目
- 多个管道
所有管道脚本都引用了共享的 groovy 项目。我浏览了共享库和所有需要在 Jenkins 全局配置中注册的需求。
没有它有什么办法吗?我尝试使用 Grab,但最终出现错误
groovy - 詹金斯管道:从另一个詹金斯文件中读取值
我使用一个共享的 jenkins 库并从那里克隆另一个 git repo。该 repo 包含一个类似于以下内容的 jenkinsfile:
我想读“someValue”。目前我正在使用正则表达式执行此操作,但这样我只能检索字符串而不是更复杂的值,例如地图。
在共享 jenkins 库的文档中,值是通过以下方式从 jenkinsfile 加载的:
如何以类似的方式从工作区中的 Jenkinsfile 中提取值?身体从哪里来?
感谢您的时间
jenkins - 在 Jenkins 管道中成功加载环境变量,但在管道用作共享库时加载
在我的声明性 jenkins 管道代码的一个阶段,它执行 bash 脚本(sh '''./a.sh'''
脚本“a.sh”在外部维护) - 在该脚本中,“jarVersion”的值被注入 ${WORKSPACE}/.jarVersion ( echo "jarVersion=${jarVersion}" > ${WORKSPACE}/.jarVersion
) . 在后期,我们需要获取 jarVersion 的值。我们使用load "${WORKSPACE}/.jarVersion"
and${jarVersion}
来获取值。当我们在管道脚本中这样做时,它会起作用。
但是,当我们将此管道设置为共享库(放入/vars/testSuite.groovy
)并在另一个管道脚本中调用它时。它无法识别 var ${jarVersion}
。
请告知如何解决该问题。一个常见的问题是:如何将脚本中的值从阶段 A 转移到阶段 B?
我希望它可以像在管道脚本中一样工作。
但它显示:
jenkins-shared-libraries - 访问 jenkins 共享库代码中的环境变量
当我使用我的新共享库时,我无法访问由 Jenkinsfile 直接执行或通过 var/*.groovy 脚本执行的任何 src 类的环境变量。即使我将withEnv添加到 var/*groovy 脚本,此问题仍然存在。
让环境变量传播到 jenkins 共享库 src 类执行的技巧是什么?
詹金斯文件
共享库 var/lib.groovy
共享库 src/MyClass.groovy
** 运行结果 **
jenkins - 为什么 Jenkins 在沙箱内运行共享管道库?
我创建了一个 git repo,其中包含以下文件src/com/me
:
然后,我将该 git repo 添加到 Manage Jenkins -> Configure System 中的“Global Pipeline Libraries”部分。
然后我使用以下管道脚本创建了一个简单的管道项目:
当我运行作业时,它失败了:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用方法 groovy.lang.GroovyObject getProperty java.lang.String (com.me.JobTriggerInfo.wasStartedByTimer)
我的理解是,基于Jenkins 官方文档,全球管道库将在沙箱之外运行。
我错过了什么?我需要做什么才能让此代码从全局管道库而不是沙箱中运行?