在GitLab上对Django应用执行测试时数据库连接问题求助
GitLab 环境 Django 应用数据库连接故障排查方案
通用排查步骤
- 首先校验
.gitlab-ci.yml中的服务声明配置,数据库服务的别名必须和Django配置中的HOST字段完全匹配,参考Postgres服务配置示例:
services: - name: postgres:14-alpine alias: postgres variables: POSTGRES_DB: test_db POSTGRES_USER: test_user POSTGRES_PASSWORD: test_pass
GitLab CI 内部通过服务别名做域名解析,禁止填写localhost、127.0.0.1作为数据库主机地址,否则无法完成连通
- 检查Django测试环境的数据库配置,优先从CI环境变量读取连接参数,避免硬编码导致的配置不一致,参考配置:
DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": os.environ.get("POSTGRES_DB"), "USER": os.environ.get("POSTGRES_USER"), "PASSWORD": os.environ.get("POSTGRES_PASSWORD"), "HOST": os.environ.get("DB_HOST", "postgres"), "PORT": os.environ.get("DB_PORT", "5432"), } }
如果使用MySQL,将ENGINE字段改为django.db.backends.mysql,同时确认依赖包mysqlclient已添加到requirements.txt中。
- 增加数据库启动等待逻辑,数据库服务初始化通常需要5-15秒,测试脚本执行前添加等待逻辑避免连接超时:
test_job: script: - sleep 10 - python manage.py test
可以根据使用的数据库镜像版本调整等待时长,避免数据库未完成初始化就启动测试
- 确认CI网络没有端口限制,Postgres默认端口
5432、MySQL默认端口3306需要在GitLab Runner的内部网络中放开,禁止安全组、防火墙规则拦截对应端口的访问请求。
MySQL 场景特殊配置
如果使用MySQL作为测试数据库,需要在CI变量中添加如下配置,规避默认SSL连接导致的报错:
variables: MYSQL_CLIENT_FLAGS: --ssl-mode=DISABLED
内容的提问来源于stack exchange,提问作者Joel Kouassi
相关产品推荐
相关产品推荐

