使用Oracle预先构建的Docker映像作为GitLab CI运行程序的服务

时间:2020-02-24 10:49:29

标签: oracle docker gitlab gitlab-ci gitlab-ci-runner

我目前正在为我们正在运行的几个需要创建Oracle数据库才能运行的项目创建集成测试管道。为此,我已经按照本文档中的说明完成了创建Docker化的预建Oracle数据库的过程。

https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance/samples/prebuiltdb

我已经成功构建了图像,并且能够验证它确实可以正常工作。我已将有问题的映像推送到我们的自定义docker存储库之一,而且我还能够从运行程序的上下文中成功获取。

我的主要问题是,当应用程序尝试连接到数据库时,它失败并显示连接拒绝错误,就好像数据库未在运行一样(请注意,我正在本地运行运行程序以进行测试)。我的问题如下:

  1. 使用自定义图像时,跑步者公开的名称是什么? 例如,文档指出当我使用mysql:latest时 那么公开的服务名称将为mysql。是这样吗 以及自定义图片?我应该用别名命名吗?

  2. 我是否需要公开端口/大码头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

任何人都可以帮忙使其正常工作吗?

1 个答案:

答案 0 :(得分:0)

我最近配置了一个 gitlab-ci.yml 以将 Oracle docker 映像用作 service,并使用我们的自定义 docker 存储库来获取映像。

下面我会一一回答你的问题:


1.a 使用自定义图像时,运行程序公开它的名称是什么?例如,文档指出,当我使用 mysql:latest 时,暴露的服务名称将是 mysql。自定义图片也是这种情况吗?

默认情况下,Gitlab runner 会根据以下约定 [1] 推断出服务的名称:

<块引用>

服务主机名的默认别名是根据以下规则从其映像名称创建的:

  1. 去掉冒号 (:) 之后的所有内容。
  2. 斜线 (/) 替换为双下划线 (__) 并创建主别名。
  3. 斜线 (/) 被替换为一个破折号 (-) 并创建了辅助别名(需要 GitLab Runner v1.1.0 或更高版本)。

因此,在您的情况下,由于您使用的服务名称是 <repository>/devops/fts-ora-inttests-db:latest,Gitlab 运行程序默认会生成两 (2) 个别名。

  1. <repository>__devops__fts-ora_inttests-db
  2. <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 中声明端口 15215500,以便您访问它.


来源:

  1. Gitlab Documentation Accessing the Services