首页 > 解决方案 > 在 CI 过程中运行多容器应用程序测试

问题描述

我有一个 Laravel 应用程序,它有一些集成测试,这个项目已经使用 Docker Compose 进行了 Dockerized,它由 5 个容器组成:php-fpmmysqlredisnginx它们本身workspace已经安装php-clicomposer就像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。

标签: dockerdocker-composecontinuous-integration

解决方案


docker-in-docker首先,使用 gitlab ci运行是绝对可以的。如果您不想或不需要深入研究,这是一个很好的方法kubernetes。共享 docker socket 当然会以某种方式降低隔离级别,但就您主要在 VPS 容器上运行作业而言,我个人认为这个问题并不重要。

我前段时间在这篇文章中回答了类似的问题。


推荐阅读