Circle CI - 无法使用 Docker Compose 连接到 Redis 或 memcached,但我可以在本地机器上连接

时间:2021-02-05 20:24:52

标签: docker docker-compose circleci

我正在开发一个连接到 Redis 和 memcached 的 Node.js 程序。我正在使用 Jest 测试我的 Node.js 程序,并在运行测试之前运行 docker-compose up。我的 Node.js 程序可以很好地连接到 Docker Redis 和 memcached Docker 容器,并且我的测试在我的本地机器上也能正常通过。

Tests passing on local machine with Docker containers running

但是,我希望测试在 Circle CI 上运行,这样每次我 git push 时,CI 环境都会验证程序是可构建的并且测试正在通过。

当我尝试在 Circle CI 上做同样的事情时,Docker 容器似乎运行良好,但是测试无法连接到容器中的 Redis 或 memcached 服务器,尽管它在我的本地工作正常电脑。

我的 Circle CI config.yml:

version: 2
jobs:
  build:
    docker:
      - image: circleci/node
    steps:
      - checkout
      - setup_remote_docker
      - run:
          name: Install Docker Compose
          command: |
            curl -L https://github.com/docker/compose/releases/download/1.28.2/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
            chmod +x ~/docker-compose
            sudo mv ~/docker-compose /usr/local/bin/docker-compose
      - run:
          name: Start Container
          command: |
            docker-compose up -d
            docker-compose ps
      - restore_cache:
          key: npm-cache-v1-{{ checksum "package-lock.json" }}
      - run:
          name: Install Dependencies
          command: npm ci
      - save_cache:
          key: npm-cache-v1-{{ checksum "package-lock.json" }}
          paths:
            - /home/circleci/.npm
      - run:
          name: Ensure Test Parity
          command: |
            chmod +x ./validateTestCases.sh
            ./validateTestCases.sh
      - run:
          name: Run Tests
          command: npm test

我的 docker-compose.yml:

services:
    redis:
        image: redis
        container_name: redis-container
        ports:
            - 6379:6379
    memcached:
        image: memcached
        container_name: memcached-container
        ports:
            - 11211:11211

我在 Circle CI 中的构建失败测试日志:

#!/bin/bash -eo pipefail
npm test

> easy-cache@1.0.0 test
> jest

 FAIL  memcached/memcached.test.js
  ● Test suite failed to run

    Error: connect ECONNREFUSED 127.0.0.1:11211



 FAIL  redis/redis.test.js
  ● Test suite failed to run

    Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Error: Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.

      at mapper (node_modules/jest-jasmine2/build/queueRunner.js:27:45)

Test Suites: 2 failed, 2 total
Tests:       0 total
Snapshots:   0 total
Time:        36.183 s
Ran all test suites.
npm ERR! code 1
npm ERR! path /home/circleci/project
npm ERR! command failed
npm ERR! command sh -c jest

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/circleci/.npm/_logs/2021-02-05T20_29_26_896Z-debug.log


Exited with code exit status 1
CircleCI received exit code 1

Link to my current source code

我不确定接下来要尝试什么。我曾尝试在 npm test 之后立即移动 docker-compose up -d 块,但没有效果。

1 个答案:

答案 0 :(得分:0)

事实证明,Docker Compose 不是我想要做的事情所必需的。相反,您可以在 Circle CI 中包含多个 Docker 镜像。

这是我更新的 Circle CI yaml 文件,我的测试在其中成功运行(连​​接到 Redis 和 memcached 就像在我使用 Docker Compose 的本地 PC 上一样):

version: 2
jobs:
  build:
    docker:
      - image: circleci/node
      - image: redis
      - image: memcached
    steps:
      - checkout
      # - setup_remote_docker
      # - run:
      #     name: Install Docker Compose
      #     command: |
      #       curl -L https://github.com/docker/compose/releases/download/1.28.2/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
      #       chmod +x ~/docker-compose
      #       sudo mv ~/docker-compose /usr/local/bin/docker-compose
      # - run:
      #     name: Start Container
      #     command: |
      #       docker-compose up -d
      #       docker-compose ps
      - restore_cache:
          key: npm-cache-v1-{{ checksum "package-lock.json" }}
      - run:
          name: Install Dependencies
          command: npm ci
      - save_cache:
          key: npm-cache-v1-{{ checksum "package-lock.json" }}
          paths:
            - /home/circleci/.npm
      - run:
          name: Ensure Test Parity
          command: |
            chmod +x ./validateTestCases.sh
            ./validateTestCases.sh
      - run:
          name: Run Tests
          command: npm test

相关问题