这是为了测试的目的。我有一个测试平台,在这个环境中部署了几个物理DUT,每次开发人员触发PR时,它都会自动触发jenkins构建固件并部署到我们测试环境中的随机DUT上并执行测试。
我们想要做的是在测试失败时保留DUT,并且我们可以通过锁定资源来避免在该DUT上执行测试。有没有什么方法可以通过lockable-resource来实现?
这是我的测试脚本。
pipeline {
agent {
label 'one_slave'
}
options {
lock(resource: "DUT_1", variable: 'LOCKED_RESOURCE', quantity: 1)
}
stages{
stage("test"){
steps {
error("Build failed because of this and that..")
}
}
}
post {
failure{
script {
// To keep the failed DUT locked.
}
}
}
}
我尝试导入org.jenkins.plugins.lockableresources.LockableResourcesManager
并使用reserve
函数,但得到错误消息`Error when executing failure post condition:
groovy.lang.MissingMethodException: No signature of method: java.lang.Class.reserve() is applicable for argument types: () values: [[resources:DUT_1, userName:Lyndon]]`
我也检查了这篇文章Jenkins lockable resource - lock without unlocking,但我不认为这是同一个场景。我的场景是在构建完成后锁定资源。
2条答案
按热度按时间nhn9ugyo1#
你几乎就在那里,只是错过了一个参数类型-你试图保留的资源应该被 Package 到一个列表中。Javadocs在这里。
hmmo2u0o2#
在检查了
LockableResourcesManager
中是否有任何可用的函数可以用于我的情况后,我发现steal
可以为我做这件事。https://github.com/jenkinsci/lockable-resources-plugin/blob/3a5c1a140712e4b310e60e9880bcf195fbee674e/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java#L801我的解决方案是
因此,在构建完成后,资源将被
steal
步骤窃取,状态将保持reserved
状态,然后我可以手动取消保留它。