1.2. 创建 Source-to-image 构建


您可以创建 Source-to-image 构建,并将创建的镜像推送到自定义 Quay 存储库。

先决条件

  • 您已在 OpenShift Container Platform 集群中安装了 Red Hat OpenShift Operator 的构建。
  • 已安装 oc CLI。
  • 可选: 已安装 shp CLI

步骤

  1. 创建 Build 资源,并使用其中一个 CLI 将它应用到 OpenShift Container Platform 集群:

    示例: 使用 oc CLI

    $ oc apply -f - <<EOF
    apiVersion: shipwright.io/v1beta1
    kind: Build
    metadata:
      name: s2i-nodejs-build
    spec:
      source: 1
        type: Git
        git:
          url: https://github.com/redhat-openshift-builds/samples
        contextDir: s2i-build/nodejs
      strategy: 2
        name: source-to-image
        kind: ClusterBuildStrategy
      paramValues: 3
      - name: builder-image
        value: quay.io/centos7/nodejs-12-centos7:master
      output:
        image: quay.io/<repo>/s2i-nodejs-example 4
        pushSecret: registry-credential 5
    EOF
    Copy to clipboard

    1
    源代码所在的位置。
    2
    用于构建容器的构建策略。
    3
    构建策略中定义的参数。要设置 builder-image 策略参数的值,请指定构建输出镜像所需的构建器镜像位置。
    4
    推送镜像的位置。您可以将构建镜像推送到自定义 Quay.io 存储库。使用有效的 Quay.io 机构或 Quay 用户名替换 repo
    5
    存储用于推送容器镜像的凭证的 secret 名称。要为身份验证生成类型为 docker-registry 的 secret,请参阅 "Authentication to container registries"。

    示例: 使用 shp CLI

    $ shp build create s2i-nodejs-build \
    --source-url="https://github.com/redhat-openshift-builds/samples" --source-context-dir="s2i-build/nodejs" \1
    --strategy-name="source-to-image" \2
    --builder-image="quay.io/centos7/nodejs-12-centos7" \3
    --output-image="quay.io/<repo>/s2i-nodejs-example" \4
    --output-credentials-secret="registry-credential" 5
    Copy to clipboard

    1
    源代码所在的位置。
    2
    用于构建容器的构建策略。
    3
    构建策略中定义的参数。要设置 builder-image 策略参数的值,请指定构建输出镜像所需的构建器镜像位置。
    4
    推送镜像的位置。您可以将构建镜像推送到自定义 Quay.io 存储库。使用有效的 Quay.io 机构或 Quay 用户名替换 repo
    5
    存储用于推送容器镜像的凭证的 secret 名称。要为身份验证生成类型为 docker-registry 的 secret,请参阅 "Authentication to container registries"。
  2. 使用其中一个 CLI 检查是否创建了 Build 资源:

    示例: 使用 oc CLI

    $ oc get builds.shipwright.io s2i-nodejs-build
    Copy to clipboard

    示例: 使用 shp CLI

    $ shp build list
    Copy to clipboard

  3. 创建 BuildRun 资源,并使用其中一个 CLI 将它应用到 OpenShift Container Platform 集群:

    示例: 使用 oc CLI

    $ oc apply -f - <<EOF
    apiVersion: shipwright.io/v1beta1
    kind: BuildRun
    metadata:
      name: s2i-nodejs-buildrun
    spec:
      build:
        name: s2i-nodejs-build 1
    EOF
    Copy to clipboard

    1
    spec.build.name 字段表示要运行的相应构建,该构建应该在同一个命名空间中可用。

    示例: 使用 shp CLI

    $ shp build run s2i-nodejs-build --follow 1
    Copy to clipboard

    1
    可选:通过使用- follow 标志,您可以在输出结果中查看构建日志。
  4. 运行以下命令之一检查 BuildRun 资源是否已创建:

    示例: 使用 oc CLI

    $ oc get buildrun s2i-nodejs-buildrun
    Copy to clipboard

    示例: 使用 shp CLI

    $ shp buildrun list
    Copy to clipboard

    BuildRun 资源创建一个 TaskRun 资源,然后创建 Pod 来执行构建策略步骤。

验证

  1. 所有容器完成其任务后,验证以下内容:

    • 检查 pod 是否显示 STATUS 字段为 Completed

      $ oc get pods -w
      Copy to clipboard

      输出示例

      NAME                                READY   STATUS     RESTARTS   AGE
      s2i-nodejs-buildrun-phxxm-pod       2/2     Running    0          10s
      s2i-nodejs-buildrun-phxxm-pod       1/2     NotReady   0          14s
      s2i-nodejs-buildrun-phxxm-pod       0/2     Completed  0          2m
      Copy to clipboard

    • 检查对应的 TaskRun 资源是否显示 SUCCEEDED 字段为 True

      $ oc get tr
      Copy to clipboard

      输出示例

      NAME                           SUCCEEDED  REASON     STARTTIME   COMPLETIONTIME
      s2i-nodejs-buildrun-phxxm      True       Succeeded  2m39s        13s
      Copy to clipboard

    • 检查对应的 BuildRun 资源是否将 SUCCEEDED 字段显示为 True

      $ oc get br
      Copy to clipboard

      输出示例

      NAME                     SUCCEEDED   REASON       STARTTIME     COMPLETIONTIME
      s2i-nodejs-buildrun      True        Succeeded    2m41s           15s
      Copy to clipboard

      在验证过程中,如果构建失败,您可以检查 BuildRun 资源中的 status.failureDetails 字段,以识别 pod 或容器中故障的确切点。

      注意

      pod 可能会切换到 NotReady 状态,因为其中一个容器完成了其任务。这是预期的行为。

  2. 验证镜像是否已推送到 build.spec.output.image 字段中指定的 registry。在登录到 registry 后,您可以尝试拉取镜像:

    $ podman pull quay.io/<repo>/<image> 1
    Copy to clipboard
    1
    创建 Build 资源时使用的存储库名称和镜像名称。例如,您可以使用 s2i-nodejs-example 作为镜像名称。

1.2.1. 在网络限制环境中创建 Source-to-image 构建

您可以通过镜像 Source-to-image 构建策略,在网络限制环境中创建 Source-to-image 构建。

先决条件

  • 集群可以连接并与可用于创建 Source-to-image 构建的 git 源进行交互。
  • 您有在本地 registry 中创建 source-to-image 构建所需的 builder-to-image。如果您在本地 registry 中没有 builder-image,则镜像源镜像。

步骤

  1. 运行以下命令镜像 source-to-image 构建策略所需的镜像:

    $ oc image mirror --insecure -a <registry_authentication> registry.redhat.io/source-to-image/source-to-image-rhel8@sha256:d041c1bbe503d152d0759598f79802e257816d674b342670ef61c6f9e6d401c5 <mirror_registry>/<repo>/source-to-image-source-to-image-rhel8
    Copy to clipboard
  2. 执行"创建 source-to-image 构建"部分中所述的步骤。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.