gpt4 book ai didi

mongodb - 在 CircleCI 作业中创建 Mongo 复制集

转载 作者:行者123 更新时间:2023-12-03 15:59:32 24 4
gpt4 key购买 nike

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

(IllegalOperation) 事务号仅允许在副本集成员或 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

最佳答案

首先,您需要将 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()"

关于mongodb - 在 CircleCI 作业中创建 Mongo 复制集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58301553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com