我正在尝试使用 Jenkins 在多个设备上并行运行自动化测试。有用于并行执行的矩阵插件。我有多个设备连接到同一个代理,它们具有不同的参数。来说说吧
然后在管道中我需要知道这个参数“端口”。所以我接下来要做:
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"
}
它完全符合我的需要,但我怀疑它不是应该的样子。有什么建议如何做得很好吗?
好像没人知道。以防万一有人遇到这个问题并找到这个问题,我找不到比缩短解决方法更好的方法了
port = evaluate("${device}0_port")
当 Groovy 解释器解析它时,它会将
device
替换为实际设备名称,然后在运行时评估实际变量名称。