Jenkins参数化作业:验证微服务目录存在性后执行构建
验证Jenkins Pipeline中微服务目录合法性并跳过无效服务Stage
以下是修改后的Pipeline代码,实现服务目录合法性校验,仅执行仓库中存在的微服务Stage:
node { env.SERVICE_NAMES = params.services env.ENVIRONMENT = params.environment stage('clone') { git branch: 'main', credentialsId: 'repo-login', url: 'https://repo-urk/project/mutiple-servcies.git' } // 获取仓库中所有合法的微服务目录(排除.git等非服务目录) def validServices = findFiles(type: 'directory', excludes: '**/.git/**,**/node_modules/**').collect { it.name } // 若服务有统一命名规则(如都以service-开头),可添加过滤:.find { it.name.startsWith('service-') } // 遍历传入的服务参数,仅执行合法目录对应的Stage "${env.SERVICE_NAMES}".split(",").each { param -> def serviceName = param.trim() if (validServices.contains(serviceName)) { stage("${serviceName}") { println "执行服务Stage: ${serviceName},环境: ${env.ENVIRONMENT}" // 在此添加服务构建逻辑,如打包、部署等操作 } } else { println "跳过不存在的服务: ${serviceName},该目录在仓库中不存在" } } }
关键逻辑说明
- 获取合法目录列表:用
findFiles扫描克隆后的代码目录,排除.git、node_modules这类非服务目录,收集所有子目录名称作为合法服务列表。如果服务有统一命名规则,可额外添加过滤条件缩小范围。 - 服务名校验:遍历传入的
services参数时,先去除首尾空格,再检查是否在合法目录列表中。合法则执行对应Stage,否则打印提示并跳过。 - 环境变量传递:保留原有的
ENVIRONMENT参数,可在服务Stage中直接调用该变量执行对应环境的构建操作。
内容的提问来源于stack exchange,提问作者Anish Raut
相关产品推荐
相关产品推荐

