8.13. S2I


该镜像包括 S2I 脚本和 Maven。

Maven 目前仅支持将应当部署到 OpenShift 上基于 JBoss EAP 的容器(或相关的/级镜像)的应用程序的构建工具。

目前只支持 WAR 部署。

8.13.1. 自定义配置

可以为镜像添加自定义配置文件。放入 configuration/ 目录的所有文件都将复制到 EAP_HOME/standalone/configuration/ 中。例如,要覆盖镜像中使用的默认配置,只需将自定义 standalone-openshift.xml 添加到 configuration/ 目录中。有关这样的部署,请参阅示例

8.13.1.1. 自定义模块

可以添加自定义模块。modules/ 目录中的所有文件将复制到 EAP_HOME/modules/ 中。有关这样的部署,请参阅示例

8.13.2. Deployment Artifacts

默认情况下,将部署源 target 目录中的工件。要从不同的目录部署,请在 BuildConfig 定义中设置 ARTIFACT_DIR 环境变量。ARTIFACT_DIR 是以逗号分隔的列表。例如: ARTIFACT_DIR=app1/target,app2/target,app3/target

8.13.3. artifact Repository Mirrors

Maven 中的存储库包含各种类型的构建工件和依赖项,如项目 JAR、库 JAR、插件或任何其他项目特定的工件。它还指定在执行 S2I 构建时从哪里下载工件的位置。除了使用中央存储库外,组织也是一种常见做法,部署本地自定义镜像存储库。

使用镜像的好处有:

  • 同步镜像的可用性,这种镜像更为严格且更快。
  • 能够对存储库内容有更大的控制。
  • 可能会在不同的团队(developers、CI)共享工件,而无需依赖公共服务器和存储库。
  • 改进构建时间。

通常,存储库管理器可以充当镜像的本地缓存。假设存储库管理器已经在 https://10.0.0.1:8443/repository/internal/ 进行了部署并可访问,然后 S2I 构建可以通过向应用程序的构建配置提供 MAVEN_MIRROR_URL 环境变量来使用此管理器:

  1. 识别构建配置的名称,以应用 MAVEN_MIRROR_URL 变量。

    oc get bc -o name
    buildconfig/eap
    Copy to Clipboard Toggle word wrap
  2. 使用 MAVEN_MIRROR_URL 环境变量更新 eap 的构建配置。

    oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/"
    buildconfig "eap" updated
    Copy to Clipboard Toggle word wrap
  3. 验证设置。

    oc env bc/eap --list
    # buildconfigs eap
    MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/
    Copy to Clipboard Toggle word wrap
  4. 调度应用的新构建。
注意

在应用构建期间,您将注意到从存储库管理器中提取 Maven 依赖项,而不是默认的公共存储库。另外,在构建完成后,您会看到镜像已填充并在构建期间使用的所有依赖项。

8.13.3.1. 安全 Artifact Repository Mirror URL

为了防止通过 Maven 存储库进行"man-in-the-middle"攻击,JBoss EAP 需要使用安全 URL 进行工件存储库镜像 URL。

URL 应该指定安全 http("https")和安全端口。

默认情况下,如果指定未安全 URL,将返回错误。您可以使用属性 -Dinsecure.repositories=WARN 覆盖此行为。

8.13.4. 脚本

run
此脚本使用 openshift-launch.sh 脚本,该脚本使用 standalone-openshift.xml 配置配置和启动 JBoss EAP。
assemble
此脚本使用 Maven 构建源,创建软件包(WAR),并将它移到 EAP_HOME/standalone/deployments 目录。

8.13.5. 自定义脚本

您可以在启动 pod 时添加自定义脚本,然后再启动 JBoss EAP。

您可以在启动 pod 时添加有效的脚本,包括 CLI 脚本。

从镜像启动 JBoss EAP 时可使用两个选项,包括脚本:

  • 挂载要作为 postconfigure.sh 执行的 configmap
  • 在提名安装目录中添加一个 install.sh 脚本

8.13.5.1. 挂载 configmap 以执行自定义脚本

在要在运行时将自定义脚本挂载到现有镜像(换句话说,已构建的镜像)时,挂载 configmap。

挂载 configmap:

  1. 使用您要包含在 postconfigure.sh 中的内容创建 configmap。

    例如,在项目根目录中创建一个名为 extensions 的目录,使其包含脚本 postconfigure.shextensions.cli,再运行以下命令:

    $ oc create configmap jboss-cli --from-file=postconfigure.sh=extensions/postconfigure.sh --from-file=extensions.cli=extensions/extensions.cli
    Copy to Clipboard Toggle word wrap
  2. 通过部署控制器(dc)将 configmap 挂载到 pod。

    $ oc set volume dc/eap-app --add --name=jboss-cli -m /opt/eap/extensions -t configmap --configmap-name=jboss-cli --default-mode='0755' --overwrite
    Copy to Clipboard Toggle word wrap

