执行自定义shell脚本

您可以在自定义归档中包含shell脚本,以便在 Maximo® Manage 构建过程中执行高级自定义操作。 Shell脚本允许您为诸如添加字体和在Liberty服务器目录内移动文件等任务注入自定义逻辑。

开始之前

在将 shell 脚本包含到自定义存档之前:

  1. 理解 Maximo Manage 的构建流程,以及何时需要运行您的脚本。
  2. 创建执行所需自定义操作的Shell脚本。
  3. 请根据目录结构要求整理您的脚本。
  4. 确保脚本根据其运行位置使用适当的绝对路径或相对路径。
  5. 将您的脚本打包成自定义存档(ZIP文件)。

有关自定义存档的一般信息,请参阅《 自定义存档指南》。

关于本任务

当您需要应用在管理更新和补丁发布中持续生效的自定义设置时,可将 shell 脚本包含在自定义归档文件中。 这些脚本会在构建过程中自动运行,无需在每次更新后手动重新应用自定义设置。

自定义存档工具已得到增强,支持在构建过程的特定阶段运行自定义脚本:

  • 在管理构建阶段修改maxinst映像和服务器包Java应用程序归档文件。
  • 在服务器软件包构建阶段修改服务器软件包映像。

自定义存档中常用到shell脚本的典型场景包括:

  • 添加自定义字体以支持国际化和专业化报告。
  • 在不改变自定义设置的情况下,对开箱即用的文件进行修改,而无需在每次更新后重新调整。
  • 将文件(如JMS提供商jar文件)迁移至特定的Liberty服务器目录。

过程

  1. 在您的自定义存档中创建所需的目录结构。

    您的自定义存档必须遵循以下目录结构:

    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)仅为示例。 该功能适用于管理界面中的所有捆绑包类型。

    脚本在两个主要构建阶段运行:

    1. 管理构建阶段 (additional-server-files/scripts/admin-build/):
      • 此目录中的脚本在maxinst映像构建过程中运行,具体是在自定义存档解压之后。
      • 在需要修改文件但尚未构建服务器封装应用程序包(EAR或WAR文件)时使用此阶段。
    2. 打包构建阶段 (additional-server-files/scripts/bundle-build/):
      • 此目录中的脚本在服务器包映像构建过程中运行,位于额外服务器文件复制到 /managefiles/additional-server-files/. 之后。
      • 当需要修改服务器捆绑映像本身时,请使用此阶段。
      • 常见用途包括:
        • 向服务器包添加字体和资源。
        • 修改服务器捆绑映像中的文件。
        • 安装特定于该软件包的依赖项。
      • 通用脚本(在 bundle-build/)适用于所有包类型。
      • 特定于捆绑包的脚本(位于 bundle-build/⟨bundle-type⟩/)仅在通用脚本之后,针对其对应的捆绑包类型运行。
    重要提示: 所有脚本均以root用户身份运行。 在脚本中包含任何用户变更或权限变更命令。
  2. 使用数字前缀为脚本命名以控制执行顺序。

    脚本按字母数字顺序运行,并采用版本排序:

    • 1_first_script.sh - 优先运行。
    • 2_second_script.sh - 位居第二。
    要点:
    • 同一路径下的所有脚本按字母数字顺序运行。
    • 失败需要通过非零返回码进行报告。 如果任何脚本未返回0,则构建失败。 由于使用此功能会改变构建过程,因此确保脚本正确运行至关重要。
    • 使用一致的数字前缀以保持清晰的执行顺序,尤其当脚本存在依赖关系时。
    • 使用多个自定义存档时,所有存档将首先被解压,随后所有脚本将按版本排序顺序在所有存档中依次运行。
  3. 根据您的定制需求,编写包含相应命令的Shell脚本。

    以下场景展示了常见的使用情况。

    示例 1:向服务器捆绑 pod 添加字体

    此方案支持使用自定义字体显示报告和工作流可视化内容。

    将脚本放置在 /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/

    在构建服务器包映像之前移动文件,确保应用程序启动时文件位于正确位置。

  4. 将脚本及所有必需文件打包成ZIP压缩包。
    确保归档文件中的目录结构保持完整。
  5. 配置您的 Maximo Manage 部署以使用自定义存档。
    在配置服务器软件包时,请提供自定义存档的 URL 和凭据。 有关更多信息,请参阅添加自定义内容

结果

当部署 Maximo Manage 时,您的 shell 脚本会在相应的构建阶段自动运行,将您的自定义设置应用到应用程序中。

后续操作

如果脚本在构建过程中失败,您可以通过检查以下内容来确定失败原因:

  1. ManageBuild 的CR状态部分包含一条简短的错误信息,用于指示哪个脚本失败。
  2. ManageWorkspace 的CR状态部分,用于显示整体管理操作员状态及任何错误信息。
  3. 请查看各自失败构建Pod的日志以获取详细错误信息。

有关构建流程和重要注意事项的更多信息,请参阅《 构建流程和 shell 脚本注意事项 》。