当前位置: 首页 > 面试题库 >

如何在Jenkins Freestyle项目中使用可锁定资源插件中的Groovy表达式

贺聪
2023-03-14
问题内容

提出了与旧版本的Lockable Resources Plugin有关的问题。自2.1版以来,旧版本中的错误已得到修复。

但是,没有描述如何在自由式作业中正确使用Groovy表达式的答案。我将添加一个答案来解释这一点。

对于感兴趣的人,最初的问题如下:

我最初尝试获取可锁定资源插件来锁定特定资源,同时还要评估系统环境变量的值。评估系统环境变量是否运行良好,但是,我似乎无法锁定正确的资源。

在自由样式项目中使用时,这个问题集中在锁定问题上!

我创建了三个资源,分别称为 A_TESTB_TESTC_TEST 。它们都没有标签。从我的 Jenkins_URL /
lockable-resources /
中都可以看到它们,可以在不出现任何问题的情况下将它们获取和释放。

在我的Jenkins Job配置中,我选择了“ 此构建需要可锁定的资源” 选项,该选项使我可以指定 ResourceLabel
Groovy Expression (以及 Additional classpath )。此外,它还允许我指定“
预留资源”变量名称“要请求的资源数”

根据文档,Groovy脚本必须返回一个布尔值,因此我决定尝试一下:

测试1

我所做的第一个测试是通过设置以下内容来验证基本功能:

  • 资源= B_TEST
  • Groovy表达式=未选中
  • 请求的资源数量= 1

这导致作业在B_TEST资源上执行锁定。控制台输出为:

[lockable-resources]在[B_TEST]获得了锁定

测试2

在此测试中,我设置了以下内容:

  • 资源= B_TEST
  • Groovy表达式=已检查
  • Groovy脚本= 返回false
  • 请求的资源数量= 1

尝试执行作业时,这将 错误地 永久等待以下文本:(pending--Waiting for the resourced [B_TEST])

测试3

在此测试中,我设置了以下内容:

  • 资源= B_TEST
  • Groovy表达式=已检查
  • Groovy脚本=返回 true
  • 请求的资源数量= 1

这导致 错误的 资源 A_TEST 被锁定。控制台输出为:

[lockable-resources]在[A_TEST]获得了锁定

测试4

重读在插件每个选项的帮助下,我发现这个插件显然只允许我指定 任何 一个 资源标签Groovy的表达
在这个测试中,我设置以下这样:

  • Groovy表达式=已检查
  • Groovy脚本=返回 false
  • 保留的资源变量名称= MyResourceName

这导致作业执行 错误, 而没有锁定任何资源。控制台输出为:

[lockable-resources]已获得对[]的锁定

测试5

因此,在此测试中,我设置了以下内容:

  • Groovy表达式=已检查
  • Groovy脚本=返回 true
  • 保留的资源变量名称= MyResourceName

这导致作业 错误地 锁定了所有资源。控制台输出为:

[lockable-resources]已获得对[A_TEST,B_TEST,C_TEST]的锁定

测试6

根据该插件的文档,在Jenkins-Pipelines中,该插件可以用作:

echo 'Starting'
lock('my-resource-name') {
  echo 'Do something here that requires unique access to the resource'
  // any other build will wait until the one locking the resource leaves this block
}
echo 'Finish'

因此我开始尝试使用包含调用变体的 Groovy脚本lock('B_TEST'),但这在工作尝试开始时主要导致更多的混乱和错误,例如:

No signature of method: Script1.lock() is applicable for argument types: (java.util.LinkedHashMap) values: [[resource:B_TEST]] 
Possible solutions: each(groovy.lang.Closure), wait(), run(), run(), any(), find())

但是我想这一切都是有道理的,因为该lock(){ }调用似乎只适合在捕获期间获取和释放锁。

现在最大的问题是,所有这些实际上如何工作?我的猜测是,在某处有一个常规命令指定要保留的资源/标签,并且返回值(true /
false)确定是否实际获取锁定。我曾尝试深入探究消息来源,但没有任何运气。

任何答案都将不胜感激。


问题答案:

情况1:使用资源名称本身

您只需要在“资​​源”中列出所需的资源。

情况2:来自构建参数的资源名称

Groovy表达式:已检查

Groovy脚本:’resourceName == buildParam1 || resourceName == buildParam2’



 类似资料:
  • 我正在尝试使用Eclipse(版本Kepler SR2)将一个Java项目打包到一个可运行的jar中。这个项目使用的是Maven(这是我学习的,我对它不太了解)。问题是,该项目在Eclipse中运行良好,但在导出到Jar后,它再也找不到所需的任何资源。 下面是文件夹结构: 资源是通过以下方式加载的: 当从Eclipse执行程序时,这一行工作得非常好,但当使用我用“export>java>runna

  • 我正在使用私有Maven存储库的有限开发环境中工作。里面有一个Gradle插件,我正在尝试使用它。然而,我认为它没有遵循Gradle插件的预期命名和目录结构,所以当我使用PluginDSL时,我的构建失败了。在Maven存储库中,插件的结构如下: 当我使用以下定义使用 Gradle 插件 DSL 引用此插件时: 我的构建版本出现错误,抱怨它找不到.plugin但是,似乎没有通过插件DSL来指示插件

  • 我有一个多项目的gradle构建,其中一个子项目是应用Artifactory插件(版本4.2.0),并配置contextUrl和resolve repoKey。 它设置一个简单的配置和依赖项,然后有一个复制任务来检索依赖项作为zip文件并将其解压缩到目录中。 然而,当复制任务运行时,我得到下面的错误。我做错了什么?这是Artifactory插件或gradle的问题,还是。。。? 问题似乎与该项目是

  • 我正在IntelliJ中使用Gradle项目结构和JavaFx Gradle插件构建一个JavaFx项目: Gradle JavaFx插件 我想知道如何在类路径中包含资源文件。具体来说,我目前正在尝试定义一个log4j2配置JSON文件,log4j2将在运行时加载该文件。我当前在运行应用程序时收到以下消息: 错误状态记录器未找到log4j2配置文件。使用默认配置:仅将错误记录到控制台。 我现在有l

  • 我想有一个地方来存储我的图像文件,以便在我的Java项目中使用(一个非常简单的类,它只是将图像加载到面板上)。我找遍了所有的地方,都找不到如何做到这一点。我该怎么做? 我已经尝试向项目添加一个新文件夹,向项目添加一个新类文件夹,向项目添加一个新源文件夹。无论我做什么,我总是得到一个。文件夹总是说它们在构建路径上,所以我不确定该怎么做。 编辑:对我起作用的东西是将文件夹添加为类文件夹,然后将其删除,

  • 本文向大家介绍groovy 在Java项目上使用Groovy,包括了groovy 在Java项目上使用Groovy的使用技巧和注意事项,需要的朋友参考一下 示例 Groovy可以访问所有Java类,实际上Groovy类是Java类,可以直接由JVM运行。如果您正在从事Java项目,那么使用Groovy作为一种简单的脚本语言来与Java代码进行交互就变得很容易了。 为了使事情变得更好,几乎所有Jav