首页 > 解决方案 > Jenkins 可锁定资源 - 锁定而不解锁

问题描述

我将“Locable Resources Plugin”与 Jenkins 多管道功能一起使用:

lock('my-resource-name') {

}

我有一种情况,我需要在一个管道中锁定资源并在另一个管道中解锁它。我有解决方法,但如果可能的话,我更喜欢使用锁定插件。

我想象这样的事情

lock("my-resource-name")
..... 
unlock("my-resource-name)

它的原因

我正在实现金丝雀版本,并且通过我的管道有三种不同的路径(我考虑了其他解决方案,例如使用输入插件暂停管道 - 为我提供更多超出了这个问题的范围)。我想在评估金丝雀时锁定/暂停管道,然后在升级或回滚完成后再次解锁。省略lock声明的主体只是给了我java.lang.IllegalStateException: There is no body to invoke

标签: jenkinslockingjenkins-pipelinecanary-deployment

解决方案


一种方法是:

curl -XGET https://your-jenkins/lockable-resources/reserve?resource=myresource
curl -XGET https://your-jenkins/lockable-resources/unreserve?resource=myresource

GET 不是错误,它确实是 GET。

等待锁

lock("my-resource-name") {}

我也知道 Jenkins 支持一种叫做“里程碑”的东西,显然是用来在构建之间进行通信的东西。但我不知道它是否可以用来以任何有意义的方式解决这个问题。


推荐阅读