Jenkins使用Lockable Resource Plugin按环境动态锁定资源问题求助
问题根因
声明式Pipeline的options块会在Pipeline初始化阶段提前解析,此时用户输入的构建参数还未完成加载,因此始终只能读取到参数的默认值,无法获取运行时用户选择的参数。
解决方案
将lock配置从options块移除,改用脚本式lock步骤在运行时动态调用,此时构建参数已经完成加载,可以正常读取用户选择的环境值,同时可以覆盖整个父级stage下的所有子阶段:
pipeline { parameters { choice choices: ['---', 'prod', 'test'], description: 'Environment', name: 'environment' } stage('MY_APPLICATION') { steps { // 运行时动态获取参数加锁,锁的作用域覆盖闭包内所有逻辑 lock(resource: params.environment) { stage('TEST') { when { expression { params.environment == 'prod' } } steps { // 业务逻辑 } } stage('PROD') { when { expression { params.environment == 'test' } } steps { // 业务逻辑 } } } } } }
注意事项
- 该写法的锁作用域和原
options写法完全一致,会在进入MY_APPLICATION阶段时申请锁,锁释放时机为所有子阶段执行完成后 - 参数引用不需要额外加
"${}"包裹,直接使用params.environment即可,避免不必要的字符串插值冗余
内容的提问来源于stack exchange,提问作者schowave
相关产品推荐
相关产品推荐

