关于构建
第 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
-
BuildStrategy
和ClusterBuildStrategy
-
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 资源
BuildStrategy
和 ClusterBuildStrategy
资源定义一系列步骤来编译应用程序。您可以使用命名空间中的 BuildStrategy
资源和集群中的 ClusterBuildStrategy
资源。
BuildStrategy
或 ClusterBuildStrategy
资源的规格由一个 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。
构建运行控制器监控 Build
或 TaskRun
资源中的任何更新,并执行以下任务:
-
搜索任何现有
TaskRun
资源并更新其父BuildRun
资源状态。 -
检索指定的服务帐户,并将它与
Build
资源中的输出机密一起设置。 -
如果
TaskRun
资源不存在,控制器会生成新的 TektonTaskRun
资源,并设置对TaskRun
资源的引用。 -
对于
TaskRun
资源中的任何后续更新,控制器会更新父BuildRun
资源。
1.4.1. 构建验证
为了避免因为错误或缺少依赖项或配置设置而触发 BuildRun
资源,构建控制器会提前验证它们。如果所有验证都成功,您会看到一个名为 Succeeded
的 status.reason
字段。但是,如果任何验证失败,您必须检查 status.reason
和 status.message
字段以了解根本原因。
status.reason field | 描述 |
---|---|
| 命名空间级别的引用策略不存在。 |
| 在集群级别上引用的策略不存在。 |
|
在 BuildRun 资源和 |
| 用于向 Git 进行身份验证的机密不存在。 |
| 用于向容器注册表进行身份验证的 secret 不存在。 |
| 用于向容器注册表进行身份验证的 secret 不存在。 |
| 缺少多个用于身份验证的 secret。 |
|
一个或多个 |
|
这些参数不在引用的策略中定义。您必须在策略的 |
|
未找到定义的 |
|
|
| 表示用户提供的环境变量的名称为空。 |
| 表示用户提供的环境变量的值为空。 |
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
策略配置以下参数:
Name | 类型 | 描述 | default |
---|---|---|---|
| 数组 | 在构建期间使用的 Dockerfile 所需的参数的键值对 | [] |
| 数组 | 必须阻断的 registry 列表 | [] |
| 数组 | 带有完全限定域名(FQDN)的不安全 registry 列表 | [] |
| 数组 | 用于搜索短名称镜像的 registry 列表 | ["registry.redhat.io", "quay.io"] |
| string | 构建期间使用的 Dockerfile 的路径 | "Dockerfile" |
| string |
| "vfs" |
如需更多信息,请参阅附加资源部分中的 配置构建策略。
2.2. Source-to-image
此构建策略由 Source-to-image
和 buildah
组成。您可以使用此策略生成容器文件,并准备应用以使用构建器镜像进行构建。您必须在 Build
CR 的 spec.paramValues
字段中指定构建器镜像。
您可以在集群中的不同命名空间中共享 Source-to-image
策略,因为 Red Hat OpenShift Operator 的构建会在集群级别上安装 Source-to-image
策略。
您可以为 Source-to-image 策略配置以下参数
:
Name | 类型 | 描述 | default |
---|---|---|---|
| 数组 | 必须阻断的 registry 列表 | [] |
| 数组 | 带有 FQDN 的不安全 registry 列表 | [] |
| 数组 | 用于搜索短名称镜像的 registry 列表 | ["registry.redhat.io", "quay.io"] |
| string | 构建期间使用的构建器镜像的位置 | 不适用 |
| string |
| "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.