Jenkins如何配置生产部署前构建测试仓库完成BDD测试校验?
Jenkins配置Cucumber BDD测试卡点实现生产部署管控
核心逻辑是把全量BDD测试作为master分支合并后生产部署的强制前置门禁,只有测试100%通过才放行部署流程,具体配置步骤如下:
前置准备
- 提前在Jenkins安装必备插件:Git Plugin、Pipeline Plugin、Parameterized Trigger Plugin、Credentials Binding Plugin、Cucumber Reports Plugin、Workspace Cleanup Plugin
- 本地调试通Cucumber-Java项目的全量执行命令,确保执行对应命令可以自动跑完全部用例、输出标准Cucumber测试报告,比如Maven项目默认执行
mvn clean test即可触发全量用例 - 提前在Jenkins配置好服务代码仓库、BDD测试仓库的拉取凭证,同时确认执行测试的Jenkins节点网络可达待上线预发环境、生产环境,避免网络策略拦截导致测试失败
- 提前在代码托管平台(GitLab/GitHub/Gitea等)配置好webhook,确保服务仓库master分支有代码合并推送时,能正常触发Jenkins任务
第一步:创建BDD全量测试专用Jenkins任务
这个任务只负责执行全量Cucumber测试、输出测试结果,配置项如下:
- 源码管理选择Git,绑定BDD测试仓库地址,拉取分支指定为
*/master - 构建环境勾选「每次构建前清空工作空间」,避免历史缓存的旧代码、旧报告干扰本次测试结果
- 构建步骤选择执行Shell(Linux节点)/Windows批处理命令(Windows节点),写入提前调试好的测试执行命令,注意传入待测试服务的地址参数,示例:
# Maven项目示例,指定测试目标环境为刚构建完成的待上线预发服务地址 mvn clean test -Dtest.base-url=${TEST_TARGET_ENV}
- 构建后操作配置:
- 新增Cucumber报告收集配置,指定测试报告的json路径(一般Maven项目默认路径为
target/cucumber-reports/*.json),方便失败时快速定位问题用例 - 配置结果判定规则:只要存在1个失败、异常跳过的用例,直接将任务标记为失败,不要设置为「不稳定」状态
- 新增Cucumber报告收集配置,指定测试报告的json路径(一般Maven项目默认路径为
- 配置任务超时规则:根据日常全量用例的执行时长设置超时阈值(比如日常跑25分钟就设40分钟超时),超时直接判定任务失败,避免测试进程僵死卡住整个发布流程
- 保存任务,记录任务名称(比如命名为
prod-bdd-full-regression),后续主流水线会调用这个任务
第二步:配置服务master分支主发布流水线
这个任务是整个流程的入口,绑定服务代码的master分支,按阶段配置执行逻辑:
- 源码管理选择Git,绑定服务代码仓库地址,拉取分支指定为
*/master - 构建触发器选择「Git webhook触发」,对应之前配置的代码平台webhook,确保master分支有代码合并时自动触发该流水线
- 按顺序配置三个执行阶段,禁止开放普通用户的阶段跳过权限,仅管理员可操作跳过:
- 构建制品阶段:拉取master分支最新代码,编译打包生成可部署的服务制品,上传到内部制品库,同时将制品部署到隔离的预发验证环境,不要直接部署生产
- BDD测试卡点阶段:通过Parameterized Trigger插件触发第一步创建的BDD测试任务,必须勾选等待下游任务执行完成选项,同时将预发环境地址、当前构建的服务版本号作为参数传递给BDD测试任务;配置结果传递规则:下游BDD测试任务只要不是成功状态,直接终止当前整个流水线,标记为失败
如果是使用Jenkinsfile编写声明式流水线,该阶段示例代码如下:
stage('全量BDD回归测试门禁') { steps { build( job: 'prod-bdd-full-regression', parameters: [ string(name: 'TEST_TARGET_ENV', value: "http://预发环境服务访问地址"), string(name: 'SERVICE_VERSION', value: "${env.BUILD_ID}") ], wait: true, propagate: true // 下游测试失败时,当前流水线直接标记失败 ) } }- 生产部署阶段:只有前两个阶段全部执行成功,才会进入该阶段,执行生产环境部署脚本,把制品库中对应版本的服务制品发布到生产集群
第三步:流程验证与兜底配置
- 做一次全流程验证:向服务master分支合并测试代码,确认流水线会先构建服务、再自动触发全量BDD测试;故意修改一个BDD用例构造失败场景,确认流水线会在测试阶段终止、不执行生产部署;再恢复用例让测试全部通过,确认流程会自动走到生产部署步骤
- 配置通知规则:BDD测试失败导致流程终止、生产部署完成两个节点,都自动给对应的开发、测试团队发送通知,失败通知里直接附Cucumber测试报告的访问路径,减少排查时间
内容的提问来源于stack exchange,提问作者SmriG6
相关产品推荐
相关产品推荐

