搜索

8.2. 在 JBoss EAP 中置备用户开发的层

download PDF

除了红帽提供的配置层外,您还可以配置您开发的自定义层。

流程

  1. 使用 Galleon Maven 插件构建自定义层。

    如需更多信息 ,请参阅准备 Maven 项目

  2. 将自定义层部署到可访问的 Maven 存储库。
  3. 您可以使用自定义 Galleon 功能打包环境变量在 S2I 镜像构建过程中自定义 Galleon 功能包和层。

    有关自定义 Galleon 功能包和层的更多信息,请参阅在 S2I 构建过程中使用自定义 Galleon 功能包

  4. 可选 :创建一个自定义配置文件来引用用户定义的层,并支持的 JBoss EAP 层并将其存储在应用目录中。

    有关创建自定义置备文件的更多信息,请参阅 Galleon 置备文件

  5. 运行 S2I 流程以在 OpenShift 中调配 JBoss EAP 服务器。

    如需更多信息,请参阅在 S2I 构建过程中使用自定义 Galleon 功能包

8.2.1. 为 JBoss EAP 构建并使用自定义 Galleon 层

自定义 Galleon 层打包在 Galleon 功能包中,旨在使用 JBoss EAP 8.0 运行。

在 Openshift 中,您可以构建和使用包含要置备的层的 Galleon 功能包,例如,JBoss EAP 8.0 服务器的 MariaDB 驱动程序和数据源。层包含服务器中安装的内容。层可以更新服务器 XML 配置文件,并将内容添加到服务器安装中。

本节介绍了如何构建和使用包含层的 Galleon 功能包,以置备 OpenShift 中的 JBoss EAP 8.0 服务器的 MariaDB 驱动程序和数据源。

8.2.1.1. 准备 Maven 项目

Galleon feature-packs 使用 Maven 创建。此流程包括创建新的 Maven 项目的步骤。

流程

  1. 运行以下命令来创建一个新的 Maven 项目:

    mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DgroupId=org.jboss.eap.demo -DartifactId=mariadb-galleon-pack -DinteractiveMode=false
  2. 导航到 mariadb-galleon-pack 目录,并更新 pom.xml 文件,使其包含 Red Hat Maven 存储库:

    <repositories>
      <repository>
        <id>redhat-ga</id>
        <name>Redhat GA</name>
        <url>https://maven.repository.redhat.com/ga/</url>
      </repository>
    </repositories>
  3. 更新 pom.xml 文件,以添加 JBoss EAP Galleon feature-pack 和 MariaDB 驱动程序的依赖项:

    <dependencies>
      <dependency>
        <groupId>org.jboss.eap</groupId>
        <artifactId>wildfly-ee-galleon-pack</artifactId>
        <version>8.0.0.GA-redhat-00010</version>
        <type>zip</type>
      </dependency>
      <dependency>
        <groupId>org.mariadb.jdbc</groupId>
        <artifactId>mariadb-java-client</artifactId>
        <version>2.7.2</version>
      </dependency>
    </dependencies>
    注意
  4. 更新 pom.xml 文件,使其包含用于构建 Galleon feature-pack 的 Maven 插件:

    <build>
      <plugins>
        <plugin>
          <groupId>org.wildfly.galleon-plugins</groupId>
          <artifactId>wildfly-galleon-maven-plugin</artifactId>
          <version>6.4.8.Final-redhat-00001</version>
          <executions>
            <execution>
              <id>mariadb-galleon-pack-build</id>
              <goals>
                <goal>build-user-feature-pack</goal>
              </goals>
              <phase>compile</phase>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>

8.2.1.2. 添加 feature-pack 内容

这个过程帮助您在自定义 Galleon 功能包中添加层,例如 feature-pack,包括 MariaDB 驱动程序和数据源层。

先决条件