postconfigure.sh 示例

#!/usr/bin/env bash
set -x
echo "Executing postconfigure.sh"
$JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/extensions.cli
Copy to Clipboard Toggle word wrap

extensions.cli 示例

embed-server --std-out=echo  --server-config=standalone-openshift.xml
:whoami
quit
Copy to Clipboard Toggle word wrap

8.13.5.2. 使用 install.sh 执行自定义脚本

当您要在镜像构建时将脚本包含在镜像中时,请使用 install.sh。

使用 install.sh 执行自定义脚本:

  1. 在 s2i 构建期间使用的项目的 git 存储库中,创建名为 .s2i 的目录。
  2. s2i 目录中添加一个名为 environment 的文件,其内容如下:

    $ cat .s2i/environment
    CUSTOM_INSTALL_DIRECTORIES=extensions
    Copy to Clipboard Toggle word wrap
  3. 创建名为 extensions 的目录。
  4. extensions 目录中,使用类似以下内容的内容创建文件 postconfigure.sh(将占位符代码替换为适用于环境的相应代码):

    $ cat extensions/postconfigure.sh
    #!/usr/bin/env bash
    echo "Executing patch.cli"
    $JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/some-cli-example.cli
    Copy to Clipboard Toggle word wrap
  5. 在 extensions 目录中,使用类似以下内容的内容创建 install.sh 文件(使用适合您的环境的代码替换占位符代码):

    $ cat extensions/install.sh
    #!/usr/bin/env bash
    set -x
    echo "Running $PWD/install.sh"
    injected_dir=$1
    # copy any needed files into the target build.
    cp -rf ${injected_dir} $JBOSS_HOME/extensions
    Copy to Clipboard Toggle word wrap

8.13.6. 环境变量

您可以通过向 s2i build 命令提供环境变量来影响构建的执行方式。可以提供的环境变量有:

Expand
表 8.8. s2i 环境变量
变量名称描述

ARTIFACT_DIR

来自该目录的 .war.ear.jar 文件将复制到 deployments/ 目录中。

示例值: target

ENABLE_GENERATE_DEFAULT_DATASOURCE

可选。当包含值 true 时,服务器将使用默认数据源进行调配。否则,不包含默认的数据源。

GALLEON_PROVISION_DEFAULT_FAT_SERVER

可选。在值 true 中包含并且未设置 galleon 层时,会置备默认的 JBoss EAP 服务器。

GALLEON_PROVISION_LAYERS

可选。指示 S2I 进程置备指定的层。值是要调配的以逗号分隔的层列表,包括一个基础层和任意数量的 decorator 层。

示例值: jaxrs、sso

HTTP_PROXY_HOST

用于 Maven 的 HTTP 代理的主机名或 IP 地址。

示例值: 192.168.1.1

HTTP_PROXY_PORT

用于 Maven 的 HTTP 代理的 TCP 端口。

示例值: 8080

HTTP_PROXY_USERNAME

如果提供给 HTTP_PROXY_PASSWORD,请为 HTTP 代理使用凭证。

示例值: myusername

HTTP_PROXY_PASSWORD

如果由 HTTP_PROXY_USERNAME 提供,请为 HTTP 代理使用凭证。

示例值: mypassword

HTTP_PROXY_NONPROXYHOSTS

如果提供,配置的 HTTP 代理将忽略这些主机。

示例值: some.example.org|*.example.net

MAVEN_ARGS

覆盖在构建期间提供给 Maven 的参数。

示例值: -e -Popenshift -DskipTests -Dcom.redhat.xpaas.repo.redhatga 软件包

MAVEN_ARGS_APPEND

在构建期间附加提供给 Maven 的用户参数。

示例值: -Dfoo=bar

MAVEN_MIRROR_URL

用于配置 Maven Mirror/repository Manager 的 URL。

示例值: https://10.0.0.1:8443/repository/internal/

请注意,指定的 URL 应安全。详情请查看 第 8.13.3.1 节 “安全 Artifact Repository Mirror URL”

MAVEN_CLEAR_REPO

(可选)在构建后清除本地 Maven 存储库。

如果镜像中存在的服务器与本地缓存强结合,则不会删除缓存,并打印警告。

示例值: true

APP_DATADIR

如果定义,则源中的目录从其中复制数据文件。

示例值 :mydata

DATA_DIR

复制 $APP_DATADIR 的镜像中数据的目录。

示例值: EAP_HOME/data

注意

如需更多信息,请参阅 OpenShift 镜像在 JBoss EAP 上构建并运行 Java 应用,它使用 Maven 和包含在 OpenShift 镜像的 JBoss EAP 中的 S2I 脚本。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat