无需额外插件:在Jenkins流水线用Docker镜像运行Vue项目Cypress测试
无需Cypress Jenkins插件,用Docker运行Cypress测试完全可行
直接使用Cypress官方提供的Docker镜像就能在Jenkins流水线中运行集成测试,不需要额外安装Jenkins插件。这种方式的优势在于环境一致性强,镜像里已经预装好Cypress、Node.js及所有依赖,不用在Jenkins节点上手动配置环境。
实现步骤及示例
1. 前提准备
确保你的Jenkins节点已经配置好Docker环境(能执行docker命令),并且项目代码里已经写好Cypress测试用例,package.json中有对应的测试脚本(比如"cypress:run": "cypress run")。
2. Jenkins流水线示例(Declarative Pipeline)
下面是一个完整的Jenkins流水线片段,包含构建、Jest单元测试、Cypress集成测试步骤:
pipeline { agent any stages { stage('拉取代码') { steps { git url: '你的项目仓库地址', branch: 'main' } } stage('安装依赖') { steps { sh 'npm install' } } stage('Jest单元测试') { steps { sh 'npm run test:unit' } post { always { junit '**/junit.xml' // 可选:生成测试报告 } } } stage('构建生产包') { steps { sh 'npm run build' } } stage('启动应用服务') { steps { // 后台启动构建后的应用,比如用serve工具,需提前安装:npm install -g serve sh 'serve -s dist -l 8080 &' // 等待服务启动完成 sh 'sleep 10' } } stage('Cypress集成测试') { steps { script { // 使用Cypress官方Docker镜像,挂载项目目录到容器内 sh ''' docker run -it --rm \ -v $PWD:/e2e \ -w /e2e \ cypress/included:13.6.0 \ npm run cypress:run ''' } } post { always { // 收集Cypress测试报告和截图,方便排查失败原因 archiveArtifacts artifacts: 'cypress/screenshots/**, cypress/videos/**', allowEmptyArchive: true } } } } post { always { // 停止后台运行的应用服务 sh 'pkill -f "serve -s dist"' } } }
3. 关键说明
- 镜像选择:
cypress/included镜像包含了Cypress二进制文件,无需额外安装即可运行测试。你可以根据项目使用的Cypress版本选择对应标签的镜像(比如cypress/included:12.17.4)。 - 目录挂载:通过
-v $PWD:/e2e把当前Jenkins工作目录挂载到容器内的/e2e目录,-w /e2e设置容器工作目录,确保容器能访问项目中的Cypress配置和测试用例。 - 服务依赖:Cypress测试需要应用服务处于运行状态,测试前要确保服务启动完成。这里用
sleep 10简单等待,也可以用更可靠的健康检查脚本(比如curl轮询服务地址直到返回200)。 - 报告收集:通过
archiveArtifacts保存Cypress的截图和视频,方便后续排查测试失败问题。
4. 替代方案:使用Docker Compose(适配多服务依赖场景)
如果你的Vue应用依赖数据库、后端API等其他服务,可以用Docker Compose编排应用和测试环境:
在项目根目录创建docker-compose.test.yml:
version: '3' services: app: build: . ports: - "8080:8080" command: serve -s dist -l 8080 cypress: image: cypress/included:13.6.0 depends_on: - app volumes: - ./:/e2e working_dir: /e2e environment: - CYPRESS_BASE_URL=http://app:8080
然后在Jenkins流水线的Cypress步骤中执行:
sh 'docker-compose -f docker-compose.test.yml up --exit-code-from cypress'
这种方式会自动等待应用服务启动完成后再运行Cypress测试,测试结束后自动停止所有服务。
内容的提问来源于stack exchange,提问作者Safari
相关产品推荐
相关产品推荐

