搜索

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

download PDF

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

流程

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

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

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

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

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

    有关创建自定义配置文件的更多信息,请参阅为 JBoss EAP 自定义调配文件

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

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

5.3.1. 为 JBoss EAP 构建和部署 Galleon 层

自定义 Galleon 层打包在 Galleon 功能包中,该包设计为使用 JBoss EAP 7.4 运行。

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

本节记录了如何在 OpenShift 中构建和使用 Galleon 功能包,其中包含层为 JBoss EAP 7.4 服务器置备 MariaDB 驱动程序和数据源。

5.3.1.1. 准备 Maven 项目

Galleon 功能包使用 Maven 创建。此流程包括创建新 Maven 项目的步骤。

流程

  1. 要创建新 Maven 项目,请运行以下命令:

    mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DgroupId=org.example.mariadb -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 文件,以添加 EAP Galleon 功能包和 MariaDB 驱动程序的依赖项:

    <dependencies>
      <dependency>
        <groupId>org.jboss.eap</groupId>
        <artifactId>wildfly-ee-galleon-pack</artifactId>
        <version>7.4.4.GA-redhat-00011</version>
        <type>zip</type>
      </dependency>
      <dependency>
         <groupId>org.mariadb.jdbc</groupId>
         <artifactId>mariadb-java-client</artifactId>
         <version>3.0.5</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>5.2.11.Final</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>

5.3.1.2. 添加功能包内容

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

先决条件

流程

  1. 在自定义功能包 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="javax.api"/>
           <module name="javax.transaction.api"/>
       </dependencies>
    </module>
    1
    MariaDB 驱动程序 groupIdartifactId。在调配时,将安装实际的驱动程序 jar 文件。驱动程序的版本从 pom.xml 文件引用。
    2
    MariaDB 驱动程序的 JBoss 模块模块依赖项。
  4. 创建 src/main/resources/layers/standalone/ 目录。这是 Galleon 功能包定义的所有层的根目录。
  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-driver 更新 datasources 子sytem 配置,由模块 org.mariadb.jdbc 实施。
    2
    包含调配层时安装的驱动程序类的 JBoss 模块模块。

    mariadb-driver 层使用由 JBoss 模块模块 实施的 JDBC 驱动程序配置更新数据源子系统。

  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 的数据源更新数据源子系统配置。
    3
    数据源的名称、主机、端口和数据库值从环境变量 MARIADB_DATASOURCEMARIADB_HOSTMARIADB_PORTMARIADB_DATABASE 解决,在服务器启动时设置。
    4
    用户名和密码值从 MARIADB_USERMARIADB_PASSWORD 中解析。
  9. 运行以下命令构建 Galleon 功能包:

    mvn clean install

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

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

自定义功能包必须提供给 OpenShift S2I 构建期间发生的 Maven 构建。这通常通过将自定义功能包部署为工件来实现,例如 org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT 到可访问的 Maven 存储库。

要在部署前测试 feature-pack,您可以使用 EAP S2I 构建器镜像功能,允许您使用本地构建的 Galleon 功能包。使用以下步骤使用 MariaDB 驱动程序来自定义 todo-backend EAP Quickstart,而不是 PostgreSQL 驱动程序。

注意

先决条件

  • 已安装 OpenShift 命令行
  • 已登陆到 OpenShift 集群 
  • 已在集群中安装了 JBoss EAP OpenShift 镜像
  • 您已配置了对 Red Hat Container registry 的访问。如需更多信息,请参阅 Red Hat Container Registry
  • 您已创建了自定义 Galleon 功能包。如需更多信息 ,请参阅准备 Maven 项目

