×

Source-to-image (S2I) 构建器镜像包含组装和运行脚本,但这些脚本的默认行为并不适合所有用户。您可以自定义包含默认脚本的 S2I 构建器的行为。

调用嵌入在镜像中的脚本

构建器镜像提供其自身版本的 source-to-image (S2I) 脚本,涵盖最常见的用例。如果这些脚本不能满足您的需求,S2I 提供了一种通过在 .s2i/bin 目录中添加自定义脚本来覆盖它们的方法。但是,这样做会完全替换标准脚本。在某些情况下,替换脚本是可以接受的,但在其他情况下,您可以运行一些命令在脚本之前或之后运行,同时保留镜像中提供的脚本的逻辑。要重用标准脚本,您可以创建一个包装器脚本,该脚本运行自定义逻辑并将进一步的工作委托给镜像中的默认脚本。

步骤
  1. 查看 io.openshift.s2i.scripts-url 标签的值以确定构建器镜像内脚本的位置。

    $ podman inspect --format='{{ index .Config.Labels "io.openshift.s2i.scripts-url" }}' wildfly/wildfly-centos7
    示例输出
    image:///usr/libexec/s2i

    您检查了 wildfly/wildfly-centos7 构建器镜像,并发现脚本位于 /usr/libexec/s2i 目录中。

  2. 创建一个脚本,其中包含用其他命令包装的标准脚本之一的调用。

    .s2i/bin/assemble 脚本
    #!/bin/bash
    echo "Before assembling"
    
    /usr/libexec/s2i/assemble
    rc=$?
    
    if [ $rc -eq 0 ]; then
        echo "After successful assembling"
    else
        echo "After failed assembling"
    fi
    
    exit $rc

    此示例显示了一个自定义 assemble 脚本,它打印消息,运行镜像中的标准 assemble 脚本,并根据 assemble 脚本的退出代码打印另一条消息。

    包装 run 脚本时,必须使用 exec 调用它以确保正确处理信号。使用 exec 还会排除在调用默认镜像 run 脚本后运行其他命令的能力。

    .s2i/bin/run 脚本
    #!/bin/bash
    echo "Before running application"
    exec /usr/libexec/s2i/run