流程

  1. 在自定义 feature-pack Maven 项目中创建目录 src/main/resources,例如,请参阅 准备 Maven 项目。此目录是包含 feature-pack 内容的根目录。
  2. 创建 src/main/resources/modules/org/mariadb/jdbc/main 目录。
  3. 主目录中,使用以下内容创建一个名为 module.xml 的文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <module name="org.mariadb.jdbc" xmlns="urn:jboss:module:1.8">
      <resources>
        <artifact name="${org.mariadb.jdbc:mariadb-java-client}"/> 1
      </resources>
      <dependencies> 2
        <module name="java.se"/>
        <module name="jakarta.transaction.api"/>
        <module name="jdk.net"/>
      </dependencies>
    </module>
    1
    MariaDB 驱动程序 groupIdartifactId.在调配时,会安装实际的驱动程序 JAR 文件。驱动程序的版本从 pom.xml 文件引用。
    2
    适用于 MariaDB 驱动程序的 JBoss 模块模块依赖项。
  4. 创建 src/main/resources/layers/standalone/ 目录。这是 Galleon feature-pack 定义的所有层的根目录。
  5. 创建 src/main/resources/layers/standalone/mariadb-driver 目录。
  6. mariadb-driver 目录中,使用以下内容创建 layer-spec.xml 文件:

    <?xml version="1.0" ?>
    <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-driver">
      <feature spec="subsystem.datasources"> 1
        <feature spec="subsystem.datasources.jdbc-driver">
          <param name="driver-name" value="mariadb"/>
          <param name="jdbc-driver" value="mariadb"/>
          <param name="driver-xa-datasource-class-name" value="org.mariadb.jdbc.MariaDbDataSource"/>
          <param name="driver-module-name" value="org.mariadb.jdbc"/>
        </feature>
      </feature>
      <packages> 2
        <package name="org.mariadb.jdbc"/>
      </packages>
    </layer-spec>
    1
    使用名为 MariaDB 的 JDBC 驱动程序更新 datasources 子系统配置,由模块 org.mariadb.jdbc 来实施。
    2
    包含置备层时安装的驱动程序类的 JBoss 模块模块。

    mariadb-driver 层使用通过 JBoss 模块模块 实施的 JDBC 驱动程序的配置更新 datasources 子系统。

  7. 创建 src/main/resources/layers/standalone/mariadb-datasource 目录。
  8. mariadb-datasource 目录中,使用以下内容创建 layer-spec.xml 文件:

    <?xml version="1.0" ?>
    <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-datasource">
      <dependencies>
        <layer name="mariadb-driver"/> 1
      </dependencies>
      <feature spec="subsystem.datasources.data-source"> 2
        <param name="data-source" value="MariaDBDS"/>
        <param name="jndi-name" value="java:jboss/datasources/${env.MARIADB_DATASOURCE:MariaDBDS}"/>
        <param name="connection-url" value="jdbc:mariadb://${env.MARIADB_HOST:localhost}:${env.MARIADB_PORT:3306}/${env.MARIADB_DATABASE}"/> 3
        <param name="driver-name" value="mariadb"/>
        <param name="user-name" value="${env.MARIADB_USER}"/> 4
        <param name="password" value="${env.MARIADB_PASSWORD}"/>
      </feature>
    </layer-spec>
    1
    这个依赖项在置备数据源时强制置备 MariaDB 驱动程序。在调配该层时,会自动调配层所有层。
    2
    使用名为 MariaDBDS 的数据源更新 datasources 子系统配置。
    3
    数据源的名称、主机、端口和数据库值从环境变量 MARIADB_DATASOURCEMARIADB_HOSTMARIADB_PORTMARIADB_DATABASE (服务器启动时设置)解析。
    4
    用户名和密码值可从环境变量 MARIADB_USERMARIADB_PASSWORD 解析。
  9. 运行以下命令来构建 Galleon 功能包:

    mvn clean install

    文件 target/mariadb-galleon-pack-1.0-SNAPSHOT.zip 被创建。

8.2.1.3. 在 S2I 构建过程中使用自定义 Galleon 功能包

在 OpenShift S2I 构建过程中,必须向 Maven 构建提供自定义功能包。这通常是通过将自定义 feature-pack 部署为工件(例如 org.jboss.eap.demo:mariadb-galleon-pack:1.0-SNAPSHOT )来实现的。

注意

有关为自定义 Galleon 功能打包使用配置 JBoss EAP S2I 镜像的更多信息,请参阅使用 高级环境变量配置 Galleon

先决条件

流程

  1. 运行以下命令来启动 MariaDB 数据库。本例使用 MariaDB 镜像 mariadb-105-rhel7。您必须使用最新支持的 MariaDB 镜像版本。请参阅 红帽生态系统目录 以获取有关 MariaDB 镜像 的更多信息。

    oc new-app -e MYSQL_USER=admin -e MYSQL_PASSWORD=admin -e MYSQL_DATABASE=mariadb registry.redhat.io/rhscl/mariadb-105-rhel7

    OpenShift 服务 mariadb-101-rhel7 已创建并启动。

  2. 通过自定义 feature-pack Maven 构建生成的 feature-pack Maven 构建,在 Maven 项目目录 mariadb-galleon-pack 中运行以下命令来创建一个 secret:

    oc create secret generic mariadb-galleon-pack --from-file=target/mariadb-galleon-pack-1.0-SNAPSHOT.zip

    secret mariadb-galleon-pack 已创建。在启动 S2I 构建时,此机密用于在 pod 中挂载 feature-pack .zip 文件,使文件在服务器调配阶段可用。

