检查资源是否被锁定

时间:2019-10-23 14:16:11

标签: jenkins groovy locking jenkins-declarative-pipeline

我通常使用以下方式将资源锁定在声明性管道中:

lock(resource: "MY_RESOURCE") {
   // do something
}

但是现在我可以使用几种不同的资源,有没有办法检查资源是否被锁定?

我想做类似的事情:

myResources = ["RES1", "RES2", "RES3"]
hasResource = false
for (resource in myResources) {
   if (hasresource) {
      break
   }
   if (!isLocked(resource)) {
      hasresource = true
      lock(resource) {
         // do something
      }
   }
}

(对不起,如果语法错误,我并不是经常用Groovy编程)

1 个答案:

答案 0 :(得分:1)

根据锁插件的来源,这应该可以工作:

import org.jenkins.plugins.lockableresources.LockableResourcesManager as LRM

def myResources = ["RES1", "RES2", "RES3"]
def notLocked = myResources.find{rName-> 
    LRM.get().forName(rName).with{ r-> !r.isLocked() && !r.isQueued() }
}
if(notLocked){
    lock(notLocked){
        //do smth
    }
}