5.3. Custom 构建

采用 Custom 构建策略时,开发人员可以定义负责整个构建过程的特定构建器镜像。通过利用自己的构建器镜像,可以自定义构建流程。

自定义构建器(Custom builder)镜像是嵌入了构建过程逻辑的普通 Docker 格式容器镜像,例如用于构建 RPM 或基础镜像。

Custom 构建以级别很高的特权运行,默认情况下不可供用户使用。只有可赋予集群管理权限的用户才应被授予运行自定义构建的权限。

5.3.1. 使用 FROM 镜像进行自定义构建

您可以使用 customStrategy.from 部分来指示要用于自定义构建的镜像。

流程

设置 customStrategy.from 部分:

strategy:
  customStrategy:
    from:
      kind: "DockerImage"
      name: "openshift/sti-image-builder"

5.3.2. 在自定义构建中使用 secret

除了可以添加到所有构建类型的源和镜像的 secret 之外,自定义策略还允许向构建器 Pod 添加任意 secret 列表。

流程

将各个 secret 挂载到特定位置:

strategy:
  customStrategy:
    secrets:
      - secretSource: 1
          name: "secret1"
        mountPath: "/tmp/secret1" 2
      - secretSource:
          name: "secret2"
        mountPath: "/tmp/secret2"
1
secretSource 是对与构建相同的命名空间中的 secret 的引用。
2
mountPath 是自定义构建器中应挂载 secret 的路径。

5.3.3. 使用环境变量进行自定义构建

要将环境变量提供给 Custom 构建过程使用,可在 BuildConfigcustomStrategy 定义中添加环境变量。

这里定义的环境变量将传递给运行自定义构建的 Pod。

流程

定义在构建期间使用的自定义 HTTP 代理:

customStrategy:
...
  env:
    - name: "HTTP_PROXY"
      value: "http://myproxy.net:5187/"

集群管理员还可以使用 Ansible 配置全局构建设置。

您也可以使用 oc set env 命令管理 BuildConfig 中定义的环境变量。

5.3.4. 使用自定义构建器镜像

OpenShift Container Platform 的 Custom 构建策略允许您定义负责整个构建过程的特定构建器镜像,旨在填补因创建容器镜像日益普及而造成的空缺。如果构建仍然需要生成各种工件(例如,软件包、JAR、WAR、可安装 ZIP 和基础镜像),采用 Custom 构建策略的自定义构建器镜像是填补这一空缺的理想选择。

自定义构建器镜像是嵌入了构建过程逻辑的普通容器镜像,例如用于构建 RPM 或基本容器镜像的逻辑。

此外,自定义构建器还允许实施任何扩展构建过程,例如运行单元或集成测试的 CI/CD 流。

要充分利用 Custom 构建策略的优势,您必须了解如何创建能够构建所需对象的自定义构建器镜像。

5.3.4.1. 自定义构建器镜像

在调用时,自定义构建器镜像将接收以下环境变量以及继续进行构建所需要的信息:

表 5.2. 自定义构建器环境变量

变量名称描述

BUILD

Build 对象定义的完整序列化 JSON。如果必须使用特定的 API 版本进行序列化,您可以在构建配置的自定义策略规格中设置 buildAPIVersion 参数。

SOURCE_REPOSITORY

包含要构建的源代码的 Git 存储库的 URL。

SOURCE_URI

使用与 SOURCE_REPOSITORY 相同的值。可以使用其中任一个。

SOURCE_CONTEXT_DIR

指定要在构建时使用的 Git 存储库的子目录。只有定义后才出现。

SOURCE_REF

要构建的 Git 引用。

ORIGIN_VERSION

创建此构建对象的 OpenShift Container Platform master 的版本。

OUTPUT_REGISTRY

镜像要推送到的容器镜像 registry。

OUTPUT_IMAGE

所构建镜像的容器镜像标签名称。

PUSH_DOCKERCFG_PATH

用于运行 podman pushdocker push 操作的容器 registry 凭证的路径。

5.3.4.2. 自定义构建器工作流

虽然自定义构建器镜像作者在定义构建过程时具有很大的灵活性,但构建器镜像仍必须遵循如下必要的步骤,才能在 OpenShift Container Platform 内无缝运行构建:

  1. Build 对象定义包含有关构建的输入参数的所有必要信息。
  2. 运行构建过程。
  3. 如果构建生成了镜像,则将其推送到构建的输出位置(若已定义)。可通过环境变量传递其他输出位置。