Jenkins任务失败后如何通过Lockable Resource锁定DUT资源
测试失败后锁定Jenkins Lockable Resource实现方案
可以通过Lockable Resources插件实现测试失败后锁定DUT的需求,你之前的报错是因为错误调用了类的静态方法,正确的做法是获取资源管理器的实例后再操作。
错误原因分析
你直接调用LockableResourcesManager.reserve()是尝试调用类的静态方法,但reserve是实例方法,必须先获取LockableResourcesManager的单例实例才能调用。
修正后的Pipeline脚本
pipeline { agent { label 'one_slave' } options { // 若为随机分配DUT,可将资源名替换为动态变量(如从参数/分配逻辑获取) lock(resource: "DUT_1", variable: 'LOCKED_RESOURCE', quantity: 1) } stages{ stage("test"){ steps { error("Build failed because of this and that..") } } } post { failure{ script { import org.jenkins.plugins.lockableresources.LockableResourcesManager import org.jenkins.plugins.lockableresources.LockableResource // 获取Lockable Resources管理器实例 def resourceManager = LockableResourcesManager.get() // 根据名称定位目标DUT资源 LockableResource targetDut = resourceManager.fromName("DUT_1") if (targetDut) { // 手动锁定资源,传入锁定描述便于识别 resourceManager.reserve([targetDut], "测试失败锁定: ${currentBuild.fullDisplayName}") echo "已锁定DUT: ${targetDut.name}" } else { echo "未找到指定DUT资源: DUT_1" } } } } }
关键说明
- 构建失败时,
options块中的默认锁会自动释放,我们在post的failure阶段重新手动锁定该资源,使其保持锁定状态。 - 锁定后的DUT需要手动在Jenkins的Manage Jenkins → Lockable Resources页面解锁,才能被其他构建使用。
- 如果是随机分配DUT,只需将
DUT_1替换为lock选项返回的资源变量LOCKED_RESOURCE即可,适配随机场景:
LockableResource targetDut = resourceManager.fromName(LOCKED_RESOURCE)
内容的提问来源于stack exchange,提问作者Lyndon Lin
相关产品推荐
相关产品推荐

