问题标签 [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 MultiBranchPipeline 首先加载共享库 repo
我遇到了在我的 MBP 作业中检索主存储库之前检索共享库的问题。在我的常规管道和自由式工作中,情况并非如此。因为 Jenkinsfile 共享库方法尝试从主存储库读取 Xcode 的版本,所以 MBP 作业失败并出现以下错误。这是可以理解的,因为存储库尚未签出。这在常规管道作业中非常有效,我可以在常规管道作业的日志中看到在共享库之前发生轻量检出。在 MBP 中,有没有办法强制在共享库之前签出主存储库?
==================================================== ========================================== 在 MultiBranchPipeline 中失败:
==================================================== ========================================== 在常规管道中成功:
groovy - 从共享库类调用 Jenkins git 插件
- 我有一个长期的声明性管道基础设施
- 我想开始将重复的代码放入共享库中
我面临的问题是git
从共享库函数/类中调用插件。我有点迷茫,因为我的经验实际上只涉及 Jenkins 声明性的东西,而不是 Groovy/Java 的细节。
这是 Jenkinsfile 的片段,(在使用共享库之前):
请注意从 git repos 中下拉项目文件的重复调用。这里的目标是将重复的代码移动到共享函数调用中。
我已经阅读了手册中关于如何git
在共享库中使用的以下部分:
https ://www.jenkins.io/doc/book/pipeline/shared-libraries/#accessing-steps
使用文档中的示例,我创建了共享库文件
在src/org/test/gitHelper.groovy
:
然后在Jenkinsfile
:
这会加载类并很好地调用函数,但是当它遇到git
自身时会失败:
groovy.lang.MissingPropertyException: No such property: git for class: java.lang.String
我曾经g.getClass()
确认它是类型class org.test.gitHelper
而不是类型,java.lang.String
所以我不确定它是从哪里获得这种类型的。
请注意我也尝试过这种方式:
vars/pullRepo.groovy
詹金斯文件:
我得到完全相同的错误:groovy.lang.MissingPropertyException: No such property: git for class: java.lang.String
jenkins - Jenkins 管道通过管道库获得“没有这样的属性”
在我的共享库中,我定义:
变量/checkoutSvnCode.groovy
在我的管道中,我定义
现在我得到这个错误
groovy.lang.MissingPropertyException:没有这样的属性:类的修订:groovy.lang.Binding
我怎样才能在我的管道中获得“修订”?
jenkins - 如何在 Jenkins 全局库中使用 sh
我正在为托管在 github 上的 Jenkins 创建自己的全局库,为了简化一些普通任务,我想添加一个返回 GIT 标记的函数。
因此我创造了这样的东西:
...导致此错误:
没有方法签名:静态 com.stevnsvig.jenkins.release.ReleaseUtil.sh()
所以我有两个问题:
sh()
导入Jenkins 的 groovy 风格显然已经导入的库的解决方案是什么?(如果是这样的话)- 这里的最佳做法是什么?我想知道为什么在
GIT_TAG
使用声明性管道时没有全局变量,这样的事情(在我看来)应该很容易。
编辑#1:
产生类似的错误:
没有方法签名:静态 com.stevnsvig.jenkins.release.ReleaseUtil.sh() 适用于参数类型:(java.util.LinkedHashMap) 值:[[returnStdout:true, script:git tag --sort version:refname | 尾巴-1]]
编辑#2:
完成,但输出为空白。运行相同的命令并pwd
返回/
表明未设置环境的返回值,这是有道理的,因为在 Jenkins 下运行的所有命令都设计为在管道下运行
编辑#3:
我去寻找进口。在 github 上偶然发现了 Jenkins CI 项目并开始搜索许多存储库。找到了一个有希望的pwd.groovy
...并放入一个/vars
包含以下内容的文件:
我得到的错误是相同的变体。我想因为它的插件,定义是不同的......
hudson.remoting.ProxyException:groovy.lang.MissingMethodException:没有方法签名:静态 org.jenkinsci.plugins.workflow.steps.durable_task.ShellStep.sh() 适用...
jenkins - jenkinspipeline groovy.lang.MissingMethodException:没有方法签名
我创建了一个管道,该管道接受一组 JSON 对象,并将调用一个共享库,该库将迭代 JSON 对象
尝试运行 Jenkins 作业以测试我是否可以转发对象但我看到以下错误:
代码:
eclipse - 开发 Jenkins 的共享库时,如何在 Eclipse 中获得正确的语法突出显示?
我正在为 Jenkins 开发一个共享库,其中vars/
包含src/
. 我有这两个绊脚石:
我使用 Jenkins 特定的方法
sh
或echo
. 它是灰色的,因为 Eclipse 没有将其识别为正确的 Groovy 方法。有没有办法让 Eclipse 知道这些?vars/foo.groovy
我用两种方法创建了一个文件,call()
并且helper()
. 在任何地方使用foo()
他的程序会导致它变灰,这表明 Eclipse 不知道它指的是什么。有没有办法让 Eclipse 明白foo()
现在是一种合法的方法?
请注意, insidefoo.groovy
、call()
和helper()
都被识别为有效方法。对于一个类也是如此src/clazz.groovy
- 在共享库中的任何地方都使用new clazz()
被识别为有效代码,并且显示的文档引用了该clazz.groovy
文件。
如果在 Jenkins 上运行,所有这些都可以正常工作,这纯粹是关于语法突出显示,如果可能的话,在将鼠标悬停在函数上时显示 Javadoc。不过,语法突出显示是主要问题,因为部署共享库是一个 PITA,只是发现某个函数中有一个错字,我没有发现,因为它都是灰色的。
默认的 Groovy 语法高亮有效,这只是与 Jenkins 和/或共享库直接相关的方法。
这对我没有帮助,因为它指的是 IntelliJ,遗憾的是这不是一个选择。
docker - 如何将共享库的分支名称指定为环境变量
我想引用/指定(语法)分支,该分支设置为 Jenkins 共享库的环境变量,它将在 docker 容器期间提供。例如:
@Library(['my-shared-library', BRANCH_NAME])
尝试使用 ${BRANCH_NAME} ${env.BRANCH_NAME}
我将在 docker-compose.yml 中提供 BRANCH_NAME 作为环境变量
我也想在 org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml 中获得 env 变量
就像我将 PIPELINE_VERSION 设置为 env 变量
谢谢, Kusuma
jenkins - 在詹金斯字符后返回字符串
我在 groovy 中使用共享库。我有这个变量将返回:feature/nameofthebranch
但是,我只需要“/”之后的字符,我尝试过拆分和其他东西,但没有按我的意愿工作,可能是因为我在 groovy 方面很笨拙。
预期结果应该是从feature/nameofthebranch到"nameofthebranch"
jenkins - 在 Jenkins 共享库中使用多方法全局变量
考虑在 Jenkins 中作为共享库加载的 repo 中的这个 groovy 文件:
在 Jenkinsfile 中:
这工作正常。但是如果我尝试动态加载库:
那行不通...
有人可以就文档中的这句话解释一下吗:
Jenkins 中共享库的文档说:
在内部,vars 目录中的脚本按需实例化为单例。为方便起见,这允许在单个 .groovy 文件中定义多个方法。
jenkins - Jenkins 共享库中的“vars”如何工作?
我在 Jenkins 共享库中遇到了一些行为,如果有人可以向我解释这一点,那就太好了:
首要问题
假设我在vars
目录中有一个文件:
现在,如果我想使用管道中的这些功能,我所做的是:
((1)和(2)方法是调用groovy脚本中方法的方法。请不要被“方法”这个词的这两种用法混淆。)
所以它只有在我MultiMethod
用new
操作员实例化它时才有效。
但是,如果我将文件命名为multiMethod
(camelCased) 而不是MultiMethod
,我可以使用方法 (2) 来调用脚本中的方法。有人可以解释这种行为吗?
这似乎工作正常。
第二期
基于上面的例子。如果我有一个名为 的 groovy 文件MultiMethod
,(我们之前看到,如果我用 with 实例化,我可以使用它的方法new
),我似乎无法MultiMethod
在动态加载库时实例化一个对象,如下所示:
如果我尝试这样做,我会得到:
编辑
我注意到,如果我这样做:
它确实有效!
最后一个问题
如果可以的话,另一个问题。我注意到人们习惯于写作
在他们的脚本末尾的vars
目录中。有人可以解释它有什么用吗?如果有人能在这个机制如何工作的背景下解释这一点,我会很高兴,比如为什么这些脚本会变成全局变量?
谢谢