Het creëren van een Mongo replicaset in een CircleCI job

stemmen
1

Ik ben op zoek naar de integratie tests uit te voeren in CircleCI op code die gebruik maken van MongoDB transacties maakt. Ik ben momenteel het krijgen van de volgende fout:

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

Is er een manier om een ​​replicaset voor het uitvoeren van de tests te starten?

Ik heb geprobeerd met behulp van docker execom commando's op de verpakking te voeren zonder enig succes.

Heeft iemand in geslaagd om dit te doen voordat?

Op dit moment mijn circleci config file ziet er als volgt uit:

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

      - run: go test ./... -mod vendor -v -race -tags integration
De vraag is gesteld op 09/10/2019 om 12:55
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

eerst uit, moet je mongod initialiseren als een replica set. De havenarbeider: deel neemt een opdracht tag die bij het opstarten kan worden uitgevoerd

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

nu de mongo container wordt automatisch gestart als een replSet. Maar u bent niet uit het onkruid nog niet. Je moet nog rs.Initiate () draaien, en dat moet buiten te lopen op de Mongo container (omdat het de mongod server draait).

Wanneer u gebruik maken van rundeze betrekking heeft op de eerste container, die in dit geval is de golang container. U moet de-Mongo cli in die container en vervolgens rs.initiate installeren ()

In mijn geval was ik het runnen van een Alpine havenarbeider container en het probleem is opgelost met deze 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()"

Toch denk ik dat de cirkel: golang containers worden uitgevoerd off van Debian. Volgens deze blog het lijkt erop dat u kunt uitvoeren

  - 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()"
antwoordde op 12/10/2019 om 18:05
bron van user

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