我目前正在为我们正在运行的几个需要创建Oracle数据库才能运行的项目创建集成测试管道。为此,我已经按照本文档中的说明完成了创建Docker化的预建Oracle数据库的过程。
https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance/samples/prebuiltdb
我已经成功构建了图像,并且能够验证它确实可以正常工作。我已将有问题的映像推送到我们的自定义docker存储库之一,而且我还能够从运行程序的上下文中成功获取。
我的主要问题是,当应用程序尝试连接到数据库时,它失败并显示连接拒绝错误,就好像数据库未在运行一样(请注意,我正在本地运行运行程序以进行测试)。我的问题如下:
使用自定义图像时,跑步者公开的名称是什么?
例如,文档指出当我使用mysql:latest
时
那么公开的服务名称将为mysql
。是这样吗
以及自定义图片?我应该用别名命名吗?
我是否需要公开端口/大码头docker网络才能获得 这个能正常工作吗?我失败的原因使我想到 认为运行该应用程序的映像无法 与Oracle服务正确通信。
以下是我供参考的gitlab-ci.yml
:
integration_test:
stage: test
before_script:
- echo 127.0.0.1 inttests.myapp.com >> /etc/hosts
services:
- <repository>/devops/fts-ora-inttests-db:latest
script:
- ./gradlew -x:test integration-test:test
cache:
key: "$CI_COMMIT_REF_NAME"
paths:
- build
- .gradle
only:
- master
- develop
- merge_requests
- tags
except:
- api
任何人都可以帮忙使其正常工作吗?
答案 0 :(得分:0)
我最近配置了一个 gitlab-ci.yml
以将 Oracle docker 映像用作 service
,并使用我们的自定义 docker 存储库来获取映像。
下面我会一一回答你的问题:
1.a 使用自定义图像时,运行程序公开它的名称是什么?例如,文档指出,当我使用 mysql:latest 时,暴露的服务名称将是 mysql。自定义图片也是这种情况吗?
默认情况下,Gitlab runner 会根据以下约定 [1] 推断出服务的名称:
<块引用>服务主机名的默认别名是根据以下规则从其映像名称创建的:
因此,在您的情况下,由于您使用的服务名称是 <repository>/devops/fts-ora-inttests-db:latest
,Gitlab 运行程序默认会生成两 (2) 个别名。
<repository>__devops__fts-ora_inttests-db
<repository>-devops-fts-ora-inttests-db
为了连接到您的oracle 数据库服务,您需要在您的配置文件或源代码中引用别名。
例如
database.url=jdbc:oracle:thin@<repository>__devops__fts-ora_inttests-db:1521:xe
//OR
database.url=jdbc:oracle:thin@<repository>-devops-fts-ora-inttests-db:1521:xe
1.b 我应该用别名命名吗?
在我看来,您应该只为服务声明一个别名,以保持运行器将自动使用的别名简单,并且您可以以相同的方式引用它。
例如
// .gitlab-ci.yml
services:
- name: <repository>/devops/fts-ora-inttests-db:latest
alias: oracle-db
// my-app.properties
database.url=jdbc:oracle:thin@oracle-db:1521:xe
2.我是否需要公开端口/桥接 docker 网络才能使其正常工作?
是的,将用于服务的 Oracle DB docker 映像必须在 dockerfile 中声明端口 1521
和 5500
,以便您访问它.
来源: