×

构建是一个基于 Shipwright 项目 的可扩展构建框架,您可以使用它在 OpenShift Container Platform 集群上构建容器镜像。您可以使用镜像构建工具(如 Source-to-Image (S2I) 和 Buildah)从源代码和 Dockerfile 构建容器镜像。您可以在 OpenShift Container Platform 命名空间中创建和应用构建资源、查看构建运行日志以及管理构建。

构建包括以下功能:

  • 用于从源代码和 Dockerfile 构建容器镜像的标准 Kubernetes 原生 API

  • 支持 Source-to-Image (S2I) 和 Buildah 构建策略

  • 使用您自己的自定义构建策略进行扩展

  • 从本地目录中的源代码执行构建

  • 用于创建和查看日志以及管理集群上构建的 Shipwright CLI

  • 与 OpenShift Container Platform Web 控制台的**开发人员**视角集成的用户体验

构建包含以下自定义资源 (CR):

  • 构建

  • BuildStrategyClusterBuildStrategy

  • BuildRun

构建资源

Build 资源定义了应用程序的源代码以及应用程序镜像将被推送到哪里。以下示例显示了一个简单的构建,它包含一个 Git 源、一个构建策略和一个输出镜像。

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-golang-build
spec:
  source:
    git:
      url: https://github.com/username/taxi
  strategy:
    name: buildah
    kind: ClusterBuildStrategy
  output:
    image: registry.mycompany.com/my-org/taxi-app:latest

您还可以扩展 Build 资源以将镜像推送到私有注册表或使用 Dockerfile。

BuildStrategy 和 ClusterBuildStrategy 资源

BuildStrategyClusterBuildStrategy 资源定义了一系列组装应用程序的步骤。您可以在命名空间中使用 BuildStrategy 资源,在集群中使用 ClusterBuildStrategy 资源。

BuildStrategyClusterBuildStrategy 资源的规范包含一个 steps 对象。以下示例显示了 buildah 集群构建策略的规范。

apiVersion: shipwright.io/v1beta1
kind: ClusterBuildStrategy
metadata:
  name: buildah
spec:
  steps:
    - name: build-and-push
      image: quay.io/containers/buildah:v1.31.0
      workingDir: $(params.shp-source-root)
      command:
        - /bin/bash
       # ...
# ...

BuildRun 资源

BuildRun 资源在您的集群上调用构建,类似于任何集群作业或 Tekton 任务运行。BuildRun 资源表示您集群上的工作负载,这将导致一个正在运行的 Pod。BuildRun 是构建的运行实例。它使用集群上的特定参数实例化构建以进行执行。

BuildRun 资源可帮助您定义以下元素:

  • 用于监控构建状态的唯一 BuildRun 名称

  • 在构建过程中使用的已引用 Build 实例

  • 用于托管构建所有密钥的服务帐户

每个 BuildRun 资源都可以在命名空间中使用。

构建控制器

构建控制器监控 Build 资源中的任何更新并执行以下任务:

  • 验证 Build 资源中是否已引用 Strategy 对象。

  • 验证 Build CR 中指定的参数是否存在于引用的构建策略中。它还会验证参数名称是否与任何保留名称冲突。

  • 验证 Build 资源中是否存在容器注册表输出密钥。

  • 验证 Build 资源中是否存在引用的 spec.source.git.url 端点 URL。

构建运行控制器监控 BuildTaskRun 资源中的任何更新并执行以下任务:

  • 搜索任何现有的 TaskRun 资源并更新其父 BuildRun 资源状态。

  • 检索指定的 service account 并将其与 Build 资源中的输出密钥一起设置。

  • 如果 TaskRun 资源不存在,则控制器将生成一个新的 Tekton TaskRun 资源并设置对 TaskRun 资源的引用。

  • 对于 TaskRun 资源中的任何后续更新,控制器都会更新父 BuildRun 资源。

构建验证

为了避免触发由于依赖项或配置设置不正确或缺失而导致失败的 BuildRun 资源,构建控制器会提前对其进行验证。如果所有验证都成功,则会看到名为 Succeededstatus.reason 字段。但是,如果任何验证失败,则必须检查 status.reasonstatus.message 字段以了解根本原因。

表 1. 构建控制器对构建的验证
status.reason 字段 描述

BuildStrategyNotFound

命名空间级别引用的策略不存在。

ClusterBuildStrategyNotFound

集群级别引用的策略不存在。

SetOwnerReferenceFailed

BuildBuildRun 资源之间设置所有者引用失败。当您在构建中将 spec.retention.atBuildDeletion 字段设置为 true 时,将触发此状态。

SpecSourceSecretRefNotFound

用于对 Git 进行身份验证的密钥不存在。

SpecOutputSecretRefNotFound

用于对容器注册表进行身份验证的密钥不存在。

SpecBuilderSecretRefNotFound

用于对容器注册表进行身份验证的密钥不存在。

MultipleSecretRefNotFound

用于身份验证的多个密钥缺失。

RestrictedParametersInUse

一个或多个已定义的params与任何保留参数冲突。

UndefinedParameter

在引用的策略中未定义参数。您必须在策略的spec.parameters规范中定义这些参数。

RemoteRepositoryUnreachable

未找到已定义的spec.source.git.url规范。此验证仅适用于HTTP和HTTPS协议。

BuildNameInvalid

metadata.name字段中的构建名称无效。构建名称必须使用有效的标签值。

SpecEnvNameCanNotBeBlank

指示用户提供的环境变量名称为空。

SpecEnvValueCanNotBeBlank

指示用户提供的环境变量值为空。