背景
利用 GitLab 的持续集成功能,在 CI 的 Pipeline 中集成 API 测试,希望测试环境每次都能基于仅有空表的 MySQL 数据库进行测试,于是在 CI 过程中引入 MySQL service。
问题
目前 GitLab service 启动的容器无法做路径映射,于是就无法利用 MySQL image 的启动项的 //docker-entrypoint-initdb.d/ 目录映射来自动加载数据库初始化脚本。查阅官方文档,也没有这方面的支持。
解决方案一
1. 将数据库初始化过程直接重新打包成一个新的镜像,在 GitLab service 中加载新的镜像,Dockerfile 如下
FROM mysql:5.6
ENV MYSQL_DATABASE database_name
ENV MYSQL_ROOT_PASSWORD root
ENV MYSQL_USER user
ENV MYSQL_PASSWORD password
# ./initdb/table-scheme.sql 包含了数据库初始化的脚本
COPY ./initdb/table-scheme.sql /docker-entrypoint-initdb.d/table-scheme.sql
2. 编译镜像
docker build -t my-image/mysql:latest .
3. 将镜像 push 到 Docker Hub 或 私有镜像库
4. 在 .gitlab-ci.yml 增加以下一段来引入使用,剩下的就是在应用代码中直接连接 host 为 mysql 的数据库
apitest:
stage: test
environment:
n