如何在Jenkins Pipeline同一Stage下运行多个when条件
Jenkins Pipeline 多条件执行问题修复
你的代码报错是因为声明式Pipeline的Stage不允许重复定义when和steps块,一个Stage只能包含一个when条件组和一个steps执行块。结合你的需求(选择Lab1时执行基础部署,勾选Develop选项时额外执行操作),可以用以下两种方式修复:
方案一:单Stage内通过条件判断实现
在同一个Stage的steps里,用script块结合Groovy条件判断,先执行基础操作,再判断是否需要执行额外操作:
pipeline { parameters { // 建议参数名改用下划线分隔,避免空格带来的引用问题 extendedChoice(name: 'lab_to_update', description: '选择要部署的实验室', multiSelectDelimiter: ',', type: 'PT_CHECKBOX', value: 'lab1,Lab2', visibleItemCount: 5) extendedChoice(name: 'is_develop_deployment', description: '是否为开发环境部署', multiSelectDelimiter: ',', type: 'PT_CHECKBOX', value: 'Develop deployment', visibleItemCount: 5) } agent { label 'ansible.cyber.local' } stages { stage ('Deploy pyspark_dependencies on Lab 1') { when { // 仅当选中lab1时进入该Stage expression { params.lab_to_update.contains('lab1') } } steps { echo "执行Lab1基础部署操作" // 判断是否勾选了开发环境选项,执行额外操作 script { if (params.is_develop_deployment == 'Develop deployment') { echo "执行开发环境额外操作" } } } } } }
方案二:拆分Stage分别控制
把基础操作和额外操作拆成两个独立Stage,各自设置when条件,逻辑更清晰:
pipeline { parameters { extendedChoice(name: 'lab_to_update', description: '选择要部署的实验室', multiSelectDelimiter: ',', type: 'PT_CHECKBOX', value: 'lab1,Lab2', visibleItemCount: 5) extendedChoice(name: 'is_develop_deployment', description: '是否为开发环境部署', multiSelectDelimiter: ',', type: 'PT_CHECKBOX', value: 'Develop deployment', visibleItemCount: 5) } agent { label 'ansible.cyber.local' } stages { stage ('Lab1基础部署') { when { expression { params.lab_to_update.contains('lab1') } } steps { echo "执行Lab1基础部署操作" } } stage ('开发环境额外操作') { when { allOf { expression { params.lab_to_update.contains('lab1') } expression { params.is_develop_deployment == 'Develop deployment' } } } steps { echo "执行开发环境额外操作" } } } }
注意事项
- 参数名如果包含空格,引用时需要用
params."参数名"的格式(比如params."Lab to update"),建议改用下划线分隔的命名(如lab_to_update)避免麻烦。 - 注意
value里的大小写(你代码里是lab1,但原when里写的是Lab1),必须完全匹配才会触发条件。
内容的提问来源于stack exchange,提问作者dzbeda
相关产品推荐
相关产品推荐