流程

  1. 运行以下命令启动 MariaDB 数据库:

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

    OpenShift service mariadb-rhcsrhel7 已创建并启动。

  2. 在 Maven 项目目录 mariadb-galleon-pack 中运行以下命令来从 feature-pack ZIP 归档创建 secret,由自定义 feature-pack Maven 构建生成:

    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 文件,以便在服务器置备阶段提供该文件。

  3. 要创建新的 OpenShift 构建来构建包含通过 Galleon 修剪的服务器内的 todo-backend quickstart 部署的应用程序镜像,请运行以下命令:

    oc new-build jboss-eap74-openjdk11-openshift:latest~https://github.com/jboss-developer/jboss-eap-quickstarts#EAP_7.4.0.GA \
    --context-dir=todo-backend \
    --env=GALLEON_PROVISION_FEATURE_PACKS="org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT" \ 1
    --env=GALLEON_PROVISION_LAYERS="jaxrs-server,mariadb-datasource" \ 2
    --env=GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO="/tmp/repo" \ 3
    --env=MAVEN_ARGS_APPEND="-Dcom.redhat.xpaas.repo.jbossorg" \
    --build-secret=mariadb-galleon-pack:/tmp/repo/org/example/mariadb/mariadb-galleon-pack/1.0-SNAPSHOT \ 4
    --name=todos-app-build
    1
    包含以逗号分隔的功能包 Maven 协调列表的自定义 feature-pack 环境变量,如 groupId:artifactId:version
    2
    用于置备服务器的 Galleon 层集合。jaxrs-server 是一个基本的服务器层,mariadb-datasource 是自定义层,它会将 MariaDB 驱动程序和新的数据源引入到服务器安装。
    3
    包含 MariaDB 功能包的镜像中本地 Maven 存储库的位置。在镜像中挂载 secret 时,此软件仓库会被填充。
    4
    mariadb-galleon-pack secret 挂载到 /tmp/repo/org/example/mariadb/mariadb-galleon-pack/1.0-SNAPSHOT 目录中。
  4. 要从创建的 OpenShift 构建启动新构建,请运行以下命令:

    oc start-build todos-app-build

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

  5. 要创建新部署,请执行以下命令,提供将数据源绑定到正在运行的 MariaDB 数据库所需的环境变量:

    oc new-app --name=todos-app todos-app-build \
    --env=MARIADB_PORT=3306 \
    --env=MARIADB_USER=admin \
    --env=MARIADB_PASSWORD=admin \
    --env=MARIADB_HOST=mariadb-101-rhel7 \
    --env=MARIADB_DATABASE=mariadb  \
    --env=MARIADB_DATASOURCE=ToDos 1
    1
    Quickstart 期望数据源命名为 ToDos
    注意

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

  6. 要公开 todos-app 应用程序,请运行以下命令:

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

    curl -X POST http://$(oc get route todos-app --template='{{ .spec.host }}') \
       -H 'Content-Type: application/json' \
       -d '{"title":"todo1"}'
  8. 要访问任务列表,请运行以下命令:

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

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

5.3.1.4. 用于 JBoss EAP 的自定义调配文件

自定义调配文件是文件名 provisioning.xml 的 XML 文件,存储在 galleon 子目录中。

使用 provisioning.xml 文件是 GALLEON_PROVISION_FEATURE_PACKSGALLEON_PROVISION_LAYERS 环境变量的替代选择。在 S2I 构建期间,provisioning.xml 文件用于调配自定义 EAP 服务器。

重要

在使用 GALLEON_PROVISION_LAYERS 环境变量时,不要创建自定义置备文件,因为这个环境变量会配置 S2I 构建过程以忽略该文件。

以下代码演示了自定义调配文件。

<?xml version="1.0" ?>
<installation xmlns="urn:jboss:galleon:provisioning:3.0">
    <feature-pack location="eap-s2i@maven(org.jboss.universe:s2i-universe)">1
        <default-configs inherit="false"/>2
        <packages inherit="false"/>3
    </feature-pack>
    <feature-pack location="org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT">4
        <default-configs inherit="false"/>
        <packages inherit="false"/>
    </feature-pack>
    <config model="standalone" name="standalone.xml">5
        <layers>
            <include name="jaxrs-server"/>
            <include name="mariadb-datasource"/>
        </layers>
    </config>
    <options>6
        <option name="optional-packages" value="passive+"/>
    </options>
</installation>
1
此元素指示调配流程调配当前的 eap-s2i 功能包。请注意,构建器镜像仅包含一个功能包。
2
此元素指示调配流程排除默认配置。
3
此元素指示调配流程排除默认软件包。
4
此元素指示调配过程调配 org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT 功能包。子元素指示进程排除默认配置和默认软件包。
5
此元素指示调配流程创建自定义单机配置。配置包括来自 org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT 功能包的 jaxrs-server 基础层和 mariadb-datasource 自定义层。
6
此元素指示调配流程以优化 JBoss EAP 模块的调配。

其他资源

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

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

  • 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 功能软件包存档文件。例如,在 path-to-repository/org/ examples/my-feature-pack/1.0.0.Final/my-feature-pack/1.0.0.Final/my-feature-pack-1.0.0.Final/my-feature-pack-1.0.0.Final.zip 路径中找到 org.examples: my-feature-pack-1.0.0

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

重要

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

其他资源

5.3.3. 自定义 Galleon 功能软件包环境变量

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

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

GALLEON_DIR=<path>

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

目录默认为 galleon

GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO=<path>

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

GALLEON_PROVISION_FEATURE_PACKS=<list_of_galleon_feature_packs>

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

您可以使用 GALLEON_PROVISION_LAYERS 环境变量来设置自定义功能包定义的 Galleon 层。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.