【问题标题】:Creating a Mongo replicaset in a CircleCI job在 CircleCI 作业中创建 Mongo 副本集
【发布时间】:2020-02-06 15:18:48
【问题描述】:

我正在尝试在 CircleCI 中对使用 MongoDB 事务的代码运行集成测试。我目前收到以下错误:

(IllegalOperation) Transaction numbers are only allowed on a replica set member or mongos

有没有办法在运行测试之前启动副本集?

我曾尝试使用docker exec 在容器上运行命令,但没有成功。

以前有人做过吗?

目前我的 circleci 配置文件如下所示:

 integration:
    docker:
      - image: circleci/golang:1.13
      - image: circleci/mongo:3
    steps:
      - attach_workspace:
          at: .

      - run: go test ./... -mod vendor -v -race -tags integration

【问题讨论】:

    标签: mongodb docker continuous-integration yaml circleci


    【解决方案1】:

    首先,您需要将 mongod 初始化为副本集。 docker: 部分接受一个可以在启动时运行的命令标签

    - image: circleci/mongo:4.0
      command: [--replSet,rs0]
    

    现在 mongo 容器将作为 replSet 自动启动。但是,您还没有摆脱困境。您仍然需要运行 rs.Initiate(),并且必须在 mongo 容器之外运行(因为它正在运行 mongod 服务器)。

    每当您使用run 时,它都与第一个容器相关,在本例中是 golang 容器。您需要在该容器中安装 mongo-cli,然后运行 ​​rs.initiate()

    就我而言,我正在运行一个 Alpine docker 容器并使用此代码解决它

      - run:
        name: "Initialize Replica Set"
        command: |
          echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/main' >> /etc/apk/repositories
          echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/community' >> /etc/apk/repositories
          apk update
          apk add mongodb=3.4.4-r0
          mongo mongodb://localhost:27017 --eval "rs.initiate()"
    

    但是我认为 circle:golang 容器正在脱离 Debian。根据this blog 看来你可以跑了

      - run:
        name: "Initialize Replica Set"
        command: |
          echo "deb http://repo.mongodb.org/apt/debian "$(lsb_release -sc)"/mongodb-org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb.list
          sudo apt-get update
          sudo apt-get install mongodb-org
          mongo mongodb://localhost:27017 --eval "rs.initiate()"
    

    【讨论】:

    • 谢谢,它有效!我不得不对 Debian 容器的命令做一些小改动:``` sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 echo "deb repo.mongodb.org/apt/debianstretch/mongodb- org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org.list sudo apt-get update sudo apt-get install mongodb-org-shell mongo mongodb://localhost:27017 --eval "rs.initiate() " ```
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 2017-02-01
    • 2021-10-12
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    相关资源
    最近更新 更多