问题标签 [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 投票
1 回答
675 浏览

jenkins - Jenkins MultiBranchPipeline 首先加载共享库 repo

我遇到了在我的 MBP 作业中检索主存储库之前检索共享库的问题。在我的常规管道和自由式工作中,情况并非如此。因为 Jenkinsfile 共享库方法尝试从主存储库读取 Xcode 的版本,所以 MBP 作业失败并出现以下错误。这是可以理解的,因为存储库尚未签出。这在常规管道作业中非常有效,我可以在常规管道作业的日志中看到在共享库之前发生轻量检出。在 MBP 中,有没有办法强制在共享库之前签出主存储库?

==================================================== ========================================== 在 MultiBranchPipeline 中失败:

==================================================== ========================================== 在常规管道中成功:

0 投票
1 回答
1025 浏览

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

0 投票
4 回答
1000 浏览

jenkins - Jenkins 管道通过管道库获得“没有这样的属性”

在我的共享库中,我定义:

变量/checkoutSvnCode.groovy

在我的管道中,我定义

现在我得到这个错误

groovy.lang.MissingPropertyException:没有这样的属性:类的修订:groovy.lang.Binding

我怎样才能在我的管道中获得“修订”?

0 投票
1 回答
1653 浏览

jenkins - 如何在 Jenkins 全局库中使用 sh

我正在为托管在 github 上的 Jenkins 创建自己的全局库,为了简化一些普通任务,我想添加一个返回 GIT 标记的函数。

因此我创造了这样的东西:

...导致此错误:

没有方法签名:静态 com.stevnsvig.jenkins.release.ReleaseUtil.sh()

所以我有两个问题:

  1. sh()导入Jenkins 的 groovy 风格显然已经导入的库的解决方案是什么?(如果是这样的话)
  2. 这里的最佳做法是什么?我想知道为什么在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() 适用...

0 投票
1 回答
3975 浏览

jenkins - jenkinspipeline groovy.lang.MissingMethodException:没有方法签名

我创建了一个管道,该管道接受一组 JSON 对象,并将调用一个共享库,该库将迭代 JSON 对象

尝试运行 Jenkins 作业以测试我是否可以转发对象但我看到以下错误:

代码:

0 投票
1 回答
92 浏览

eclipse - 开发 Jenkins 的共享库时,如何在 Eclipse 中获得正确的语法突出显示?

我正在为 Jenkins 开发一个共享库,其中vars/包含src/. 我有这两个绊脚石:

  1. 我使用 Jenkins 特定的方法shecho. 它是灰色的,因为 Eclipse 没有将其识别为正确的 Groovy 方法。有没有办法让 Eclipse 知道这些?

  2. vars/foo.groovy我用两种方法创建了一个文件,call()并且helper(). 在任何地方使用foo()他的程序会导致它变灰,这表明 Eclipse 不知道它指的是什么。有没有办法让 Eclipse 明白foo()现在是一种合法的方法?
    请注意, inside foo.groovycall()helper()都被识别为有效方法。对于一个类也是如此src/clazz.groovy- 在共享库中的任何地方都使用new clazz()被识别为有效代码,并且显示的文档引用了该clazz.groovy文件。

如果在 Jenkins 上运行,所有这些都可以正常工作,这纯粹是关于语法突出显示,如果可能的话,在将鼠标悬停在函数上时显示 Javadoc。不过,语法突出显示是主要问题,因为部署共享库是一个 PITA,只是发现某个函数中有一个错字,我没有发现,因为它都是灰色的。
默认的 Groovy 语法高亮有效,这只是与 Jenkins 和/或共享库直接相关的方法。

对我没有帮助,因为它指的是 IntelliJ,遗憾的是这不是一个选择。

0 投票
1 回答
112 浏览

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

0 投票
1 回答
84 浏览

jenkins - 在詹金斯字符后返回字符串

我在 groovy 中使用共享库。我有这个变量将返回:feature/nameofthebranch

但是,我只需要“/”之后的字符,我尝试过拆分和其他东西,但没有按我的意愿工作,可能是因为我在 groovy 方面很笨拙。

预期结果应该是从feature/nameofthebranch"nameofthebranch"

0 投票
1 回答
737 浏览

jenkins - 在 Jenkins 共享库中使用多方法全局变量

考虑在 Jenkins 中作为共享库加载的 repo 中的这个 groovy 文件:

在 Jenkinsfile 中:

这工作正常。但是如果我尝试动态加载库:

那行不通...

有人可以就文档中的这句话解释一下吗:

Jenkins 中共享库的文档说:

在内部,vars 目录中的脚本按需实例化为单例。为方便起见,这允许在单个 .groovy 文件中定义多个方法。

0 投票
1 回答
1188 浏览

jenkins - Jenkins 共享库中的“vars”如何工作?

我在 Jenkins 共享库中遇到了一些行为,如果有人可以向我解释这一点,那就太好了:

首要问题

假设我在vars目录中有一个文件:

现在,如果我想使用管道中的这些功能,我所做的是:

((1)和(2)方法是调用groovy脚本中方法的方法。请不要被“方法”这个词的这两种用法混淆。)

所以它只有在我MultiMethodnew操作员实例化它时才有效。

但是,如果我将文件命名为multiMethod(camelCased) 而不是MultiMethod,我可以使用方法 (2) 来调用脚本中的方法。有人可以解释这种行为吗?

这似乎工作正常。

第二期

基于上面的例子。如果我有一个名为 的 groovy 文件MultiMethod,(我们之前看到,如果我用 with 实例化,我可以使用它的方法new),我似乎无法MultiMethod在动态加载库时实例化一个对象,如下所示:

如果我尝试这样做,我会得到:

编辑

我注意到,如果我这样做:

它确实有效!

最后一个问题

如果可以的话,另一个问题。我注意到人们习惯于写作

在他们的脚本末尾的vars目录中。有人可以解释它有什么用吗?如果有人能在这个机制如何工作的背景下解释这一点,我会很高兴,比如为什么这些脚本会变成全局变量?

谢谢