8.2.1.4. 导入 JBoss EAP 8 镜像流

您可以按照以下步骤导入 JBoss EAP 8.0 镜像流。

流程

  1. 导入 JBoss EAP 8.0 镜像流:

    oc import-image jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8:latest --from=registry.redhat.io/jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8:latest
    --confirm
8.2.1.4.1. 使用 JBoss EAP maven 插件创建 S2I 构建

eap-maven-plugin 已配置了对 JBoss EAP galleon feature-pack、JBoss EAP 云 galleon feature-packmariadb galleon feature-pack 的引用。请参阅 pom.xml 的提取:

<feature-packs>
  <feature-pack>
    <location>org.jboss.eap:wildfly-ee-galleon-pack</location>
  </feature-pack>
  <feature-pack>
    <location>org.jboss.eap.cloud:eap-cloud-galleon-pack</location>
  </feature-pack>
  <feature-pack>
    <location>org.jboss.eap.demo:mariadb-galleon-pack:1.0-SNAPSHOT</location>1
  </feature-pack>
</feature-packs>
<layers>
  <layer>jaxrs-server</layer>
  <layer>mariadb-datasource</layer>2
</layers>
1
需要 mariadb feature-pack 版本。它在 JBoss EAP 8 配置的频道中没有解决。
2
mariadb-datasource 层。

流程

  1. 运行以下命令来创建 S2I 构建:

    oc new-build eap8-openjdk17-builder-openshift-rhel8:latest~https://github.com/jboss-container-images/jboss-eap-8-openshift-image#EAP_8.0.0 \
    --context-dir=examples/eap/custom-layers/application \
    --build-secret=mariadb-galleon-pack:/tmp/demo-maven-repository/org/jboss/eap/demo/mariadb-galleon-pack/1.0-SNAPSHOT \ 1
    --name=mariadb-app-build
    1
    mariadb-galleon-pack 机密挂载到 /tmp/demo-maven-repository/org/jboss/eap/demo/mariadb-galleon-pack/1.0-SNAPSHOT 目录中。

其他资源

如需更多信息,请参阅 JBoss EAP 8.0 演示示例

8.2.1.4.2. 使用旧的 S2I 调配功能创建 S2I 构建

您可以使用 openshift-legacy 配置集来配置 S2I 构建,以便您可以置备服务器。

流程

  1. 运行以下命令来创建新的 OpenShift 构建:

    oc new-build eap8-openjdk17-builder-openshift-rhel8:latest~https://github.com/jboss-container-images/jboss-eap-8-openshift-image#EAP_8.0.0 \
    --context-dir=examples/eap/custom-layers/application \
    --env=GALLEON_PROVISION_CHANNELS="org.jboss.eap.channels:eap-8.0" \ 1
    --env=GALLEON_PROVISION_FEATURE_PACKS="org.jboss.eap:wildfly-ee-galleon-pack,org.jboss.eap.cloud:eap-cloud-galleon-pack,org.jboss.eap.demo:mariadb-galleon-pack:1.0-SNAPSHOT" \ 2
    --env=GALLEON_PROVISION_LAYERS="jaxrs-server,mariadb-datasource" \ 3
    --env=GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO="/tmp/demo-maven-repository" \ 4
    --env=MAVEN_ARGS="-Popenshift-legacy" \ 5
    --build-secret=mariadb-galleon-pack:/tmp/demo-maven-repository/org/jboss/eap/demo/mariadb-galleon-pack/1.0-SNAPSHOT \ 6
    --name=mariadb-app-build
    1
    此环境变量在置备过程中使用 JBoss EAP 8.0 频道。
    2
    此环境变量引用 JBoss EAP 8.0 feature-pack云 feature-packmariadb feature-pack
    3
    这个环境变量引用您要用来置备服务器的 Galleon 层集合。jaxrs-server 是基础服务器层 mariadb-datasource 是我们的自定义层,将 mariadb 驱动程序和新数据源引入服务器安装。
    4
    这指向包含 mariadb feature-pack 的本地 maven 存储库的位置。
    5
    此环境变量重新定义 MAVEN_ARGS 来启用 openshift-legacy 配置集。
    6
    mariadb-galleon-pack 机密挂载到 /tmp/demo-maven-repository/org/jboss/eap/demo/mariadb-galleon-pack/1.0-SNAPSHOT 目录中。
