You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:48:18