Gitlab服务间通信

Gitlab interservice communication

嗨,gitlab 支持服务间通信吗?我发现了一个与之相关的问题 in this there is a link to gitlab issue https://gitlab.com/gitlab-org/gitlab-runner/-/issues/1042。问题似乎已关闭,所以我认为应该会有支持。

我有一张图片,其中 运行 我的服务器需要连接到数据库。在 CI 中,我将服务器映像和 postgres 映像设置为服务。但是服务器无法连接到 postgres 服务。我得到

psycopg2.OperationalError: could not translate host name "[MASKED]" to address: Name or service not known

我能够彻底连接到数据库 CI。但无法通过我的服务器连接到数据库。 IE。无法从一项服务连接到另一项服务。

task1:
  stage: Test
  services:
    - name: postgres:latest
      alias: postgres
    - name: serverImage
      alias: server
  variables:
    FF_NETWORK_PER_BUILD: "true"
    POSTGRES_DB: testdb
    POSTGRES_USER: testuser
    POSTGRES_PASSWORD: ""
    POSTGRES_HOST_AUTH_METHOD: trust
  script: 
    - curl -i http://server:3000

我正在使用自托管 运行ner 共享 运行ners。

我只是在尝试简单的连接

from sqlalchemy import *
url = 'postgresql://testuser:@postgres:5432/testdb'
engine = create_engine(url)

with engine.connect() as conn:
    pass

当我在连接之前添加 sleep 时,错误日志消失了,但现在当我使用 curl 发送请求时,我收到另一个错误:

curl: (7) Failed to connect to server port 4000: No route to host

等待数据库就绪

连接到数据库服务的服务器映像出现问题的原因是这两个服务同时启动,并且在您的服务尝试连接时数据库可能尚未准备好进行连接。正如评论中所讨论的,添加 retry/wait 逻辑可以解决此问题。

自定义服务不稳定

您的作业中会出现以下 No route to host 错误,因为您的服务映像在您的作业/curl 连接到它之前正在退出或无法启动。您需要确保您的服务器继续 运行 成功才能访问。

相互通信的作业配置正确

您的作业配置是正确的,正如评论中所讨论的那样,用图像 strm/helloworld-http 替换它可以使通信正常工作这一事实证明了这一点。这样,所有容器(作业、服务器、数据库)之间的通信就建立起来了。