×

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

创建 buildah 构建

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

前提条件
  • 您已在 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
    1 放置源代码的位置。
    2 用于构建容器的构建策略。
    3 在构建策略中定义的参数。要设置 `dockerfile` 策略参数的值,请指定构建输出镜像所需的 Dockerfile 位置。
    4 推送已构建镜像的位置。在此过程示例中,已构建的镜像被推送到 OpenShift Container Platform 集群内部注册表。`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)
    1 放置源代码的位置。
    2 用于构建容器的构建策略。
    3 在构建策略中定义的参数。要设置 `dockerfile` 策略参数的值,请指定构建输出镜像所需的 Dockerfile 位置。
    4 推送已构建镜像的位置。在此过程示例中,已构建的镜像被推送到 OpenShift Container Platform 集群内部注册表。`buildah-example` 是当前项目的名称。确保指定的项目存在以允许镜像推送。
  2. 使用其中一个 CLI 检查是否已创建 `Build` 资源

    示例:使用 `oc` CLI
    $ oc get builds.shipwright.io buildah-golang-build
    示例:使用 `shp` CLI
    $ shp build list
  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
    1 `spec.build.name` 字段表示要运行的相应构建,该构建预计在同一命名空间中可用。
    示例:使用 `shp` CLI
    $ shp build run buildah-golang-build --follow (1)
    1 可选:使用 `--follow` 标志,您可以在输出结果中查看构建日志。
  4. 运行以下命令之一来检查是否已创建 `BuildRun` 资源

    示例:使用 `oc` CLI
    $ oc get buildrun buildah-golang-buildrun
    示例:使用 `shp` CLI
    $ shp buildrun list

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

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

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

      $ oc get pods -w
      示例输出
      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
    • 检查相应的 `TaskRun` 资源是否将 `SUCCEEDED` 字段显示为 `True`

      $ oc get tr
      示例输出
      NAME                           SUCCEEDED  REASON     STARTTIME   COMPLETIONTIME
      buildah-golang-buildrun-dtrg2  True       Succeeded  11m         8m51s
    • 检查相应的 `BuildRun` 资源是否将 `SUCCEEDED` 字段显示为 `True`

      $ oc get br
      示例输出
      NAME                     SUCCEEDED   REASON       STARTTIME     COMPLETIONTIME
      buildah-golang-buildrun  True        Succeeded    13m           11m

      在验证期间,如果构建运行失败,您可以检查 `BuildRun` 资源中的 `status.failureDetails` 字段以确定 pod 或容器中发生失败的确切位置。

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

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

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

在网络受限环境中创建 buildah 构建

您可以通过镜像 `buildah` 构建策略所需的镜像来在网络受限环境中创建 `buildah` 构建。

前提条件
  • 您的集群可以连接并与您可以用来创建 buildah 构建的 git 源进行交互。

步骤
  1. 运行以下命令来镜像 `buildah` 构建策略所需的镜像

    $ oc image mirror --insecure -a <registry_authentication> registry.redhat.io/ubi8/buildah@sha256:1c89cc3cab0ac0fc7387c1fe5e63443468219aab6fd531c8dad6d22fd999819e <mirror_registry>/<repo>/ubi8_buildah
  2. 执行“创建 buildah 构建”部分中提到的步骤。

创建 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
    1 放置源代码的位置。
    2 用于构建容器的构建策略。
    3 在构建策略中定义的参数。要设置 `builder-image` 策略参数的值,请指定构建输出镜像所需的构建器镜像位置。
    4 推送已构建镜像的位置。您可以将已构建的镜像推送到自定义 Quay.io 仓库。将 `repo` 替换为有效的 Quay.io 组织或您的 Quay 用户名。
    5 存储推送容器镜像凭据的密钥名称。要生成类型为 `docker-registry` 的密钥以进行身份验证,请参见“容器注册表身份验证”。
    示例:使用 `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)
    1 放置源代码的位置。
    2 用于构建容器的构建策略。
    3 在构建策略中定义的参数。要设置 `builder-image` 策略参数的值,请指定构建输出镜像所需的构建器镜像位置。
    4 推送已构建镜像的位置。您可以将已构建的镜像推送到自定义 Quay.io 仓库。将 `repo` 替换为有效的 Quay.io 组织或您的 Quay 用户名。
    5 存储推送容器镜像凭据的密钥名称。要生成类型为 `docker-registry` 的密钥以进行身份验证,请参见“容器注册表身份验证”。
  2. 使用其中一个 CLI 检查是否已创建 `Build` 资源

    示例:使用 `oc` CLI
    $ oc get builds.shipwright.io s2i-nodejs-build
    示例:使用 `shp` CLI
    $ shp build list
  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
    1 `spec.build.name` 字段表示要运行的相应构建,该构建预计在同一命名空间中可用。
    示例:使用 `shp` CLI
    $ shp build run s2i-nodejs-build --follow (1)
    1 可选:使用 `--follow` 标志,您可以在输出结果中查看构建日志。
  4. 运行以下命令之一来检查是否已创建 `BuildRun` 资源

    示例:使用 `oc` CLI
    $ oc get buildrun s2i-nodejs-buildrun
    示例:使用 `shp` CLI
    $ shp buildrun list

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

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

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

      $ oc get pods -w
      示例输出
      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
    • 检查相应的 `TaskRun` 资源是否将 `SUCCEEDED` 字段显示为 `True`

      $ oc get tr
      示例输出
      NAME                           SUCCEEDED  REASON     STARTTIME   COMPLETIONTIME
      s2i-nodejs-buildrun-phxxm      True       Succeeded  2m39s        13s
    • 检查相应的 `BuildRun` 资源是否将 `SUCCEEDED` 字段显示为 `True`

      $ oc get br
      示例输出
      NAME                     SUCCEEDED   REASON       STARTTIME     COMPLETIONTIME
      s2i-nodejs-buildrun      True        Succeeded    2m41s           15s

      在验证期间,如果构建运行失败,您可以检查 `BuildRun` 资源中的 `status.failureDetails` 字段以确定 pod 或容器中发生失败的确切位置。

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

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

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

在网络受限环境中创建Source-to-Image构建

您可以通过镜像source-to-image构建策略所需的镜像,在网络受限环境中创建source-to-image构建。

前提条件
  • 您的集群可以连接并与您可以用来创建source-to-image构建的git源进行交互。

  • 您在本地注册表中拥有创建source-to-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
  2. 执行“创建source-to-image构建”部分中提到的步骤。

查看日志

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

前提条件
  • 您已安装了 `oc` CLI。

  • 可选:您已安装shp CLI。

步骤
  • 使用其中一个CLI查看构建运行的日志

    使用oc CLI
    $ oc logs <buildrun_resource_name>
    使用shp CLI
    $ shp buildrun logs <buildrun_resource_name>

删除资源

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

前提条件
  • 您已安装了 `oc` CLI。

  • 可选:您已安装shp CLI。

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

    使用oc CLI
    $ oc delete builds.shipwright.io <build_resource_name>
    使用shp CLI
    $ shp build delete <build_resource_name>
  • 使用其中一个CLI删除BuildRun资源

    使用oc CLI
    $ oc delete buildrun <buildrun_resource_name>
    使用shp CLI
    $ shp buildrun delete <buildrun_resource_name>
  • 运行以下命令删除BuildStrategy资源

    使用oc CLI
    $ oc delete buildstrategies <buildstartegy_resource_name>