您可以在自定义归档中包含shell脚本,以便在 Maximo® Manage 构建过程中执行高级自定义操作。 Shell脚本允许您为诸如添加字体和在Liberty服务器目录内移动文件等任务注入自定义逻辑。
开始之前
在将 shell 脚本包含到自定义存档之前:
- 理解 Maximo Manage 的构建流程,以及何时需要运行您的脚本。
- 创建执行所需自定义操作的Shell脚本。
- 请根据目录结构要求整理您的脚本。
- 确保脚本根据其运行位置使用适当的绝对路径或相对路径。
- 将您的脚本打包成自定义存档(ZIP文件)。
有关自定义存档的一般信息,请参阅《 自定义存档指南》。
关于本任务
当您需要应用在管理更新和补丁发布中持续生效的自定义设置时,可将 shell 脚本包含在自定义归档文件中。 这些脚本会在构建过程中自动运行,无需在每次更新后手动重新应用自定义设置。
自定义存档工具已得到增强,支持在构建过程的特定阶段运行自定义脚本:
- 在管理构建阶段修改maxinst映像和服务器包Java应用程序归档文件。
- 在服务器软件包构建阶段修改服务器软件包映像。
自定义存档中常用到shell脚本的典型场景包括:
- 添加自定义字体以支持国际化和专业化报告。
- 在不改变自定义设置的情况下,对开箱即用的文件进行修改,而无需在每次更新后重新调整。
- 将文件(如JMS提供商jar文件)迁移至特定的Liberty服务器目录。
过程
- 在您的自定义存档中创建所需的目录结构。
您的自定义存档必须遵循以下目录结构:
customization-archive.zip
└── additional-server-files/
└── scripts/
├── admin-build/ # Scripts for maxinst image customization
│ ├── 1_script_name.sh
│ ├── 2_script_name.sh
│ └── ...
└── bundle-build/ # Common scripts for server bundle customization (Runs for all bundles)
├── 1_script_name.sh
├── 2_script_name.sh
├── foundation/ # Foundation-specific scripts
│ ├── 1_script_name.sh
│ └── ...
├── mea/ # MEA-specific scripts
│ └── ...
├── ui/ # UI-specific scripts
│ └── ...
└── report/ # Report-specific scripts
└── ...
注: 上述使用的捆绑包类型(foundation、mea、ui、report)仅为示例。 该功能适用于管理界面中的所有捆绑包类型。
脚本在两个主要构建阶段运行:
- 管理构建阶段 (additional-server-files/scripts/admin-build/):
- 此目录中的脚本在maxinst映像构建过程中运行,具体是在自定义存档解压之后。
- 在需要修改文件但尚未构建服务器封装应用程序包(EAR或WAR文件)时使用此阶段。
- 打包构建阶段 (additional-server-files/scripts/bundle-build/):
- 此目录中的脚本在服务器包映像构建过程中运行,位于额外服务器文件复制到 /managefiles/additional-server-files/. 之后。
- 当需要修改服务器捆绑映像本身时,请使用此阶段。
- 常见用途包括:
- 向服务器包添加字体和资源。
- 修改服务器捆绑映像中的文件。
- 安装特定于该软件包的依赖项。
- 通用脚本(在 bundle-build/)适用于所有包类型。
- 特定于捆绑包的脚本(位于 bundle-build/⟨bundle-type⟩/)仅在通用脚本之后,针对其对应的捆绑包类型运行。
重要提示: 所有脚本均以root用户身份运行。 在脚本中包含任何用户变更或权限变更命令。
- 使用数字前缀为脚本命名以控制执行顺序。
脚本按字母数字顺序运行,并采用版本排序:
- 1_first_script.sh - 优先运行。
- 2_second_script.sh - 位居第二。
要点:
- 同一路径下的所有脚本按字母数字顺序运行。
- 失败需要通过非零返回码进行报告。 如果任何脚本未返回0,则构建失败。 由于使用此功能会改变构建过程,因此确保脚本正确运行至关重要。
- 使用一致的数字前缀以保持清晰的执行顺序,尤其当脚本存在依赖关系时。
- 使用多个自定义存档时,所有存档将首先被解压,随后所有脚本将按版本排序顺序在所有存档中依次运行。
- 根据您的定制需求,编写包含相应命令的Shell脚本。
以下场景展示了常见的使用情况。
此方案支持使用自定义字体显示报告和工作流可视化内容。
将脚本放置在 /additional-server-files/scripts/bundle-build/. 中。
归档结构:
font-customization.zip
└── additional-server-files/
├── scripts/
│ └── bundle-build/
│ ├── 1_add_font.sh
│ └── fonts/
│ └── Roboto-Black.ttf
示例脚本(1_add_font.sh):
#!/bin/bash
echo "Adding custom font to server bundle"
# Create fonts directory
mkdir -p /usr/share/fonts/
# Copy font file
cp /managefiles/additional-server-files/scripts/bundle-build/fonts/Roboto-Black.ttf /usr/share/fonts/
# Set appropriate permissions (scripts run as root user)
chmod 755 /usr/share/fonts/Roboto-Black.ttf
# Update font cache
fc-cache /usr/share/fonts/
echo "Font successfully added"
示例 2:自定义 web.xml 元素此方案支持自定义 web.xml 元素,并将其与现有 web.xml 文件合并,且在产品更新或升级后无需重新应用。
创建一个包含XML合并/修改命令的shell脚本,并将其放置在 /additional-server-files/scripts/admin-build/.中。
该 web.xml 文件是Java应用程序归档文件(WAR文件)的一部分,该文件是在管理构建阶段创建的。 必须在构建服务器捆绑应用程序包之前进行修改。
示例 3:迁移服务器文件此方案允许您将附加服务器文件从Liberty服务器的根目录移动到Liberty服务器目录内的其他指定位置,例如 JVM 提供程序JAR文件的位置。
创建一个包含该 mv 命令的shell脚本,并将其放置在 /additional-server-files/scripts/admin-build/。
在构建服务器包映像之前移动文件,确保应用程序启动时文件位于正确位置。
- 将脚本及所有必需文件打包成ZIP压缩包。
确保归档文件中的目录结构保持完整。
- 配置您的 Maximo Manage 部署以使用自定义存档。
在配置服务器软件包时,请提供自定义存档的 URL 和凭据。 有关更多信息,请参阅
添加自定义内容。
结果
当部署 Maximo Manage 时,您的 shell 脚本会在相应的构建阶段自动运行,将您的自定义设置应用到应用程序中。
后续操作
如果脚本在构建过程中失败,您可以通过检查以下内容来确定失败原因:
- ManageBuild 的CR状态部分包含一条简短的错误信息,用于指示哪个脚本失败。
- ManageWorkspace 的CR状态部分,用于显示整体管理操作员状态及任何错误信息。
- 请查看各自失败构建Pod的日志以获取详细错误信息。
有关构建流程和重要注意事项的更多信息,请参阅《 构建流程和 shell 脚本注意事项 》。