首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在neo4j CI停靠库中运行对GitLab数据库的测试

无法在neo4j CI停靠库中运行对GitLab数据库的测试
EN

Stack Overflow用户
提问于 2020-05-01 17:05:38
回答 1查看 505关注 0票数 2

问题所在

我试图在GitLab CI中运行我的单元测试。对于我的测试设置,我使用启动一个由三个neo4j实例组成的数据库集群,然后通过本地主机在docker主机上运行测试。

在我的机器上,这个工作非常好,所以我尝试在GitLab CI上做同样的事情。最初,我在让在CI容器中运行时遇到了一些问题,但是我成功地使用了下面的..gitlab ci.yaml:

代码语言:javascript
复制
image: "tiangolo/docker-with-compose:latest"

before_script:
    - apk add --update nodejs npm
    - npm install npm@latest -g
    - npm install

services:
  - docker:dind

run-test:
    script:
        - docker-compose up -d --build
        - npm test

依赖项被安装,docker-组合成功启动数据库,npm test运行我的单元测试。到现在为止还好。但是所有以某种形式使用数据库连接的测试都失败了,因为它们无法在本地主机:7687上到达它。我收到以下错误消息

代码语言:javascript
复制
Neo4jError: Could not perform discovery. No routing servers available. Known routing table: RoutingTable[database=default database, expirationTime=0, currentTime=1588275075260, routers=[], readers=[], writers=[]]

请记住,我在本地机器上使用的是相同的docker-compose.yaml,一切都正常工作,所以数据库配置不会出现问题。

我已经试过的

我想我的测试在数据库完全启动之前就已经运行了,所以我添加了一个sleep 120,如下所示

代码语言:javascript
复制
run-test:
    script:
        - docker-compose up -d --build
        - sleep 120
        - npm test

我甚至测量了集群在CI容器中启动所需的时间,并适当地选择了超时,但没有运气,测试仍然失败。

然后我看了一下码头网络,看看是不是出了什么问题。

代码语言:javascript
复制
$ cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  docker 3590cde9c5df runner-k3xtxnwc-project-17881831-concurrent-0-6d9d78b64ad6df95-docker-0
172.17.0.3  runner-k3xtxnwc-project-17881831-concurrent-0

$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' core1
172.19.0.2

$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' core2
172.19.0.4

但在我看来挺好的。然后,我尝试用docker:7678172.0.0.1甚至$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' core1):7678取代docker:7678。但它们都不管用。

尝试curl localhost:7474 ( neo4j http控制台)返回Failed to connect to localhost port 7474: Connection refused

编辑:

我的船坞-合成人。

代码语言:javascript
复制
version: '3'
services:
        dbc1:
                build: ./database
                container_name: core1
                hostname: core1
                ports:
                        - 7474:7474
                        - 7687:7687
                environment: 
                        - NEO4J_dbms_mode=CORE
                        - NEO4J_causal__clustering_minimum__core__cluster__size__at__formation=3
                        - NEO4J_causal__clustering_minimum__core__cluster__size__at__runtime=3
                        - NEO4J_causal__clustering_initial__discovery__members=core1:5000,core2:5000,core3:5000
                        - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
                        - NEO4J_dbms_connector_bolt_advertised__address=localhost:7687
                        - NEO4J_dbms_connector_http_advertised__address=localhost:7474
                volumes:
                        - dbdata1:/data
                ulimits:
                        nofile:
                                soft: 40000
                                hard: 40000
        dbc2:
                build: ./database
                container_name: core2
                hostname: core2
                ports:
                        - 8474:7474
                        - 8687:7687
                environment: 
                        - NEO4J_dbms_mode=CORE
                        - NEO4J_causal__clustering_minimum__core__cluster__size__at__formation=3
                        - NEO4J_causal__clustering_minimum__core__cluster__size__at__runtime=3
                        - NEO4J_causal__clustering_initial__discovery__members=core1:5000,core2:5000,core3:5000
                        - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
                        - NEO4J_dbms_connector_bolt_advertised__address=localhost:8687
                        - NEO4J_dbms_connector_http_advertised__address=localhost:8474
                volumes:
                        - dbdata2:/data
                ulimits:
                        nofile:
                                soft: 40000
                                hard: 40000
        dbc3:
                build: ./database
                container_name: core3
                hostname: core3
                ports:
                        - 9474:7474
                        - 9687:7687
                environment: 
                        - NEO4J_dbms_mode=CORE
                        - NEO4J_causal__clustering_minimum__core__cluster__size__at__formation=3
                        - NEO4J_causal__clustering_minimum__core__cluster__size__at__runtime=3
                        - NEO4J_causal__clustering_initial__discovery__members=core1:5000,core2:5000,core3:5000
                        - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
                        - NEO4J_dbms_connector_bolt_advertised__address=localhost:9687
                        - NEO4J_dbms_connector_http_advertised__address=localhost:9474
                volumes:
                        - dbdata3:/data
                ulimits:
                        nofile:
                                soft: 40000
                                hard: 40000
volumes:
        dbdata1:
                driver: local
        dbdata2:
                driver: local
        dbdata3:
                driver: local

我的数据库Dockerfile (位于./ database中):

代码语言:javascript
复制
FROM graphfoundation/ongdb:3.6

RUN echo "* soft nofile 40000" >> /etc/security/limits.conf
RUN echo "* hard nofile 40000" >> /etc/security/limits.conf

## inject password change into startup script
# create alternative startup script
RUN echo "#!/bin/bash -eu" >> /docker-entrypoint-modified.sh 

# add command to change password
RUN echo "bin/neo4j-admin set-initial-password testpassword" >> /docker-entrypoint-modified.sh

# copy the contents of docker-entrypoint.sh, but skip the first line
RUN tail -n +2 /docker-entrypoint.sh >> /docker-entrypoint-modified.sh

# replace docker-entrypoint.sh with docker-entrypoint-modify
RUN cat /docker-entrypoint-modified.sh > /docker-entrypoint.sh


EXPOSE 7474 7473 7687
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-07 20:36:17

原来我对对接者有一些误解,我通过改变.gitlab-ci.yaml中的下列行,将本地主机“重路由”到码头内服务来解决这个问题。

代码语言:javascript
复制
services:
  - docker:dind

代码语言:javascript
复制
services:
  - name: docker:dind
    alias: localhost
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61547125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档