Création d'un replicaSet Mongo dans un emploi CircleCI

voix
1

Je suis en train d'exécuter des tests d'intégration dans CircleCI sur le code qui utilise des transactions MongoDB. Je reçois actuellement l'erreur suivante:

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

Est-il possible d'initier un replicaSet avant d'exécuter les tests?

Je l' ai essayé d' utiliser docker execpour exécuter des commandes sur le conteneur , sans succès.

Quelqu'un at-il réussi à le faire avant?

Actuellement, mon fichier de configuration circleci ressemble à ceci:

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

      - run: go test ./... -mod vendor -v -race -tags integration
Créé 09/10/2019 à 12:55
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Tout d'abord, vous devez initialiser mongod comme un ensemble de réplique. Le docker: section prend une balise de commande qui peut être exécuté au démarrage

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

maintenant le conteneur mongo démarre automatiquement en replSet. Cependant, vous n'êtes pas sur les mauvaises herbes encore. Vous devez toujours exécuter rs.Initiate (), et qui doit être exécuté à l'extérieur du conteneur mongo (puisqu'il exécute le serveur mongod).

Chaque fois que vous utilisez runce qui a trait au premier récipient, qui dans ce cas est le conteneur de golang. Vous devez installer le cli mongo dans ce conteneur, puis exécutez rs.initiate ()

Dans mon cas, je courais un conteneur docker Alpine et résolu avec ce code

  - 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()"

Cependant , je pense que le cercle: les conteneurs golang sont en cours d' exécution hors de Debian. Selon ce blog il semble que vous pouvez exécuter

  - 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()"
Créé 12/10/2019 à 18:05
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more