如何判断Jenkins参数SPEC_LOCATION通配符是否包含指定子目录
在Jenkins中判断测试通配符参数是否包含特定子目录的表达式
根据你的需求,这里提供几种适用于Jenkins不同场景的判断表达式,确保仅当SPEC_LOCATION参数包含service-one子目录时返回True:
1. Groovy Pipeline 场景
在Jenkins Pipeline脚本中,可使用Groovy的字符串或正则匹配实现判断:
基础匹配(简单包含判断)
如果只需判断参数中存在service-one字符串,直接用:
SPEC_LOCATION.contains('service-one')
精准目录匹配(避免文件名干扰)
若要确保service-one是独立的目录(而非文件名的一部分,比如my-service-one-file.ts),使用正则表达式匹配:
SPEC_LOCATION =~ /(^|\/)service-one(\/|$)/
Pipeline示例:
pipeline { agent any parameters { string(name: 'SPEC_LOCATION', defaultValue: 'tests/**/*.ts', description: '测试文件通配符路径') } stages { stage('Service-One专属准备') { when { expression { SPEC_LOCATION =~ /(^|\/)service-one(\/|$)/ } } steps { echo '执行service-one的准备步骤' // 写入你的准备命令,比如依赖安装、配置初始化等 } } stage('运行测试') { steps { echo "执行测试路径:${SPEC_LOCATION}" // 测试执行逻辑 } } } }
2. Freestyle项目场景
如果是Freestyle项目,可通过Shell脚本或Jenkins内置条件步骤实现:
Shell脚本判断
在"执行Shell"步骤中加入判断逻辑:
# 精准目录匹配 if [[ "$SPEC_LOCATION" =~ (^|/)service-one(/|$) ]]; then echo "执行service-one专属准备步骤" # 你的准备命令,例如:npm install --prefix ./services/service-one fi # 简单包含判断(若不需要严格目录匹配) # if [[ "$SPEC_LOCATION" == *service-one* ]]; then # # 准备命令 # fi
Jenkins内置条件步骤
使用"条件步骤(Conditional Step)",配置如下:
- 选择"运行条件"为环境变量
- 环境变量名称:
SPEC_LOCATION - 运算符:匹配正则表达式
- 正则表达式:
(^|\/)service-one(\/|$) - 在条件满足时执行你的准备步骤
正则表达式说明
(^|\/)service-one(\/|$) 的作用:
(^|\/):匹配字符串开头或斜杠,确保service-one是目录的起始部分service-one:目标子目录名称(\/|$):匹配斜杠或字符串结尾,确保service-one是独立的目录
内容的提问来源于stack exchange,提问作者comonadd
相关产品推荐
相关产品推荐

