如何使用矩阵插件获取Jenkins可锁定资源参数

问题描述 投票:0回答:1

我正在尝试使用 Jenkins 在多个设备上并行运行自动化测试。有用于并行执行的矩阵插件。我有多个设备连接到同一个代理,它们具有不同的参数。来说说吧

  • 设备1:
    • 端口:/dev/ttyUSB1
  • 设备2:
    • 端口:/dev/ttyUSB2

然后在管道中我需要知道这个参数“端口”。所以我接下来要做:

pipeline {
    ...
    stages {
        stage('Checkout') {...}
        stage('Build') {...}
        stage('Parallel') {
            matrix {
                axes {
                    name 'device_name'
                    values 'device1', 'device2'
                }
            }
            stages {
                stage('Flashing and testing') {
                    steps {
                        lock(resource: "${device_name}", variable: "${device}", quantity: 1)
                        echo "Device is ${device}"
                        ...
                    }
                }
            }
        }
    }
}

这样

device
定义正确,但是我如何访问它的端口参数? 文档没有描述当时有多个锁的情况。虽然我可以使用
device0_port
访问端口,但它似乎是全局变量,并且对于所有并行线程都是相同的。我尝试调用类似
"${${device}0_port}"
的名称,但无法意识到它应该是什么。

作为一种解决方法,我尝试将参数移动到管道中,例如

if ("${device}" == 'device1') {
    port = "/dev/ttyUSB1"
}
if ("${device}" == 'device2') {
    port = "/dev/ttyUSB2"
}

它完全符合我的需要,但我怀疑它不是应该的样子。有什么建议如何做得很好吗?

jenkins jenkins-pipeline jenkins-plugins
1个回答
0
投票

好像没人知道。以防万一有人遇到这个问题并找到这个问题,我找不到比缩短解决方法更好的方法了

port = evaluate("${device}0_port")

当 Groovy 解释器解析它时,它会将

device
替换为实际设备名称,然后在运行时评估实际变量名称。

© www.soinside.com 2019 - 2024. All rights reserved.