使用构建


builds for Red Hat OpenShift 1.1

使用构建

Red Hat OpenShift Documentation Team

摘要

本文档提供了使用构建的过程示例。

第 1 章 运行构建

安装构建后,您可以创建 buildahsource-to-image 构建以供使用。您还可以删除构建不需要的自定义资源。

1.1. 创建 buildah 构建

您可以创建 buildah 构建,并将创建的镜像推送到目标 registry。

先决条件

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

流程

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

    示例: 使用 oc CLI

    $ oc apply -f - <<EOF
    apiVersion: shipwright.io/v1beta1
    kind: Build
    metadata:
      name: buildah-golang-build
    spec:
      source: 
    1
    
        type: Git
        git:
          url: https://github.com/shipwright-io/sample-go
        contextDir: docker-build
      strategy: 
    2
    
        name: buildah
        kind: ClusterBuildStrategy
      paramValues: 
    3
    
      - name: dockerfile
        value: Dockerfile
      output: 
    4
    
        image: image-registry.openshift-image-registry.svc:5000/buildah-example/sample-go-app
    EOF
    Copy to Clipboard Toggle word wrap

    1
    源代码所在的位置。
    2
    用于构建容器的构建策略。
    3
    构建策略中定义的参数。要设置 dockerfile strategy 参数的值,请指定构建输出镜像所需的 Dockerfile 位置。
    4
    推送镜像的位置。在这个过程示例中,构建的镜像被推送到 OpenShift Container Platform 集群内部 registry。buildah-example 是当前项目的名称。确保存在指定的项目,以允许镜像推送。

    示例: 使用 shp CLI

    $ shp build create buildah-golang-build \
    --source-url="https://github.com/redhat-openshift-builds/samples" --source-context-dir="buildah-build" \
    1
    
    --strategy-name="buildah" \
    2
    
    --dockerfile="Dockerfile" \
    3
    
    --output-image="image-registry.openshift-image-registry.svc:5000/buildah-example/go-app" 
    4
    Copy to Clipboard Toggle word wrap

    1
    源代码所在的位置。
    2
    用于构建容器的构建策略。
    3
    构建策略中定义的参数。要设置 dockerfile strategy 参数的值,请指定构建输出镜像所需的 Dockerfile 位置。
    4
    推送镜像的位置。在这个过程示例中,构建的镜像被推送到 OpenShift Container Platform 集群内部 registry。buildah-example 是当前项目的名称。确保存在指定的项目,以允许镜像推送。
  2. 使用其中一个 CLI 检查是否创建了 Build 资源:

    示例: 使用 oc CLI

    $ oc get builds.shipwright.io buildah-golang-build
    Copy to Clipboard Toggle word wrap

    示例: 使用 shp CLI

    $ shp build list
    Copy to Clipboard Toggle word wrap

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

    示例: 使用 oc CLI

    $ oc apply -f - <<EOF
    apiVersion: shipwright.io/v1beta1
    kind: BuildRun
    metadata:
      name: buildah-golang-buildrun
    spec:
      build:
        name: buildah-golang-build 
    1
    
    EOF
    Copy to Clipboard Toggle word wrap

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

    示例: 使用 shp CLI

    $ shp build run buildah-golang-build --follow 
    1
    Copy to Clipboard Toggle word wrap

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

    示例: 使用 oc CLI

    $ oc get buildrun buildah-golang-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
      buildah-golang-buildrun-dtrg2-pod   2/2     Running   0          4s
      buildah-golang-buildrun-dtrg2-pod   1/2     NotReady  0          7s
      buildah-golang-buildrun-dtrg2-pod   0/2     Completed 0          55s
      Copy to Clipboard Toggle word wrap

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

      $ oc get tr
      Copy to Clipboard Toggle word wrap

      输出示例

      NAME                           SUCCEEDED  REASON     STARTTIME   COMPLETIONTIME
      buildah-golang-buildrun-dtrg2  True       Succeeded  11m         8m51s
      Copy to Clipboard Toggle word wrap

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

      $ oc get br
      Copy to Clipboard Toggle word wrap

      输出示例

      NAME                     SUCCEEDED   REASON       STARTTIME     COMPLETIONTIME
      buildah-golang-buildrun  True        Succeeded    13m           11m
      Copy to Clipboard Toggle word wrap

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

      注意

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

  2. 验证镜像是否已推送到 build.spec.output.image 字段中指定的 registry。您可以从可以访问内部 registry 的节点运行以下命令来拉取镜像:

    $ podman pull image-registry.openshift-image-registry.svc:5000/<project>/<image> 
    1
    Copy to Clipboard Toggle word wrap
    1
    创建 Build 资源时使用的项目名称和镜像名称。例如,您可以使用 buildah-example 作为项目名称,sample-go-app 作为镜像名称。

1.2. 创建 Source-to-image 构建

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

先决条件

  • 您已在 OpenShift Container Platform 集群中安装了 Red Hat OpenShift Operator 的构建。
  • 您已创建了 ShipwrightBuild 资源。
  • 已安装 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
        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 Toggle word wrap

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

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

    示例: 使用 shp CLI

    $ shp build list
    Copy to Clipboard Toggle word wrap

  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 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. 运行以下命令之一检查 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 作为镜像名称。

1.3. 查看日志

您可以查看构建运行的日志,以识别任何运行时错误并解决它们。

先决条件

  • 已安装 oc CLI。
  • 可选: 已安装 shp CLI。

流程

  • 使用其中一个 CLI 查看构建的日志:

    使用 oc CLI

    $ oc logs <buildrun_resource_name>
    Copy to Clipboard Toggle word wrap

    使用 shp CLI

    $ shp buildrun logs <buildrun_resource_name>
    Copy to Clipboard Toggle word wrap

1.4. 删除资源

如果项目不需要,您可以删除 BuildBuildRunBuildStrategy 资源。

先决条件

  • 已安装 oc CLI。
  • 可选: 已安装 shp CLI。

流程

  • 使用其中一个 CLI 删除 Build 资源:

    使用 oc CLI

    $ oc delete builds.shipwright.io <build_resource_name>
    Copy to Clipboard Toggle word wrap

    使用 shp CLI

    $ shp build delete <build_resource_name>
    Copy to Clipboard Toggle word wrap

  • 使用其中一个 CLI 删除 BuildRun 资源:

    使用 oc CLI

    $ oc delete buildrun <buildrun_resource_name>
    Copy to Clipboard Toggle word wrap

    使用 shp CLI

    $ shp buildrun delete <buildrun_resource_name>
    Copy to Clipboard Toggle word wrap

  • 运行以下命令来删除 BuildStrategy 资源:

    使用 oc CLI

    $ oc delete buildstrategies <buildstartegy_resource_name>
    Copy to Clipboard Toggle word wrap

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat