docker - 在 CI 过程中运行多容器应用程序测试
问题描述
我有一个 Laravel 应用程序,它有一些集成测试,这个项目已经使用 Docker Compose 进行了 Dockerized,它由 5 个容器组成:php-fpm
、mysql
、redis
和nginx
它们本身workspace
已经安装php-cli
(composer
就像Laradock一样)。我想test stage
在我的 CI 进程中运行时运行测试。不得不提的是,我的 CI 服务器是 GitLab CI。
基本上,我通过在终端中运行以下命令在本地系统上运行测试:
$ docker-compose up -d
Creating network "docker_backend" with driver "bridge"
Creating network "docker_frontend" with driver "bridge"
Creating redis ... done
Creating workspace ... done
Creating mysql ... done
Creating php-fpm ... done
Creating nginx ... done
$ docker-compose exec workspace bash
// now, I have logged in to workspace container
$ cd /var/www/app
$ phpunit
PHPUnit 6.5.13 by Sebastian Bergmann and contributors.
........ 8 / 8 (100%)
Time: 38.1 seconds, Memory: 28.00MB
OK (8 tests, 56 assertions)
这是我的问题:在没有运行容器的情况下,如何在测试阶段运行这些测试?在这种情况下,最佳实践是什么?
我也关注了 GitLab 的这个文档,但似乎不能使用 Docker-in-Docker 或 Docker Socket Binding。
解决方案
docker-in-docker
首先,使用 gitlab ci运行是绝对可以的。如果您不想或不需要深入研究,这是一个很好的方法kubernetes
。共享 docker socket 当然会以某种方式降低隔离级别,但就您主要在 VPS 容器上运行作业而言,我个人认为这个问题并不重要。
我前段时间在这篇文章中回答了类似的问题。
推荐阅读
- angular - Angular5,在路由上,网址发生了变化,但它没有加载相同的页面
- python - 张量流中内置 MS-SSIm 函数的计算错误
- python - Python:透视数据集
- python - 为具有类不平衡的混合数据构建分类器的最佳策略
- python - 如何使用“命名聚合”
- unix - 如何使用 sed 在每行末尾添加右括号?
- angular - 让页面导航到自身,将新实例添加到导航堆栈
- web-crawler - 如何让 Google、Facebook 机器人爬虫可以索引 AWS CloudFront 上的媒体文件?
- c# - 如何在使用cefshrap(C#)恢复执行之前等待网页加载结束
- mongodb - SpringData注解(或标准方式)在java中使用String for MongoDB ObjectId进行手动参考