我正在尝试向 Jenkins 管道添加锁,以便管道的多个实例不会同时运行。
我在plugins.txt中安装了lockable-resources插件,并在我的casc.yaml中声明了资源
lockableResourcesManager:
declaredResources:
- name: "host-1-lock"
description: "Lock to run jobs on host 1
我有以下 pipelineJob,我正在尝试向其中添加锁,以便在 pipelineJob 期间保持锁定,然后在之后释放
pipelineJob('Test_Job-2') {
quietPeriod(0)
triggers {
cron('H 6 * * *')
}
lockableResources('host-1-lock')
parameters {
labelParam('Node_Select') {
defaultValue('host1')
allNodes('allCases', 'IgnoreOfflineNodeEligibility')
}
}
definition {
cps {
script(readFileFromWorkspace('scripts/mypipeline.jenkinsfile'))
}
}
}
但是我收到错误
ERROR: (script, line 6) No signature of method: javaposse.jobdsl.dsl.jobs.WorkflowJob.lockableResources() is applicable for argument types: (java.lang.String) values: [host-1-lock]
我尝试使用文档中指定的语法 lock("host-1-lock") https://github.com/jenkinsci/lockable-resources-plugin但这会产生类似的错误。
我还尝试在 script() 之前和 script() 内的定义 { cp { ...}} 中包含 lock() ,但没有任何运气。
任何人都可以提供一个如何实现这一目标的例子吗?
你把它放在错误的地方了。锁的使用不应该是 jobdsl (又名作业定义)的一部分,而应该在实际管道中,在您的情况下 脚本/mypipeline.jenkinsfile`.
仔细查看 https://github.com/jenkinsci/lockable-resources-plugin#using-a-resource-in-a-pipeline-job
中的示例