比较果冻脚本中的2个变量

Posted

技术标签:

【中文标题】比较果冻脚本中的2个变量【英文标题】:compare 2 variables in jelly script 【发布时间】:2022-01-20 20:09:35 【问题描述】:

<j:set var="maxEachOSTime" value="0" />
<j:if test="$xmlval &gt; maxEachOSTime">
    $xmlval &gt; $ maxEachOSTime
    <j:set var="maxEachOSTime" value="$xmlval"/>
    <j:set var="finalTotalDuration" value="$total_duration"/>
</j:if>

如果将 $xmlval 与一个数字(1、200 等)进行比较,它会起作用。但 与 $eachMaxOSTime 相比,它不起作用。 (条件是 始终如常工作) .intValue() 也没有帮助。是什么 解决方案?

【问题讨论】:

【参考方案1】:

这就是在我的特定用例中最终帮助我的原因。

xmlval 是从 xml 文件中读取的具有整数值的变量

maxEachOSTime 变量默认通过

设置为字符串

将其转换为浮点数并使用其 intValue()

之前的 intValue() 无法正常工作,因为 String 没有属性 intValue,因此跳过了 if 条件。

这可以通过直接处理整数来即兴发挥

<j:new className="java.lang.Float" var="tempFloat">
    <j:arg value="$maxEachOSTime" type="float"/>
</j:new>
<j:set var="intThing" value="$tempFloat.intValue()"/>
<j:if test="$xmlval &gt; intThing">
    <j:set var="maxEachOSTime" value="$xmlval"/>
    <j:set var="finalTotalDuration" value="$total_duration"/>
</j:if>

【讨论】:

【参考方案2】:

下面的结构用于用 Jelly 脚本定义一个string 变量:

<j:set var="stringVariable"  value="I have value!"/>
<j:set var="maxEachOSTime"   value="0"/>

因此,maxEachOSTime 变量的类型为string。您正在尝试使用转义字符 &amp;gt; 将等式左侧的 integerstring 等同起来。

【讨论】:

如何声明一个 int 值?变量 (xmlval) 是通过读取 xml 来获取的,例如:duration_int="45" 基本上我想在读取多个 xml 后找到最大数量(如果您有任何其他可行/简单的解决方案,我也会接受这一点 我认为在上述&lt;j:if&gt; 块的比较中,左侧是int,但右侧不起作用,因为它是string。这就是为什么我认为当他将toInteger() 方法应用于等式右侧的字符串变量时它可能会起作用。如果您想通过变量使用高级功能,则需要在管道中进行这些操作。您应该搜索的关键字是"Jenkins Pipeline: How To Define a Variable" 我避免在 jenkins 管道中读取多个 xml 文件。但是如果我们没有其他选择,我会尝试一下,谢谢 果冻本身就起作用了,你上面的 cmets 帮我用谷歌搜索了正确的上下文!! 我以前从未与 Jelly 合作过。我只是想帮你。

以上是关于比较果冻脚本中的2个变量的主要内容,如果未能解决你的问题,请参考以下文章

如何获取脚本以将 2 个变量的总和添加到表格中的第三列

有趣的脚本(比较2个整数大小,禁止使用if判断)

Shell语法——参数变量,测试与比较

shell脚本-比较两个整数大小

shell脚本-比较两个整数大小

将2个文件内容与shell脚本中的特定值进行比较