如何配置GitLab CI服务并实现流水线数据库初始化与校验?
GitLab CI 集成PostgreSQL服务并填充测试数据方案
第一步:补充基础配置变量
首先需要为PostgreSQL服务配置初始化参数,同时在job中声明数据库连接配置,示例如下:
end-to-end-tests: image: node:latest variables: # Postgres服务默认初始化参数,服务启动时自动创建对应库、账号 POSTGRES_DB: test_db POSTGRES_USER: test_user POSTGRES_PASSWORD: test_pass # 服务访问地址,postgres是服务默认域名,也可通过alias自定义 DATABASE_HOST: postgres DATABASE_PORT: 5432 services: - name: postgres:9.6.19 alias: postgres # 可选,自定义服务域名 script: # 后续填充、校验、测试逻辑写在这里
第二步:填充模拟数据的两种常用方式
方式1:直接执行SQL脚本
需要先在测试镜像中安装PostgreSQL客户端,再执行本地的SQL种子文件:
script: # 安装依赖:postgresql客户端和网络检测工具 - apt-get update && apt-get install -y --no-install-recommends postgresql-client netcat-openbsd # 等待数据库服务启动完成,避免连接失败 - until nc -z $DATABASE_HOST $DATABASE_PORT; do echo "等待数据库启动..."; sleep 1; done # 执行SQL脚本填充数据,./seed.sql是你项目根目录下的模拟数据脚本 - PGPASSWORD=$POSTGRES_PASSWORD psql -h $DATABASE_HOST -U $POSTGRES_USER -d $POSTGRES_DB -f ./seed.sql
方式2:使用项目自带的数据库工具
如果你的Node项目已经集成了ORM迁移/种子工具(比如Prisma、TypeORM、Sequelize),可以直接调用对应命令,不需要额外安装psql:
script: - npm install # 安装项目依赖 # 等待数据库启动,同上面的逻辑 - until nc -z $DATABASE_HOST $DATABASE_PORT; do echo "等待数据库启动..."; sleep 1; done # 示例1:Prisma 执行迁移和种子数据填充 - npx prisma migrate deploy - npx prisma db seed # 示例2:TypeORM 执行迁移和种子 - npm run typeorm migration:run - npm run typeorm seed:run
第三步:校验数据库初始化结果
填充数据完成后,可以加一步查询校验,确认数据符合预期再启动测试,不符合直接终止流水线:
script: # 前面的填充逻辑省略 # 校验示例1:用psql查询测试数据条数,预期返回10条模拟用户,不符合就退出 - USER_COUNT=$(PGPASSWORD=$POSTGRES_PASSWORD psql -h $DATABASE_HOST -U $POSTGRES_USER -d $POSTGRES_DB -t -c "SELECT COUNT(*) FROM users;") - if [ $USER_COUNT -ne 10 ]; then echo "数据库初始化失败,用户数据条数不符"; exit 1; fi # 校验示例2:用项目脚本校验,直接调用你写的校验脚本即可 - node ./scripts/check-db-init.js # 校验通过后再执行测试 - npm run test:e2e
内容的提问来源于stack exchange,提问作者user5580578
相关产品推荐
相关产品推荐

