node.js - Jenkins docker.image().withRun() 我用什么主机名来连接
问题描述
我有一个 Jenkins 管道,我正在尝试运行一个 Postgres 容器并连接到它以进行一些 nodejs 集成测试。我的 Jenkins 文件如下所示:
stage('Test') {
steps {
script {
docker.image('postgres:10.5-alpine').withRun('-e "POSTGRES_USER=fred" -e "POSTGRES_PASSWORD="foobar" -e "POSTGRES_DB=mydb" -p 5432:5432') { c->
sh 'npm run test'
}
}
}
我应该使用什么主机名连接到我的 nodejs 代码中的 postgres 数据库?我试过 localhost 但我得到一个连接被拒绝的异常:
ERROR=Error: connect ECONNREFUSED 127.0.0.1:5432
ERROR:Error: Error: connect ECONNREFUSED 127.0.0.1:5432
其他详细信息:我添加了 30 秒的睡眠时间,以便容器启动。我知道有更好的方法可以做到这一点,但现在我只想解决连接问题。
我在容器上运行 docker logs 以查看它是否已准备好接受连接,并且是。
stage('Test') {
steps {
script {
docker.image('postgres:10.5-alpine').withRun('-e "POSTGRES_USER=fred" -e "POSTGRES_PASSWORD="foobar" -e "POSTGRES_DB=mydb" -p 5432:5432') { c->
sleep 60
sh "docker logs ${c.id}"
sh 'npm run test'
}
}
}
docker logs 命令的尾部:
2019-09-02 12:30:37.729 UTC [1] LOG: database system is ready to accept connections
我在 docker 容器中运行 Jenkins 本身,所以我想知道这是否是一个因素?
我的目标是使用空表启动数据库,针对它运行集成测试,然后关闭数据库。我无法在容器内运行测试,因为我正在测试的代码位于容器外并触发了 jenkins 管道。这是 Jenkins 多分支管道的一部分,它由推送到功能分支触发。
解决方案
推荐阅读
- c++ - 有什么办法可以结束 cin 吗?
- vue.js - 管道后如何修复 d3-zoom 不起作用
- reactjs - 运行 npm start 命令时发生错误?
- java - 新功能问题以更好地解释
- android - 在 pydroid3 中安装 kivy 2.0.0 和 Kivymd dev
- algorithm - 性能 - 具有 4 组优先级队列的多进程 RR 调度
- r - 将包含列表的 tibble 列分隔为 R 中的多行
- c++ - 如何在使用线程的c ++ winform中同时显示网络摄像头
- javascript - 无法在 find 函数中读取 undefined 的属性
- php - PHP 通过表单从函数中获取值