【问题标题】:Using Oracle pre-built Docker image as a service for GitLab CI runner使用 Oracle 预构建的 Docker 镜像作为 GitLab CI 运行器的服务
【发布时间】:2020-02-24 10:49:29
【问题描述】:

我目前正在为我们正在运行的一些项目创建集成测试管道,这些项目需要存在 Oracle 数据库才能工作。为此,我使用本文档中提到的指令完成了创建 dockerized 预构建 Oracle 数据库的过程。

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

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

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

  1. 使用自定义图像时,跑步者公开的名称是什么? 例如,文档说明当我使用 mysql:latest 那么公开的服务名称将是mysql。是这种情况吗 自定义图像也是如此?我应该用别名命名它吗?

  2. 我是否需要公开端口/桥码头网络才能获得 这能正常工作吗?我失败背后的原因使我 相信运行应用程序的映像无法 与 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

任何人都可以帮忙让它正常工作吗?

【问题讨论】:

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


    【解决方案1】:

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

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


    1.a 使用自定义图像时,跑步者公开它的名称是什么?例如,文档指出,当我使用 mysql:latest 时,公开的服务名称将是 mysql。自定义图片也是这样吗?

    默认情况下,Gitlab 运行器将根据以下约定 [1] 推断服务名称:

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

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

    因此,在您的情况下,由于您使用的服务名称是 &lt;repository&gt;/devops/fts-ora-inttests-db:latest,Gitlab 运行器将默认生成 两 (2) 个别名。

    1. &lt;repository&gt;__devops__fts-ora_inttests-db
    2. &lt;repository&gt;-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

    【讨论】:

    • 感谢您的回答@Melvin Sy。我有一个后续问题,因为我无法连接到 oracle 服务。当脚本尝试运行 sql 命令时,我看到以下错误。你知道问题可能是什么吗?谢谢Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error: ORA-12526, TNS:listener: all appropriate instances are in restricted mode
    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2018-02-13
    • 2019-08-03
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多