在gitlab ci管道中,如何使用python连接到redis服务?

doinxwow  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(473)

我的gitlab-ci.yml如下所示:

stage: functional_test
  only:
    - develop
    - master
    - merge_requests
  services:
    - redis:latest
    - docker:18.06.2-dind
  variables:
    PHOTON_ENV: development
    DOCKER_HOST: tcp://localhost:2375
    REDIS_HOST: redis
    REDIS_URL: redis://redis:6379/0

我连接redis的python代码如下所示:

self._redis = redis.Redis(host=_host,
                          port=_port,
                          db=_db,
                          decode_responses=True)

_host = 'redis'
_port = 6379
_db = 0

但是,每次尝试此代码时,都会出现以下错误:

File "/usr/local/lib/python3.6/site-packages/redis/client.py", line 772, in execute_command
403     connection = pool.get_connection(command_name,**options)
404   File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 994, in get_connection
405     connection.connect()
406   File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 497, in connect
407     raise ConnectionError(self._error_message(e))
408 redis.exceptions.ConnectionError: Error -2 connecting to redis:6379. Name or service not known.
zu0ti5jz

zu0ti5jz1#

根据注解和文档,如果使用shell执行器,则必须在gitlab runner服务器上手动安装redis。

u0sqgete

u0sqgete2#

如果其他人也有同样的问题,我会在这里提出一个解决方案。
gitlab-ci.yml中的redis服务的工作原理如下:
gitlab runner在用户映像中启动redis服务器。
redis服务器只能通过容器的ip地址连接(第一个,不是docker分配的)。
将上述ip地址传递给python代码(将“redis”替换为“$ip”)

相关问题