注意

此目录路径符合 Maven 存储库工件协调到路径映射。

8.2.1.4.3. 启动构建

您可以通过创建新构建来创建 mariadb-app-build 镜像。

流程

  1. 从之前创建的同一 OpenShift 构建中启动一个新构建,并运行以下命令:

    oc start-build mariadb-app-build

    成功执行命令后,会创建镜像 mariadb-app-build

8.2.1.4.4. 创建新部署

您可以通过提供将数据源绑定到正在运行的 MariaDB 数据库所需的环境变量来创建新部署

流程

  1. 运行以下命令来创建新部署:

    oc new-app --name=mariadb-app mariadb-app-build \
    --env=MARIADB_PORT=3306 \
    --env=MARIADB_USER=admin \
    --env=MARIADB_PASSWORD=admin \
    --env=MARIADB_HOST=mariadb-105-rhel7 \
    --env=MARIADB_DATABASE=mariadb  \
    --env=MARIADB_DATASOURCE=Demo 1
    1
    该演示要求数据源命名为 Demo
    注意

    有关自定义 Galleon 功能包环境变量的详情,请参阅 自定义 Galleon 功能软件包环境变量

  2. 公开 mariadb-app 应用程序,运行以下命令:

    oc expose svc/mariadb-app
  3. 要创建新任务,请运行以下命令:

    curl -X POST http://$(oc get route mariadb-app --template='{{ .spec.host }}')/tasks/title/foo
  4. 要访问任务列表,请运行以下命令:

    curl http://$(oc get route mariadb-app --template='{{ .spec.host }}')

    添加的任务显示在浏览器中。

8.2.2. 使用高级环境变量配置 Galleon

您可以使用高级自定义 Galleon 功能软件包环境变量来自定义在 S2I 镜像构建过程中存储自定义 Galleon 功能软件包和层的位置。这些高级自定义 Galleon 功能 pack 环境变量如下:

  • GALLEON_DIR=<path>,将默认的 <project_root_dir>/galleon 目录路径覆盖为 <project_root_dir>/<GALLEON_DIR>
  • GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO=<path>, 将 <project root dir>/galleon/repository 目录路径改为一个到 Maven 本地存储库缓存目录的绝对路径。这个软件仓库包含自定义 Galleon 功能软件包。

您必须在与 Maven local-cache 文件系统配置兼容的子目录中找到 Galleon feature pack 归档文件。例如,在 path-to-repository/org/examples/my-feature-pack/1.0.0.Final/my-feature-pack/1.0.0 中查找 org.examples:my-feature-pack:1.0.0.Final.zip 路径。

您可以通过在 <project_root>/<GALLEON_DIR> 目录中创建一个 settings.xml 文件来配置您的 Maven 项目设置。GALLEON_DIR 的默认值为 <project_root_dir>/galleon。Maven 使用该文件为您的应用程序置备自定义 Galleon 功能软件包。如果您没有创建 settings.xml 文件,Maven 将使用 S2I 镜像创建的默认 settings.xml 文件。

重要

不要在 settings.xml 文件中指定本地 Maven 存储库位置,因为 S2I 构建器镜像指定了本地 Maven 存储库的位置。S2I 构建器镜像在 S2I 构建过程中使用此位置。

8.2.3. 自定义 Galleon 功能 pack 环境变量

您可以使用以下自定义 Galleon 功能软件包环境变量来自定义如何使用 JBoss EAP S2I 镜像。

表 8.1. 自定义 Galleon 功能软件包环境变量的描述
环境变量描述

GALLEON_DIR=<path>

其中 <path > 是相对于应用程序项目根目录的目录。您的 <path> 目录包含您的可选 Galleon 自定义内容,如 settings.xml 文件和本地 Maven 存储库缓存。这个缓存包含自定义 Galleon 功能软件包。

目录默认为 galleon

GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO=<path>

<path> 是包含自定义 feature-packs 的 Maven 本地存储库目录的绝对路径。目录默认为 galleon/repository

GALLEON_PROVISION_FEATURE_PACKS=<list_of_galleon_feature_packs>

<list_of_galleon_feature_packs> 是 Maven 协调标识的自定义 Galleon 功能包的逗号分隔列表。列出的功能软件包必须与构建器镜像中存在的 JBoss EAP 8.0 服务器版本兼容。

您可以使用 GALLEON_PROVISION_LAYERS 环境变量来为您的服务器设置 Galleon 层(由自定义功能包定义)。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.