关于构建


builds for Red Hat OpenShift 1.2

构建简介

Red Hat OpenShift Documentation Team

摘要

本文档概述构建功能。它还包括发行注记和有关如何获取支持的详细信息。

第 1 章 构建概述

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

构建包括以下功能:

  • 标准 Kubernetes 原生 API,用于从源代码和 Dockerfile 构建容器镜像
  • 支持 Source-to-Image (S2I)和 Buildah 构建策略
  • 使用您自己的自定义构建策略的可扩展性
  • 从本地目录中的源代码执行构建
  • 用于创建和查看日志的 Shipwright CLI,并管理集群上的构建
  • 使用 OpenShift Container Platform Web 控制台的 Developer 视角集成用户体验

构建由以下自定义资源(CR)组成:

  • Build
  • BuildStrategyClusterBuildStrategy
  • BuildRun

1.1. 构建资源

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 资源,以将镜像推送到私有 registry 或使用 Dockerfile。

1.2. 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
       # ...
# ...

1.3. BuildRun 资源

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

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

  • 用于监控构建状态的唯一 BuildRun 名称
  • 构建期间使用的 引用构建实例
  • 托管构建的所有 secret 的服务帐户

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

1.4. 构建控制器

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

  • 验证 Build 资源中是否存在引用的 Strategy 对象。
  • 验证 Build CR 中的指定参数是否存在于引用的构建策略中。它还会验证参数名称是否与任何保留名称冲突。
  • 验证 Build 资源中是否存在容器 registry 输出 secret。
  • 验证 Build 资源中是否存在引用的 spec.source.git.url 端点 URL。

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

  • 搜索任何现有 TaskRun 资源并更新其父 BuildRun 资源状态。
  • 检索指定的服务帐户,并将它与 Build 资源中的输出机密一起设置。
  • 如果 TaskRun 资源不存在,控制器会生成新的 Tekton TaskRun 资源,并设置对 TaskRun 资源的引用。
  • 对于 TaskRun 资源中的任何后续更新,控制器会更新父 BuildRun 资源。

1.4.1. 构建验证

为了避免因为错误或缺少依赖项或配置设置而触发 BuildRun 资源,构建控制器会提前验证它们。如果所有验证都成功,您会看到一个名为 Succeededstatus.reason 字段。但是,如果任何验证失败,您必须检查 status.reasonstatus.message 字段以了解根本原因。

表 1.1. 构建控制器验证构建
status.reason field描述

BuildStrategyNotFound

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

ClusterBuildStrategyNotFound

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

SetOwnerReferenceFailed

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

SpecSourceSecretRefNotFound

用于向 Git 进行身份验证的机密不存在。

SpecOutputSecretRefNotFound

用于向容器注册表进行身份验证的 secret 不存在。

SpecBuilderSecretRefNotFound

用于向容器注册表进行身份验证的 secret 不存在。

MultipleSecretRefNotFound

缺少多个用于身份验证的 secret。

RestrictedParametersInUse

一个或多个 定义的参数 与任何保留参数合并。

UndefinedParameter

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

RemoteRepositoryUnreachable

未找到定义的 spec.source.git.url 规格。此验证只针对 HTTP 和 HTTPS 协议进行。

BuildNameInvalid

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

SpecEnvNameCanNotBeBlank

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

SpecEnvValueCanNotBeBlank

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

1.5. 其他资源

第 2 章 构建策略

您可以在 OpenShift Container Platform 集群上使用一组策展的构建策略或集群构建策略。Red Hat OpenShift Operator 的 Builds 会自动安装这些策略以供使用。这种策略自动安装可帮助您快速开始使用构建。

构建支持以下集群构建策略:

  • Buildah :在所有平台上支持
  • Source-to-image :在 linux/amd64 平台上支持
注意

buildpacks 构建策略目前处于 开发者预览 中。如需更多信息,请参阅 buildpacks 示例

2.1. Buildah

buildah 集群构建策略使用 Dockerfile 构建容器镜像并将其推送到目标 registry。您必须在 Build CR 的 spec.paramValues 字段中指定 Dockerfile。

您可以在集群中的不同命名空间中共享 buildah 策略,因为 Red Hat OpenShift Operator 的 Builds 会在集群级别安装 buildah 策略。

您可以为 buildah 策略配置以下参数:

表 2.1. buildah的配置参数
Name类型描述default

build-args

数组

在构建期间使用的 Dockerfile 所需的参数的键值对

[]

registries-block

数组

必须阻断的 registry 列表

[]

registries-insecure

数组

带有完全限定域名(FQDN)的不安全 registry 列表

[]

registries-search

数组

用于搜索短名称镜像的 registry 列表

["registry.redhat.io", "quay.io"]

dockerfile

string

构建期间使用的 Dockerfile 的路径

"Dockerfile"

storage-driver

string

buildah 使用的存储驱动程序,如 overlay 或 vfs

"vfs"

注意

如需更多信息,请参阅附加资源部分中的 配置构建策略

2.2. Source-to-image

此构建策略由 Source-to-imagebuildah 组成。您可以使用此策略生成容器文件,并准备应用以使用构建器镜像进行构建。您必须在 Build CR 的 spec.paramValues 字段中指定构建器镜像。

您可以在集群中的不同命名空间中共享 Source-to-image 策略,因为 Red Hat OpenShift Operator 的构建会在集群级别上安装 Source-to-image 策略。

您可以为 Source-to-image 策略配置以下参数

表 2.2. Source-to-image 的配置参数
Name类型描述default

registries-block

数组

必须阻断的 registry 列表

[]

registries-insecure

数组

带有 FQDN 的不安全 registry 列表

[]

registries-search

数组

用于搜索短名称镜像的 registry 列表

["registry.redhat.io", "quay.io"]

builder-image

string

构建期间使用的构建器镜像的位置

不适用

storage-driver

string

Source-to-image 使用的存储驱动程序,如 overlay 或 vfs

"vfs"

2.3. 其他资源

Legal Notice

Copyright © 2024 Red Hat, Inc.

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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

© 2024 Red Hat, Inc.