1

我为 mongodb 测试构建了一个 docker 映像。您可以从zhaoyi0113/mongo-uat. 当从这个镜像启动一个 docker 容器时,它会创建几个 mongodb 实例,这需要几分钟才能启动。现在我想通过无人机 CI 在这个容器中运行我的集成测试用例。下面是我的 .drone.yml 文件:

pipeline:
  build:
    image: node:latest
    commands:
      - npm install
      - npm test
      - npm run eslint
  integration:
    image: zhaoyi0113/mongo-uat
    commands:
      - npm install
      - npm run integration

这个管道有两个步骤,第一个是在 nodejs 项目中运行单元测试。第二个integration用于在 mongodb docker 镜像中运行集成测试用例。

当我运行drone exec它会得到一个错误failed to connect to mongo instance。我认为这是因为 mongodb 实例需要几分钟才能启动。命令npm installnpm run integration应该在 mongodb 实例启动后运行。如何延迟构建命令?

编辑1

该图像zhaoyi0113/mongo-uat具有 mongodb 环境。它将创建一些 mongodb 实例。我可以运行这个命令docker run -d zhaoyi0113/mongo-uat来启动这个容器,然后我可以附加到这个容器来查看 mongodb 实例。我不确定无人机如何启动 docker 容器。

4

2 回答 2

4

推荐的集成测试方法是将您的服务容器放在 Yaml [1][2] 的服务部分

因此,为了启动 Mongo 服务容器,我将创建以下 Yaml 文件。Mongo 服务将在默认端口 127.0.0.1 上启动,并且可以从您的管道容器访问。

pipeline:
  test:
    image: node
    commands:
      - npm install
      - npm run test
  integration:
    image: node
    commands:
      - npm run integration

services:
  mongo:
    image: mongo:3.0

这是测试 MySQL、Postgres、Mongo 等服务的推荐方法。

[1] http://readme.drone.io/usage/getting-started/#services
[2] http://readme.drone.io/usage/services-guide/

于 2017-01-06T01:02:23.703 回答
0

作为 Brads 回答的简短附录:虽然 mongo 服务将在无人机主机上的 127.0.0.1 上运行 -在节点应用程序中无法从该 IP 访问该服务。要访问该服务,您将引用其服务名称(此处为:mongo)。

于 2019-06-26T14:04:46.720 回答