You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"
                }
            }
        }
    }
}

关键说明

  1. 构建失败时,options块中的默认锁会自动释放,我们在post的failure阶段重新手动锁定该资源,使其保持锁定状态。
  2. 锁定后的DUT需要手动在Jenkins的Manage Jenkins → Lockable Resources页面解锁,才能被其他构建使用。
  3. 如果是随机分配DUT,只需将DUT_1替换为lock选项返回的资源变量LOCKED_RESOURCE即可,适配随机场景:
LockableResource targetDut = resourceManager.fromName(LOCKED_RESOURCE)

内容的提问来源于stack exchange,提问作者Lyndon Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:28:32