11.11. S2I
该镜像包括 S2I 脚本和 Maven。Maven 目前仅支持将应当部署到 OpenShift 上基于 JBoss EAP 的容器(或相关的/级镜像)的应用程序的构建工具。
目前只支持 WAR 部署。
11.11.1. 自定义配置 复制链接链接已复制到粘贴板!
可以为镜像添加自定义配置文件。放入 configuration/ 目录中的所有文件都将复制到 EAP_HOME/standalone/configuration/ 中。例如,要覆盖镜像中使用的默认配置,只需将自定义 standalone.xml 添加到 configuration/ 目录中。有关这样的部署,请参阅示例。
11.11.1.1. 自定义模块 复制链接链接已复制到粘贴板!
可以添加自定义模块。modules/ 目录中的所有文件将复制到 EAP_HOME/modules/ 中。有关这样的部署,请参阅示例。
11.11.2. Deployment Artifacts 复制链接链接已复制到粘贴板!
默认情况下,将部署源 target 目录中的工件。要从不同的目录部署,请在 BuildConfig 定义中设置 ARTIFACT_DIR 环境变量。ARTIFACT_DIR 是一个以逗号分隔的列表。例如: ARTIFACT_DIR=app1/target,app2/target,app3/target
11.11.3. 工件存储库镜像 复制链接链接已复制到粘贴板!
Maven 中的存储库包含各种类型的构建工件和依赖项,例如,所有项目 JAR、库 JAR、插件或任何其他项目特定工件。它还指定在执行 S2I 构建时下载工件的位置。除了使用中央存储库外,组织还会部署本地自定义镜像存储库是一种常见的做法。
使用镜像的好处包括:
- 同步镜像的可用性,其地理位置更接近且更快。
- 能够更好地控制存储库内容。
- 跨不同团队(开发人员、CI)共享工件,而无需依赖公共服务器和存储库。
- 改进了构建时间。
通常,存储库管理器可以充当镜像的本地缓存。假设存储库管理器已在 https://10.0.0.1:8443/repository/internal/ 部署并可访问,S2I 构建可以通过向应用的构建配置提供 MAVEN_MIRROR_URL 环境变量来使用该管理器,如下所示:
识别要针对应用
MAVEN_MIRROR_URL变量的构建配置的名称。oc get bc -o name buildconfig/eap
oc get bc -o name buildconfig/eapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
MAVEN_MIRROR_URL环境变量更新eap的构建配置。oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/" buildconfig "eap" updated
oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/" buildconfig "eap" updatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证设置。
oc env bc/eap --list # buildconfigs eap MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/
oc env bc/eap --list # buildconfigs eap MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 调度应用的新构建。
在应用构建过程中,您会注意到 Maven 依赖项是从存储库管理器拉取的,而不是从默认的公共存储库拉取。另外,在构建完成后,您会看到镜像已填充构建期间检索和使用的所有依赖项。
11.11.3.1. 安全工件存储库镜像 URL 复制链接链接已复制到粘贴板!
为了防止通过 Maven 存储库进行"man-in-the-middle"攻击,JBoss EAP 需要使用安全 URL 进行工件存储库镜像 URL。
URL 应该指定安全 http("https")和安全端口。
默认情况下,如果您指定了非安全 URL,则返回错误。您可以使用属性 -Dinsecure.repositories=WARN 来覆盖此行为。
11.11.4. 脚本 复制链接链接已复制到粘贴板!
run-
此脚本使用
openshift-launch.sh脚本,该脚本使用standalone.xml配置配置和启动 JBoss EAP。 assemble-
此脚本使用 Maven 构建源,创建软件包(WAR),并将它移到
EAP_HOME/standalone/deployments目录。
11.11.5. 自定义脚本 复制链接链接已复制到粘贴板!
您可以在启动 pod 时添加自定义脚本,然后再启动 JBoss EAP。
您可以在启动 pod 时添加有效的脚本,包括 CLI 脚本。
从镜像启动 JBoss EAP 时可使用两个选项,包括脚本:
- 挂载要作为 postconfigure.sh 执行的 configmap
- 在提名安装目录中添加一个 install.sh 脚本
11.11.5.1. 挂载 configmap 以执行自定义脚本 复制链接链接已复制到粘贴板!
当您要在运行时将自定义脚本挂载到现有镜像(换句话说,一个已构建的镜像)时,挂载 configmap。
挂载 configmap:
使用您要包含在 postconfigure.sh 中的内容创建 configmap。
例如,在项目根目录中创建一个名为
extensions的目录,使其包含postconfigure.sh和extensions.cli的脚本,并运行以下命令:oc create configmap jboss-cli --from-file=postconfigure.sh=extensions/postconfigure.sh --from-file=extensions.cli=extensions/extensions.cli
$ oc create configmap jboss-cli --from-file=postconfigure.sh=extensions/postconfigure.sh --from-file=extensions.cli=extensions/extensions.cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过部署控制器(dc)将 configmap 挂载到 pod 中。
oc set volume dc/eap-app --add --name=jboss-cli -m /opt/server/extensions -t configmap --configmap-name=jboss-cli --default-mode='0755' --overwrite
$ oc set volume dc/eap-app --add --name=jboss-cli -m /opt/server/extensions -t configmap --configmap-name=jboss-cli --default-mode='0755' --overwriteCopy to Clipboard Copied! Toggle word wrap Toggle overflow
postconfigure.sh 示例
#!/usr/bin/env bash set -x echo "Executing postconfigure.sh" $JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/extensions.cli
#!/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.xml :whoami quit
embed-server --std-out=echo --server-config=standalone.xml
:whoami
quit
11.11.5.2. 使用 install.sh 执行自定义脚本 复制链接链接已复制到粘贴板!
当您要在镜像构建时将脚本包含在镜像中时,请使用 install.sh。
使用 install.sh 执行自定义脚本:
-
在 s2i 构建期间使用的项目的 git 存储库中,创建名为
.s2i的目录。 在
s2i目录中,添加名为 environment 的文件,其内容如下:cat .s2i/environment CUSTOM_INSTALL_DIRECTORIES=extensions
$ cat .s2i/environment CUSTOM_INSTALL_DIRECTORIES=extensionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
创建名为
extensions的目录。 在
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
$ 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.cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 extensions 目录中,使用类似以下内容的内容创建 install.sh 文件(将占位符代码替换为适合您环境的相应代码):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.11.6. 环境变量 复制链接链接已复制到粘贴板!
您可以通过向 s2i build 命令提供环境变量来影响构建的执行方式。可以提供的环境变量有:
| 变量名称 | 描述 |
|---|---|
| ARTIFACT_DIR |
此目录中的
示例值: |
| ENABLE_GENERATE_DEFAULT_DATASOURCE |
可选。当包含在值 |
| GALLEON_PROVISION_LAYERS | 可选。指示 S2I 流程调配指定的层。该值是一个要调配的、以逗号分隔的层列表,包括一个基础层和任意数量的 decorator 层。
示例值: |
| GALLEON_PROVISION_CHANNELS |
这是以逗号分隔的 JBoss EAP 频道清单列表。JBoss EAP 频道清单通过 注意
版本是可选的,这意味着将检索最新的频道清单。对于 JBoss EAP 8.0,请使用此频道 |
| GALLEON_PROVISION_FEATURE_PACKS |
构建环境变量,为您的 S2I 镜像指定自定义 Galleon 功能 pack。例如: 注意
当您设置 |
| HTTP_PROXY_HOST | 用于 Maven 的 HTTP 代理的主机名或 IP 地址。
示例值: |
| HTTP_PROXY_PORT | 用于 Maven 的 HTTP 代理的 TCP 端口。
示例值: |
| HTTP_PROXY_USERNAME |
如果提供给
示例值: |
| HTTP_PROXY_PASSWORD |
如果由
示例值: |
| HTTP_PROXY_NONPROXYHOSTS | 如果提供,配置的 HTTP 代理将忽略这些主机。
示例值: |
| MAVEN_ARGS | 覆盖在构建期间提供给 Maven 的参数。
示例值: |
| MAVEN_ARGS_APPEND | 在构建期间附加提供给 Maven 的用户参数。
示例值: |
| MAVEN_MIRROR_URL | 用于配置 Maven Mirror/repository Manager 的 URL。
示例值: 请注意,指定的 URL 应安全。详情请参阅 安全工件存储库镜像 URL。 |
| MAVEN_CLEAR_REPO | (可选)在构建后清除本地 Maven 存储库。 如果镜像中存在的服务器与本地缓存高度耦合,则不会删除缓存并输出警告。
示例 value: |
| APP_DATADIR | 如果定义,则复制数据文件的源中的目录。
示例值: |
| DATA_DIR |
复制
示例值: |
如需更多信息,请参阅在 OpenShift Container Platform 上构建并运行 JBoss EAP 应用程序,它使用 Maven 和 JBoss EAP 中包含的 S2I 脚本用于 OpenShift 镜像。