在我的CI中,我需要确保我的代码可以与mongo一起工作,因此我使用官方的mongo docker镜像,并将我所需的凭据作为mongo镜像的环境变量传递。
build-on-mongo:
runs-on: ${{ matrix.os }}
env:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
MONGO_INITDB_DATABASE: vote-stuysu-org
services:
mongo:
image: mongo
ports:
# Maps tcp port 27017 on service container to the host
- 27017:27017
strategy:
matrix:
os: [ubuntu-20.04]
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '14.x'
- name: Install dependencies
run: npm install
- name: Test
run: npm test
env:
MONGO_URL: mongodb://root:password@localhost:27017/vote-stuysu-org
但是,在测试步骤中,记录了一个错误:
(node:2158)UnhandledPromiseRejectionWarning:MongoError:身份验证失败。
我使用mongoose和nodejs,所以这是负责身份验证的代码:
mongoose.connect(process.env.MONGO_URL, {
useUnifiedTopology: true,
useNewUrlParser: true
});
我不认为我的连接URI是错误的,但我不知道为什么身份验证失败。
1条答案
按热度按时间xghobddn1#
虽然有点晚了,但也许能帮上忙。对我来说,我在MongoDB连接url中包含了
authSource=admin
作为查询参数,它工作了,这里有一个例子:我不需要在连接字符串中包含
${MONGODB_DB}
并为它创建一个env变量,只有当您想使用自定义数据库名称时才需要这样做。我是通过使用MongoDB Compass了解到这一点的,MongoDB Compass是一个免费的原生GUI应用程序,可以让你连接到MongoDB数据库:https://www.mongodb.com/products/compass