我正在尝试在GitLab.com上设置一个CI运行器,我想用它来运行需要PostgreSQL数据库连接的测试。 CI + PostgreSQL的文档似乎过于简单,似乎告诉我们一旦提供了连接信息,就完成了数据库设置。因为我无法创建数据库,所以我可能会误解文档。我的gitlab-ci.yml
看起来像这样
image: node:latest
services:
- postgres:latest
variables:
POSTGRES_DB: rx_reactive_test
POSTGRES_USER: rx_reactive_tester
POSTGRES_PASSWORD: "1esdf3143"
cache:
paths:
- node_modules/
postgresql:
script:
- yarn install
- npm test
通过运行命令npm test`,它将运行一些将与数据库建立连接的测试。但是这些测试失败并显示错误消息
pg-reactive
✓ should build connection with the test database.
1) should run a query returning one row.
1 passing (23ms)
1 failing
1) pg-reactive should run a query returning one row.:
Uncaught Error: connect ECONNREFUSED 127.0.0.1:5432
at Object.exports._errnoException (util.js:1033:11)
at exports._exceptionWithHostPort (util.js:1056:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1099:14)
这些测试与我的本地测试数据库运行良好,因此我的CI设置一定存在问题。我会很感激我的问题: - )
答案 0 :(得分:6)
在GitLab CI中,您的作业在docker容器中运行。因此,Postgres不是在localhost上运行,而是在可以在" postgres"上访问的主机上运行。 (服务名称是解析为可用于访问数据库的IP的服务器名称。)
看起来CI设置一个名为" CI"的ENV变量。这样你就可以转换你的数据库连接,以便在CI中测试来自" localhost:5432"到" postgres:5432"如果您在GitLab CI环境中运行。