1.5. 创建 buildpacks 构建


了解如何创建 buildpacks 构建并将创建的镜像推送到目标 registry。有两个 buildpacks ClusterBuildStrategy 选项可用于 Red Hat OpenShift 构建:

  • Buildpacks 策略
  • Buildpacks-extender 策略
注意

buildpacks-extender 策略与实验性 buildpacks 扩展器生命周期阶段 兼容。您可以使用此策略,例如基于 Node.js 的构建。但是,扩展器 阶段不支持 Quarkus 或任何其他基于 Java 的构建。对于这样的构建,您可以使用 buildpacks 策略。

重要

Buildpacks 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

先决条件

  • 您已在 OpenShift Container Platform 集群中安装了 Red Hat OpenShift Operator 的构建。
  • 已安装 oc CLI。
  • 已使用 oc new-project buildpacks-example 命令创建存储最终应用镜像的项目。
  • 可选: 已安装 shp CLI。
重要

使用带有 buildpacks 的 shp CLI 需要您开始创建 buildpacks 构建前必须完成的额外权限设置。

流程

  1. OPTIONAL :要使用带有 buildpacks 的 shp CLI,您必须首先向 pipeline 服务帐户授予权限,以便使用以下命令访问 buildpacks-example 项目中的镜像 registry:

    $ oc policy add-role-to-user system:image-puller system:serviceaccount:default:pipeline --namespace=buildpacks-example
    $ oc policy add-role-to-user system:image-pusher system:serviceaccount:default:pipeline --namespace=buildpacks-example
  2. OPTIONAL:通过切换回主工作项目来继续使用 shp CLI:

    $ oc project default
  3. OPTIONAL:通过应用权限完成 shp CLI 设置:

    $ oc create rolebinding allow-builds-to-push \
    
      --clusterrole=edit \
    
     --serviceaccount=default:pipeline \
    
    --namespace=buildpacks-example
  4. 创建 Build 资源,并将其应用到 OpenShift Container Platform 集群:

    1. 使用 oc CLI

      $ oc apply -f - <<EOF
      apiVersion: shipwright.io/v1beta1
      
      kind: Build
      
      metadata:
      
        name: buildpack-nodejs-build
      
      spec:
      
        source: 
      1
      
      
          type: Git
      
          git:
      
            url: https://github.com/redhat-openshift-builds/samples.git
      
        strategy: 
      2
      
      
          name: buildpacks
      
          kind: ClusterBuildStrategy
      
        retention:
      
          atBuildDeletion: true
      
        paramValues: 
      3
      
      
          - name: run-image 
      4
      
      
            value: paketobuildpacks/run-ubi8-base:latest
      
          - name: cnb-builder-image 
      5
      
      
            value: paketobuildpacks/builder-jammy-tiny:0.0.344
      
          - name: source-subpath 
      6
      
      
            value: "buildpacks/nodejs"
      
        output: 
      7
      
          image: image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app
      EOF
      1
      包含应用源代码的 Git 存储库。
      2
      构建容器的构建策略。
      3
      为 buildpacks 策略设置的参数。
      4
      应用程序运行的基础镜像。
      5
      Cloud Native Buildpacks (CNB)使用的构建器镜像来检测和构建应用程序。
      6
      应用源代码所在的 Git 存储库中的子目录。
      7
      推送镜像的位置。
    2. 使用 shp CLI:

      $ shp build create buildpack-nodejs-build \
      
      --source-git-url="https://github.com/redhat-openshift-builds/samples.git" \
      
      --strategy-name="buildpacks" \
      
      --output-image="image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app" \
      
      --param-value="source-subpath=buildpacks/nodejs" \
      
      --param-value="cnb-builder-image=paketobuildpacks/builder-jammy-tiny:0.0.344" \
      --param-value="run-image=paketobuildpacks/run-ubi8-base:latest"
  5. 检查 Build 资源是否已创建:

    1. 使用 oc CLI:

      $ oc get builds.shipwright.io buildpack-nodejs-build
    2. 使用 shp CLI:

      $ shp build list
  6. 创建 BuildRun 资源,并将其应用到 OpenShift Container Platform 集群:

    1. ..使用 oc CLI:

      $ oc apply -f - <<EOF
      apiVersion: shipwright.io/v1beta1
      kind: BuildRun
      metadata:
        name: buildpack-nodejs-buildrun
        namespace: builds-test
      spec:
        build:
          name: buildpack-nodejs-build 
      1
      
      EOF
      1
      对要执行的 buildpack-nodejs-build 资源的引用。
    2. 使用 shp CLI:

      …​

$ shp build run buildpack-nodejs-buildrun --follow

+

重要

shp CLI 版本 0.16.0 无法自动为 BuildRun 资源生成名称。您必须手动创建名称:

  1. 使用唯一名称创建 BuildRun 资源

    $ shp buildrun create buildpack-nodejs-<buildrun_resource_name>  --buildref-name buildpack-nodejs-build 
    1
    1
    引用构建的标记。
  2. 按照日志操作:

    $ shp buildrun logs buildpack-nodej-<buildrun_resource_name> --follow
  1. 检查 BuildRun 资源是否已创建:

    1. 使用 oc CLI:

      $ oc get buildrun buildpack-nodejs-buildrun
    2. 使用 shp CLI:

      $ shp buildrun list

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

验证

  1. 等待所有容器完成其任务。
  2. 检查 pod 是否显示 STATUS 字段为 Completed

    $ oc get pods -w
  3. 检查 TaskRun 资源是否显示 SUCCESS 字段为 True

    $ oc get tr
  4. 检查 BuildRun 资源是否显示 SUCCESS 字段为 True

    $ oc get br
    注意

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

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

  5. 从可以访问内部 registry 的节点运行以下命令来检查镜像是否已推送到 build.spec.output.image 字段中指定的 registry:

    $ podman pull
    注意

    podman pull 命令的输出示例可能类似如下:

    1. 输出示例
    $ image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app

    本例中的项目名称是 buildpacks-example,镜像名称为 taxi-app

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部