如何在单个Jenkinsfile中配置两个cron任务分别运行回归与冒烟测试套件
实现方案
你可以通过「参数化定时触发器+通用测试执行逻辑」的方式实现需求,不需要大幅改动原有代码,具体修改如下:
前置说明
首先需要安装Jenkins的Parameterized Scheduler插件,支持在定时触发时传入自定义参数,用来区分两种不同的测试套件。如果不想安装插件,也可以配置两个Jenkins任务指向同一个Jenkinsfile,分别设置不同的定时规则和默认参数即可。
修改后的完整Jenkinsfile示例
pipeline { agent none triggers { parameterizedCron(''' # 每6小时执行回归测试套件,传入回归测试对应的标签 H */6 * * * % TEST_TYPE=regression;TEST_TAG=regression_all # 每4小时执行冒烟测试套件,传入冒烟测试对应的标签 H */4 * * * % TEST_TYPE=smoke;TEST_TAG=smoke_fast ''') } // 配置手动触发时可选的参数 parameters { choice( name: 'TEST_TYPE', choices: ['regression', 'smoke'], description: '选择要执行的测试类型' ) string( name: 'TEST_TAG', defaultValue: '', description: '测试用例过滤标签' ) } stages { stage('运行测试套件') { steps { script { // 调用原有并行执行方法,传入对应测试标签 parallel startParallelTest(params.TEST_TAG) } } } } } // 原有方法仅需修改为接收testTag入参即可,逻辑保持不变 def startParallelTest(String testTag) { def nodeObject = [:] // 遍历所有待测试环境,并行执行 for (env in environments) { nodeObject[env] = { -> node('java180u92-maven333') { stage("${env}环境-拉取代码") { checkout scm } stage("${env}环境-代码编译") { sh "mvn clean compile" } // 传入环境和测试标签,触发对应测试套件 triggerTest(env, testTag) } } } return nodeObject } def triggerTest(env, testTag) { // 原有执行测试的逻辑保持不变,根据传入的testTag区分执行回归/冒烟用例即可 .... }
无插件替代方案
如果无法安装Parameterized Scheduler插件,也可以按以下方式实现:
- 创建两个Jenkins任务,都指向同一个代码仓库的同一个Jenkinsfile
- 第一个任务配置每6小时的cron规则,默认参数设置为回归测试对应的标签
- 第二个任务配置每4小时的cron规则,默认参数设置为冒烟测试对应的标签
- 不需要修改Jenkinsfile的核心执行逻辑,即可实现两套测试套件独立定时运行
内容的提问来源于stack exchange,提问作者FayazMd
相关产品推荐
相关产品推荐

