第 1 章 运行构建


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

1.1. 创建 buildah 构建

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

先决条件

  • 您已在 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: buildah-golang-build
    spec:
      source: 
    1
    
        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 策略参数的值,请指定构建输出镜像所需的 Dockerfile 位置。
    4
    推送构建镜像的位置。在本例中,构建的镜像被推送到 OpenShift Container Platform 集群内部 registry。buildah-example 是当前项目的名称。确保存在指定的项目以允许推送镜像。

    示例:使用 shp CLI

    $ shp build create buildah-golang-build \
    --source-url="https://github.com/shipwright-io/sample-go" --source-context-dir="docker-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 策略参数的值,请指定构建输出镜像所需的 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. 使用其中一个 CLI 创建 BuildRun 资源并将其应用到 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. 使用其中一个 CLI 检查 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 作为项目名称,example -go-app 作为镜像名称。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat