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
  2. 使用 MAVEN_MIRROR_URL 环境变量更新 eap 的构建配置。

    oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/"
    buildconfig "eap" updated
  3. 验证设置。

    oc env bc/eap --list
    # buildconfigs eap
    MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/
  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
  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

postconfigure.sh 示例

#!/usr/bin/env bash
set -x
echo "Executing postconfigure.sh"
$JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/extensions.cli

extensions.cli 示例

embed-server --std-out=echo  --server-config=standalone-openshift.xml
:whoami
quit

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

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

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

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

    $ cat .s2i/environment
    CUSTOM_INSTALL_DIRECTORIES=extensions
  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
  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

8.13.6. 环境变量

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

表 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 脚本。