1.2. 创建 Source-to-image 构建


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

先决条件

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

流程

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

    示例: 使用 oc CLI

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

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

    示例:使用 shp CLI

    $ shp build create s2i-nodejs-build \
    --source-url="https://github.com/shipwright-io/sample-nodejs" --source-context-dir="source-build" \
    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 Toggle word wrap

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

    示例: 使用 oc CLI

    $ oc get builds.shipwright.io s2i-nodejs-build
    Copy to Clipboard Toggle word wrap

    示例:使用 shp CLI

    $ shp build list
    Copy to Clipboard Toggle word wrap

  3. 使用其中一个 CLI 创建 BuildRun 资源并将其应用到 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 Toggle word wrap

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

    示例:使用 shp CLI

    $ shp build run s2i-nodejs-build --follow 
    1
    Copy to Clipboard Toggle word wrap

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

    示例: 使用 oc CLI

    $ oc get buildrun s2i-nodejs-buildrun
    Copy to Clipboard Toggle word wrap

    示例:使用 shp CLI

    $ shp buildrun list
    Copy to Clipboard Toggle word wrap

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

验证

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

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

      $ oc get pods -w
      Copy to Clipboard Toggle word wrap

      输出示例

      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 Toggle word wrap

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

      $ oc get tr
      Copy to Clipboard Toggle word wrap

      输出示例

      NAME                           SUCCEEDED  REASON     STARTTIME   COMPLETIONTIME
      s2i-nodejs-buildrun-phxxm      True       Succeeded  2m39s        13s
      Copy to Clipboard Toggle word wrap

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

      $ oc get br
      Copy to Clipboard Toggle word wrap

      输出示例

      NAME                     SUCCEEDED   REASON       STARTTIME     COMPLETIONTIME
      s2i-nodejs-buildrun      True        Succeeded    2m41s           15s
      Copy to Clipboard Toggle word wrap

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

      注意

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

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

    $ podman pull quay.io/<repo>/<image> 
    1
    Copy to Clipboard Toggle word wrap
    1
    创建 Build 资源时使用的存储库名称和镜像名称。例如,您可以使用 s2i-nodejs-example 作为镜像名称。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat