配置
第 1 章 配置构建
在 Build
自定义资源(CR)中,您可以定义源、构建策略、参数值、输出、保留参数和卷来配置构建。Build
资源可用于命名空间。
要配置构建,请创建一个 Build
资源 YAML 文件,并将其应用到 OpenShift Container Platform 集群。
1.1. 构建中的可配置字段
您可以使用 Build
自定义资源(CR)中的以下字段:
字段 | 存在 | 描述 |
---|---|---|
| 必填 |
指定资源的 API 版本,如 shipped |
| 必填 |
指定资源的类型,如 |
| 必填 |
表示标识自定义资源定义实例的元数据,如 |
| 必填 | 表示源代码的位置,如 Git 存储库或源捆绑包镜像。 |
| 必填 |
表示用于 |
| 必填 | 表示推送所生成的镜像的位置。 |
| 必填 | 表示现有的 secret 以访问容器 registry。 |
| 选填 | 表示 name-value 列表,用于指定构建策略中定义的参数的值。 |
| 选填 |
定义自定义超时。默认值为 10 分钟。您可以覆盖 |
| 选填 | 表示可用于注解输出镜像的键值对列表。 |
| 选填 | 表示可用于标记输出镜像的键值对列表。 |
| 选填 | 定义您可以传递给构建容器的额外环境变量。可用的变量取决于您的构建策略所使用的工具。 |
| 选填 | 指定失败的构建运行可以存在的持续时间。 |
| 选填 | 指定成功构建运行可以存在的持续时间。 |
| 选填 | 指定可以存在的失败构建运行次数。 |
| 选填 | 指定可以存在的构建成功运行的数量。 |
1.2. 源定义
您可以通过设置以下字段的值,在 Build
自定义资源(CR)中配置构建的源详情:
-
source.git.url
:定义 Git 存储库中提供的镜像的源位置。 -
source.git.cloneSecret
:引用命名空间中包含私有 Git 存储库的 SSH 私钥的 secret。 -
source.git.revision
:定义要从源 Git 仓库中选择的特定修订版本。例如,提交、标签或分支名称。此字段默认为 Git 存储库默认分支。 -
source.contextDir
:指定源代码在根文件夹中不存在的存储库的上下文路径。
构建控制器不会自动验证您为拉取镜像指定的 Git 存储库是否存在。如果需要验证,请将 build.shipwright.io/verify.repository
注解的值设置为 true
,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-golang-build annotations: build.shipwright.io/verify.repository: "true" spec: source: git: url: https://github.com/shipwright-io/sample-go contextDir: docker-build
构建控制器在以下情况下验证 Git 存储库是否存在:
- 当您将端点 URL 与 HTTP 或 HTTPS 协议搭配使用时。
-
当您定义了 SSH 协议时,如
git@
,而不是引用的 secret,如source.git.cloneSecret
。
以下示例演示了如何使用不同源输入集配置构建。
示例:使用凭证配置构建
您可以通过指定凭证来使用源配置构建,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-build spec: source: git: url: https://github.com/sclorg/nodejs-ex cloneSecret: source-repository-credentials
示例:使用上下文路径配置构建
您可以使用指定 Git 存储库中的上下文路径的源配置构建,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-custom-context-dockerfile spec: source: git: url: https://github.com/userjohn/npm-simple contextDir: docker-build
示例:使用标签配置构建
您可以使用指定 Git 存储库标签 v.0.1.0
的源配置构建,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-golang-build spec: source: git: url: https://github.com/shipwright-io/sample-go revision: v0.1.0
示例:使用环境变量配置构建
您还可以配置指定环境变量的构建,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-golang-build spec: source: git: url: https://github.com/shipwright-io/sample-go contextDir: docker-build env: - name: <example_var_1> value: "<example_value_1>" - name: <example_var_2> value: "<example_value_2>"
1.3. 策略定义
您可以在 Build
CR 中为构建配置策略。以下构建策略可供使用:
-
buildah
-
Source-to-image
要配置构建策略,请在 Build
CR 中定义 spec.strategy.name
和 spec.strategy.kind
字段,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-build spec: strategy: name: buildah kind: ClusterBuildStrategy
1.4. 构建的参数值定义
您可以在 Build
CR 中为构建策略参数指定值。通过指定参数值,您可以控制构建策略的步骤的工作方式。您还可以覆盖 BuildRun
资源中的值。
对于所有参数,您必须直接指定值,或使用配置映射或 secret 的引用键来指定值。
在构建策略步骤中使用参数限制了配置映射和 secret 的使用。只有命令、参数或环境变量中使用了参数,则只能使用配置映射和 secret。
在 Build
CR 中使用 paramValues
字段时,请避免以下情况:
-
指定与
BuildStrategy
CR 中定义的一个spec.parameters
不匹配的spec.paramValues
名称。 -
指定与 Shipwright 保留参数冲突的
spec.paramValues
名称。这些参数包括BUILDER_IMAGE
、CONTEXT_DIR
以及以shp-
开头的任何名称。
另外,请确保在 Build
CR 中定义 paramValues
字段前了解策略的内容。
1.4.1. 定义参数值配置示例
以下示例演示了如何在构建策略中定义参数,并使用 Build
CR 为这些参数分配值。您还可以为 Build
CR 中的 type 数组
的参数分配一个值。
示例:在 ClusterBuildStrategy
CR 中定义参数
以下示例显示了定义几个参数的 ClusterBuildStrategy
CR:
apiVersion: shipwright.io/v1beta1 kind: ClusterBuildStrategy metadata: name: buildah spec: parameters: - name: build-args description: "The values for the args in the Dockerfile. Values must be in the format KEY=VALUE." type: array defaults: [] # ... - name: storage-driver description: "The storage driver to use, such as 'overlay' or 'vfs'." type: string default: "vfs" # ... steps: # ...
示例:将值分配给 Build
CR 中的参数
以上 ClusterBuildStrategy
CR 定义了一个 storage-driver
参数,您可以在 Build
CR 中指定 storage-driver
参数的值,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: <your_build> namespace: <your_namespace> spec: paramValues: - name: storage-driver value: "overlay" strategy: name: buildah kind: ClusterBuildStrategy output: # ...
示例:创建 ConfigMap
CR 以集中控制参数
如果要将 storage-driver
参数用于多个构建并集中控制其使用情况,您可以创建一个 ConfigMap
CR,如下例所示:
apiVersion: v1 kind: ConfigMap metadata: name: buildah-configuration namespace: <your_namespace> data: storage-driver: overlay
您可以使用创建的 ConfigMap
CR 作为 Build
CR 中的参数值,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: <your_build> namespace: <your_namespace> spec: paramValues: - name: storage-driver configMapValue: name: buildah-configuration key: storage-driver strategy: name: buildah kind: ClusterBuildStrategy output: # ...
示例:将值分配给 Build
CR 中的 type 数组
的参数
您可以为类型 数组
的参数分配值。如果使用 buildah
策略,您可以定义一个 registry-search
参数来搜索特定 registry 中的镜像。以下示例演示了如何为 registry-search
数组参数分配值:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: <your_build> namespace: <your_namespace> spec: paramValues: - name: storage-driver configMapValue: name: buildah-configuration key: storage-driver - name: registries-search values: - value: registry.redhat.io strategy: name: buildah kind: ClusterBuildStrategy output: # ...
示例:引用 构建
CR 中的 secret
您可以为 registry-block
数组参数引用 secret,如下例所示:
apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
name: <your_build>
namespace: <your_namespace>
spec:
paramValues:
- name: storage-driver
configMapValue:
name: buildah-configuration
key: storage-driver
- name: registries-block
values:
- secretValue: 1
name: registry-configuration
key: reg-blocked
strategy:
name: buildah
kind: ClusterBuildStrategy
output:
# ...
- 1
- 该值引用 secret。
1.5. builder 或 docker 文件定义
在 Build
CR 中,您可以使用 spec.paramValues
字段指定包含构建输出镜像的工具的镜像。以下示例指定了 Build
CR 中的 Dockerfile
镜像:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-golang-build spec: source: git: url: https://github.com/shipwright-io/sample-go contextDir: docker-build strategy: name: buildah kind: ClusterBuildStrategy paramValues: - name: dockerfile value: Dockerfile
您还可以在 Build
CR 中使用 构建器镜像
作为 source-to-image
构建策略的一部分,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: s2i-nodejs-build spec: source: git: url: https://github.com/shipwright-io/sample-nodejs contextDir: source-build/ strategy: name: source-to-image kind: ClusterBuildStrategy paramValues: - name: builder-image value: docker.io/centos/nodejs-10-centos7
1.6. 输出定义
在 Build
CR 中,您可以指定一个输出位置来推送镜像。当使用外部私有 registry 作为输出位置时,您必须指定一个 secret 才能访问该镜像。您还可以指定输出镜像的注解和标签。
当您指定注解或标签时,输出镜像会被推送两次。第一个推送来自构建策略,第二次推送会更改镜像配置以添加注解和标签。
以下示例定义了推送镜像的公共 registry:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: s2i-nodejs-build spec: source: git: url: https://github.com/shipwright-io/sample-nodejs contextDir: source-build/ strategy: name: source-to-image kind: ClusterBuildStrategy paramValues: - name: builder-image value: docker.io/centos/nodejs-10-centos7 output: image: image-registry.openshift-image-registry.svc:5000/build-examples/nodejs-ex
以下示例定义了推送镜像的私有 registry:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: s2i-nodejs-build spec: source: git: url: https://github.com/shipwright-io/sample-nodejs contextDir: source-build/ strategy: name: source-to-image kind: ClusterBuildStrategy paramValues: - name: builder-image value: docker.io/centos/nodejs-10-centos7 output: image: us.icr.io/source-to-image-build/nodejs-ex pushSecret: icr-knbuild
以下示例为镜像定义注解和标签:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: s2i-nodejs-build spec: source: git: url: https://github.com/shipwright-io/sample-nodejs contextDir: source-build/ strategy: name: source-to-image kind: ClusterBuildStrategy paramValues: - name: builder-image value: docker.io/centos/nodejs-10-centos7 output: image: us.icr.io/source-to-image-build/nodejs-ex pushSecret: icr-knbuild annotations: "org.opencontainers.image.source": "https://github.com/org/repo" "org.opencontainers.image.url": "https://my-company.com/images" labels: "maintainer": "team@my-company.com" "description": "This is my cool image"
1.7. 构建的保留参数定义
您可以针对以下目的定义保留参数:
- 指定已完成的构建运行的时间
- 指定构建可以存在的成功或失败的构建运行数量
保留参数提供了一种自动清理 BuildRun
实例或资源的方法。您可以在 Build
CR 中设置以下保留参数的值:
-
retention.succeededLimit
: 定义构建可以存在的成功构建运行数量。 -
retention.failedLimit
:定义构建可以存在的失败构建运行数量。 -
retention.ttlAfterFailed
: 指定失败的构建运行可以存在的持续时间。 -
retention.ttlAfterSucceeded
: 指定成功构建运行可以存在的持续时间。
以下示例显示了在 Build
CR 中使用保留参数:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: build-retention-ttl spec: source: git: url: "https://github.com/shipwright-io/sample-go" contextDir: docker-build strategy: kind: ClusterBuildStrategy name: buildah output: # ... retention: ttlAfterFailed: 30m ttlAfterSucceeded: 1h failedLimit: 10 succeededLimit: 20 # ...
当您更改 retention.failedLimit
和 retention.succeededLimit
参数的值时,会在构建中应用这些更改后立即强制新限制。但是,当更改 retention.ttlAfterFailed
和 retention.ttlAfterSucceeded
参数的值时,新的保留持续时间仅在新构建运行时强制使用。旧构建会遵循旧的保留持续时间。如果您在 BuildRun
和 Build CR 中定义了保留持续时间,则
CR 中定义的保留持续时间会获得优先级。
Build
Run
1.8. 构建的卷定义
您可以在 Build
CR 中定义卷。定义的卷覆盖 BuildStrategy
资源中指定的卷。如果卷没有被覆盖,则构建运行会失败。
以下示例显示了在 Build
CR 中使用 volumes
字段:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: <build_name> spec: source: git: url: https://github.com/example/url strategy: name: buildah kind: ClusterBuildStrategy paramValues: - name: dockerfile value: Dockerfile output: image: registry/namespace/image:latest volumes: - name: <your_volume_name> configMap: name: <your_configmap_name>
第 2 章 配置构建策略
在 BuildStrategy
或 ClusterBuildStrategy
自定义资源(CR)中,您可以定义策略参数、系统参数、步骤资源定义、注解和卷来配置构建策略。BuildStrategy
资源可用于命名空间中,并且集群中可以使用 ClusterBuildStrategy
资源。
要配置构建策略,请创建一个 BuildStrategy
或 ClusterBuildStrategy
资源 YAML 文件,并将其应用到 OpenShift Container Platform 集群。
2.1. 策略参数定义
您可以在 BuildStrategy
或 ClusterBuildStrategy
自定义资源(CR)中定义策略参数,并在 Build
或 BuildRun
CR 中定义这些参数的值。您还可以在构建时配置或修改策略参数。
在为您的策略定义参数前请考虑以下点:
-
在构建策略 CR 的
spec.parameters
字段中定义参数列表。每个列表项包含名称、描述、类型和可选的默认值,或是数组类型的值。如果没有设置默认值,则必须在Build
或BuildRun
CR 中定义值。 -
在构建策略的
spec.steps
字段中定义字符串或数组类型的参数。 使用
$(params.your-parameter-name)
语法指定字符串类型的参数。您可以在Build
或BuildRun
CR 中为your-parameter-name
参数设置一个值,以引用您的策略。您可以根据您的需要定义以下字符串参数:表 2.1. 字符串参数 参数 描述 image
使用此参数定义自定义标签,如
golang:$(params.go-version)
args
使用此参数将数据传递给构建器命令
env
使用此参数为环境变量提供值
使用
$(params.your-array-parameter-name[*])
语法指定数组类型的参数。指定阵列后,您可以在参数或命令中使用它。对于数组中的每个项目,将设置一个参数。以下示例使用构建策略的spec.steps
字段中的一个数组参数:apiVersion: shipwright.io/v1beta1 kind: ClusterBuildStrategy metadata: name: <cluster_build_strategy_name> # ... spec: parameters: - name: tool-args description: Parameters for the tool type: array steps: - name: a-step command: - some-tool args: - --tool-args - $(params.tool-args[*])
-
将参数值作为简单字符串提供,或作为配置映射或 secret 中键的引用。对于参数,只有在
spec.steps
字段的命令
、args
或env
部分中定义了配置映射或 secret 值时,才能使用它。
2.2. 系统参数定义
您可以在定义构建策略的步骤时使用系统参数访问系统信息,或在 Build
或 BuildRun
自定义资源(CR)中用户定义的信息。您无法配置或修改系统参数,因为它们在构建运行控制器运行时定义。
您可以在构建策略定义中定义以下系统参数:
参数 | 描述 |
---|---|
| 表示包含源代码的目录的绝对路径。 |
|
表示源代码上下文目录的绝对路径。如果您没有在 |
|
表示要推送的镜像的 URL,如 |
2.3. 步骤资源定义
您可以为构建策略中的所有步骤包含资源的定义,如对 CPU、内存和磁盘用量实施的限制。对于具有多个步骤的策略,步骤可能需要的资源数量超过其他步骤。作为策略管理员,您可以定义每个步骤最佳的资源值。
例如,您可以使用相同的步骤安装策略,但集群中的不同名称和步骤资源,以便用户可以创建具有较小或更大资源要求的构建。
2.3.1. 具有不同资源的策略
在资源上定义具有不同限制的相同策略的多个类型。以下示例使用相同的 buildah
策略,并为资源定义小和中型限制。这些示例为策略管理员提供了对步骤资源定义的更多控制。
2.3.1.1. Buildah 策略,带有小限制
为 buildah
策略定义 spec.steps[].resources
字段,并带有较小的资源限值,如下例所示:
示例:带有小限制的 buildah
策略
apiVersion: shipwright.io/v1beta1 kind: ClusterBuildStrategy metadata: name: buildah-small spec: steps: - name: build-and-push image: quay.io/containers/buildah:v1.31.0 workingDir: $(params.shp-source-root) securityContext: capabilities: add: - "SETFCAP" command: - /bin/bash args: - -c - | set -euo pipefail # Parse parameters # ... # That's the separator between the shell script and its args - -- - --context - $(params.shp-source-context) - --dockerfile - $(build.dockerfile) - --image - $(params.shp-output-image) - --build-args - $(params.build-args[*]) - --registries-block - $(params.registries-block[*]) - --registries-insecure - $(params.registries-insecure[*]) - --registries-search - $(params.registries-search[*]) resources: limits: cpu: 250m memory: 65Mi requests: cpu: 250m memory: 65Mi parameters: - name: build-args description: "The values for the args in the Dockerfile. Values must be in the format KEY=VALUE." type: array defaults: [] # ...
2.3.1.2. Buildah 策略,带有中等限制
使用 buildah
策略的中型资源限值定义 spec.steps[].resources
字段,如下例所示:
示例:带有介质限制的 buildah
策略
apiVersion: shipwright.io/v1beta1 kind: ClusterBuildStrategy metadata: name: buildah-medium spec: steps: - name: build-and-push image: quay.io/containers/buildah:v1.31.0 workingDir: $(params.shp-source-root) securityContext: capabilities: add: - "SETFCAP" command: - /bin/bash args: - -c - | set -euo pipefail # Parse parameters # ... # That's the separator between the shell script and its args - -- - --context - $(params.shp-source-context) - --dockerfile - $(build.dockerfile) - --image - $(params.shp-output-image) - --build-args - $(params.build-args[*]) - --registries-block - $(params.registries-block[*]) - --registries-insecure - $(params.registries-insecure[*]) - --registries-search - $(params.registries-search[*]) resources: limits: cpu: 500m memory: 1Gi requests: cpu: 500m memory: 1Gi parameters: - name: build-args description: "The values for the args in the Dockerfile. Values must be in the format KEY=VALUE." type: array defaults: [] # ...
为策略配置资源定义后,您必须在 Build
CR 中引用策略,如下例所示:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-medium spec: source: git: url: https://github.com/shipwright-io/sample-go contextDir: docker-build strategy: name: buildah-medium kind: ClusterBuildStrategy # ...
2.3.2. Tekton 管道中的资源管理
构建控制器与 Tekton 管道控制器一起工作,以便它可以调度 pod 来执行策略步骤。在运行时,构建控制器会创建一个 Tekton TaskRun
资源,TaskRun
资源在特定命名空间中创建一个新 pod。然后,此 pod 会按顺序执行所有策略步骤来构建镜像。
2.4. 注解定义
您可以像为任何其他 Kubernetes 对象一样,为构建策略或集群构建策略定义注解。构建策略首先将注解传播到 TaskRun
资源。然后,Tekton 将它们传播到 pod。
您可以将注解用于以下目的:
-
要限制 pod 允许使用的网络带宽,Kubernetes 网络流量控制功能中定义了
kubernetes.io/ingress-bandwidth
和kubernetes.io/egress-bandwidth
注解。 -
要定义容器的 AppArmor 配置集,使用 container.
apparmor.security.beta.kubernetes.io/<container_name&
gt; 注解。
以下示例演示了在构建策略中使用注解:
apiVersion: shipwright.io/v1beta1 kind: ClusterBuildStrategy metadata: name: <cluster_build_strategy_name> annotations: container.apparmor.security.beta.kubernetes.io/step-build-and-push: unconfined container.seccomp.security.alpha.kubernetes.io/step-build-and-push: unconfined spec: # ...
以下注解不会被传播:
-
kubectl.kubernetes.io/last-applied-configuration
-
clusterbuildstrategy.shipwright.io/*
-
buildstrategy.shipwright.io/*
-
build.shipwright.io/*
-
buildrun.shipwright.io/*
策略管理员可以使用策略引擎进一步限制注解的使用。
2.5. 安全引用字符串参数
当您在 BuildStrategy
或 ClusterBuildStrategy
自定义资源(CR)中定义环境变量、参数或镜像时,会使用字符串参数。在构建策略步骤中,您可以使用 $(params.your-parameter-name)
语法引用字符串参数。
您还可以在构建策略步骤中使用 $(params.your-parameter-name)
语法引用系统参数和策略参数。
在 pod 中,所有 $(params.your-parameter-name)
变量都被实际字符串替代。但是,在使用内联脚本在参数中引用字符串参数时,您必须注意这一点。例如,要安全地将参数值传递给使用脚本定义的参数,您可以选择以下方法之一:
- 使用环境变量
- 使用参数
示例:引用字符串参数到环境变量中
您可以将 string 参数传递给环境变量,而不是直接在脚本中使用它。通过使用对环境变量进行引用,您可以避免命令注入漏洞。您可以使用这种方法进行策略,如 buildah
。以下示例使用脚本中的环境变量来引用字符串参数:
apiVersion: shipwright.io/v1beta1 kind: BuildStrategy metadata: name: sample-strategy spec: parameters: - name: sample-parameter description: A sample parameter type: string steps: - name: sample-step env: - name: PARAM_SAMPLE_PARAMETER value: $(params.sample-parameter) command: - /bin/bash args: - -c - | set -euo pipefail some-tool --sample-argument "${PARAM_SAMPLE_PARAMETER}"
示例:引用字符串参数到参数中
您可以将 string 参数传递给脚本中定义的参数。适当的 shell 引用对命令注入的保护.您可以使用这种方法进行策略,如 buildah
。以下示例使用脚本中定义的参数来引用字符串参数:
apiVersion: shipwright.io/v1beta1 kind: BuildStrategy metadata: name: sample-strategy spec: parameters: - name: sample-parameter description: A sample parameter type: string steps: - name: sample-step command: - /bin/bash args: - -c - | set -euo pipefail SAMPLE_PARAMETER="$1" some-tool --sample-argument "${SAMPLE_PARAMETER}" - -- - $(params.sample-parameter)
2.6. 系统结果定义
您可以将构建策略创建的镜像大小和摘要存储到一组结果文件。当 BuildRun
资源失败时,您还可以存储用于调试的错误详情。您可以在 BuildStrategy
或 ClusterBuildStrategy
CR 中定义以下结果参数:
参数 | 描述 |
---|---|
| 表示存储镜像摘要的文件的路径。 |
| 表示存储镜像压缩大小的文件的路径。 |
| 表示存储错误原因的文件的路径。 |
| 表示存储错误消息的文件的路径。 |
以下示例显示了 BuildRun
CR 的 .status.output
字段中镜像的大小和摘要:
apiVersion: shipwright.io/v1beta1 kind: BuildRun # ... status: # ... output: digest: sha256:07626e3c7fdd28d5328a8d6df8d29cd3da760c7f5e2070b534f9b880ed093a53 size: 1989004 # ...
以下示例显示了 BuildRun
CR 的 .status.failureDetails
字段中的错误原因和消息:
apiVersion: shipwright.io/v1beta1 kind: BuildRun # ... status: # ... failureDetails: location: container: step-source-default pod: baran-build-buildrun-gzmv5-b7wbf-pod-bbpqr message: The source repository does not exist, or you have insufficient permission to access it. reason: GitRemotePrivate
2.7. 卷和卷挂载定义
构建策略包括卷和卷挂载的定义。构建策略中定义的卷支持所有常见的 volumeSource
类型。构建步骤通过创建卷挂载来引用卷。
构建步骤中定义的卷挂载允许您访问 BuildStrategy
、Build 或
资源中定义的卷。
Build
Run
构建策略中的卷 使用可覆盖
的布尔值标志,该标志默认设置为 false
。如果 Build
或 BuildRun
资源尝试覆盖 BuildStrategy
资源中定义的卷,则它将失败,因为 overridable
标志的默认值是 false
。
以下示例显示了定义 volumes
和 volumeMounts
字段的 BuildStrategy
资源:
apiVersion: shipwright.io/v1beta1 kind: BuildStrategy metadata: name: buildah spec: steps: - name: build image: quay.io/containers/buildah:v1.23.3 # ... volumeMounts: - name: varlibcontainers mountPath: /var/lib/containers volumes: - name: varlibcontainers overridable: true emptyDir: {}
第 3 章 配置构建运行
在 BuildRun
自定义资源(CR)中,您可以定义构建引用、构建规格、参数值、服务帐户、输出、保留参数和卷来配置构建运行。BuildRun
资源可用于命名空间。
要配置构建运行,请创建一个 BuildRun
资源 YAML 文件,并将其应用到 OpenShift Container Platform 集群。
3.1. 构建运行中的可配置字段
您可以使用 BuildRun
自定义资源(CR)中的以下字段:
字段 | 存在 | 描述 |
---|---|---|
| 必填 |
指定资源的 API 版本。例如,In |
| 必填 |
指定资源的类型。例如, |
| 必填 |
指明标识自定义资源定义实例的元数据。例如, |
| 选填 |
指定要使用的现有 |
| 选填 |
指定要使用的嵌入式 |
| 选填 | 指明构建镜像时要使用的服务帐户。 |
| 选填 |
定义自定义超时。此字段值覆盖 |
| 选填 |
表示一个 name-value 列表,用于指定构建策略中定义的参数值。参数值覆盖了在 |
| 选填 |
表示推送所生成的镜像的自定义位置。此字段值覆盖 |
| 选填 |
指明现有 secret 以访问容器 registry。此 secret 将添加到服务帐户中,以及 |
| 选填 |
定义您可以传递给构建容器的额外环境变量。此字段值覆盖 |
您不能在同一 CR 中使用 spec.build.name
和 spec.build.spec
字段,因为它们是互斥的。
3.2. 构建引用定义
您可以在 BuildRun
资源中配置 spec.build.name
字段,以引用指示要构建的镜像的 Build
资源。以下示例显示了配置 spec.build.name
字段的 BuildRun
CR:
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buildah-buildrun spec: build: name: buildah-build
3.3. 构建规格定义
您可以使用 spec.build.spec
字段将完整的构建规格嵌入到 BuildRun
资源中。通过嵌入规格,您可以在不创建和维护专用的 Build
自定义资源的情况下构建镜像。以下示例显示了配置 spec.build.spec
字段的 BuildRun
CR:
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: standalone-buildrun spec: build: spec: source: git: url: https://github.com/shipwright-io/sample-go.git contextDir: source-build strategy: kind: ClusterBuildStrategy name: buildah output: image: <path_to_image>
您不能在同一 CR 中使用 spec.build.name
和 spec.build.spec
字段,因为它们是互斥的。
3.4. 构建运行的参数值定义
您可以在 BuildRun
CR 中指定构建策略参数的值。如果您为那些在 Build
资源中定义的参数提供了一个名称相同的参数,则 BuildRun
资源中定义的值具有优先权。
在以下示例中,BuildRun
资源中的 cache
参数的值会覆盖 cache
参数的值,该参数在 Build
资源中定义:
apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: <your_build> namespace: <your_namespace> spec: paramValues: - name: cache value: disabled strategy: name: <your_strategy> kind: ClusterBuildStrategy source: # ... output: # ...
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: <your_buildrun> namespace: <your_namespace> spec: build: name: <your_build> paramValues: - name: cache value: registry
3.5. 服务帐户定义
您可以在 BuildRun
资源中定义服务帐户。服务帐户托管 Build
资源中引用的所有 secret,如下例所示:
apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
name: buildah-buildrun
spec:
build:
name: buildah-build
serviceAccount: pipeline 1
- 1
- 您还可以将
spec.serviceAccount
字段的值设置为".generate"
,以便在运行时生成服务帐户。生成的服务帐户的名称与BuildRun
资源的名称对应。
如果没有定义服务帐户,则 BuildRun
资源会在命名空间中使用 pipeline
服务帐户。否则,BuildRun
资源使用
默认服务帐户。
3.6. 构建运行的保留参数定义
您可以指定 BuildRun
资源中可以存在已完成的构建运行的时间。保留参数提供了一种自动清理 BuildRun
实例的方法。您可以在 BuildRun
CR 中设置以下保留参数的值:
-
retention.ttlAfterFailed
: 指定失败的构建运行可以存在的持续时间 -
retention.ttlAfterSucceeded
: 指定成功构建运行可以存在的持续时间
以下示例演示了如何在 BuildRun
CR 中定义保留参数:
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buidrun-retention-ttl spec: build: name: build-retention-ttl retention: ttlAfterFailed: 10m ttlAfterSucceeded: 10m
如果您在 BuildRun
和 Build
CR 中都定义了 retention 参数,则 BuildRun
CR 中定义的值会覆盖 Build
CR 中定义的 retention 参数的值。
3.7. 构建运行的卷定义
您可以在 BuildRun
CR 中定义卷。定义的卷覆盖 BuildStrategy
资源中指定的卷。如果卷没有被覆盖,则构建运行会失败。
如果 Build
和 BuildRun
资源覆盖同一卷,则使用 BuildRun
资源中定义的卷覆盖。
以下示例显示了使用 volumes
字段的 BuildRun
CR:
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: <buildrun_name> spec: build: name: <build_name> volumes: - name: <volume_name> configMap: name: <configmap_name>
3.8. 环境变量定义
您可以根据您的需要使用 BuildRun
CR 中的环境变量。以下示例演示了如何定义环境变量:
示例:使用环境变量定义 BuildRun
资源
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buildah-buildrun spec: build: name: buildah-build env: - name: <example_var_1> value: "<example_value_1>" - name: <example_var_2> value: "<example_value_2>"
以下示例显示了使用 Kubernetes Downward API 将 pod 作为环境变量公开的 BuildRun
资源:
示例:定义 BuildRun
资源,以将 pod 作为环境变量公开
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buildah-buildrun spec: build: name: buildah-build env: - name: <pod_name> valueFrom: fieldRef: fieldPath: metadata.name
以下示例显示了使用 Kubernetes Downward API 将容器公开为环境变量的 BuildRun
资源:
示例:定义 BuildRun
资源,以将容器公开为环境变量
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buildah-buildrun spec: build: name: buildah-build env: - name: MEMORY_LIMIT valueFrom: resourceFieldRef: containerName: <my_container> resource: limits.memory
3.9. 构建运行状态
BuildRun
资源会在镜像构建状态更改时更新,如下例所示:
示例: BuildRun 带有 Unknown 状态
$ oc get buildrun buildah-buildrun-mp99r NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME buildah-buildrun-mp99r Unknown Unknown 1s
示例:带有 True 状态的 BuildRun
$ oc get buildrun buildah-buildrun-mp99r NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME buildah-buildrun-mp99r True Succeeded 29m 20m
BuildRun
资源将与状态相关的信息存储在 status.conditions
字段中。例如,类型为 Succeeded
的条件表示资源成功完成其操作。status.conditions
字段包括包括 BuildRun
资源的大量信息,如 status、reason 和 message。
3.9.1. 构建运行状态描述
BuildRun
自定义资源(CR)在镜像构建过程中可能具有不同的状态。下表涵盖了构建运行的不同状态:
Status | 原因 | 描述 |
---|---|---|
|
|
|
|
|
|
|
| 用户需要取消构建运行。此请求触发构建运行控制器,以请求取消相关任务运行。当这个状态存在时,取消仍在进行中。 |
|
|
创建 |
|
|
|
|
|
|
|
|
|
|
| 集群中没有找到引用的集群范围的策略。 |
|
| 在集群中没有找到引用的命名空间范围的策略。 |
|
|
将 |
|
|
未找到与 |
|
|
|
|
|
您没有为构建策略中定义的一些参数提供任何值,而无需任何默认值。您必须在 |
|
| 提供了 system 参数的值,这是不允许的。 |
|
| 提供了在构建策略中未定义的参数的值。 |
|
| 为带有错误类型的构建策略参数提供了一个值。例如,如果参数在构建策略中定义为数组或字符串,您必须相应地提供一组值或直接值。 |
|
|
一个参数的值包括多个值: |
|
|
数组参数的值中的项目不包括这些值: |
|
|
参数的值包含一个 |
|
|
一个参数的值包含一个 |
|
| 在集群中没有找到引用的服务帐户。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
定义的 |
|
|
定义的 |
|
| 构建运行 pod 已从其运行的节点中驱除。 |
3.9.2. 构建运行失败
当构建运行时,您可以检查 BuildRun
CR 中的 status.failureDetails
字段,以识别 pod 或容器中故障的确切点。status.failureDetails
字段包含错误消息和失败原因。只有在构建策略中定义了消息和原因时,您才会看到失败的消息和原因。
以下示例显示了构建运行失败:
# ... status: # ... failureDetails: location: container: step-source-default pod: baran-build-buildrun-gzmv5-b7wbf-pod-bbpqr message: The source repository does not exist, or you have insufficient permission to access it. reason: GitRemotePrivate
status.failureDetails
字段还为与 Git 相关的所有操作提供错误详情。
3.9.3. 构建运行状态的步骤结果
BuildRun
资源完成其执行后,.status
字段包含从构建运行控制器生成的步骤发出的 .status.taskResults
结果。结果包括用于构建镜像的源代码的镜像摘要或提交 SHA。在 BuildRun
资源中,.status.sources
字段包含来自执行源步骤的结果,.status.output
字段包含执行输出步骤的结果。
以下示例显示了带有 Git 源步骤结果的 BuildRun
资源:
示例:一个 BuildRun
资源,其中包含 Git 源的步骤结果
# ... status: buildSpec: # ... output: digest: sha256:07626e3c7fdd28d5328a8d6df8d29cd3da760c7f5e2070b534f9b880ed093a53 size: 1989004 sources: - name: default git: commitAuthor: xxx xxxxxx commitSha: f25822b85021d02059c9ac8a211ef3804ea8fdde branchName: main
以下示例显示了带有本地源代码步骤结果的 BuildRun
资源:
示例:一个带有本地源代码步骤结果的 BuildRun
资源
# ... status: buildSpec: # ... output: digest: sha256:07626e3c7fdd28d5328a8d6df8d29cd3da760c7f5e2070b534f9b880ed093a53 size: 1989004 sources: - name: default bundle: digest: sha256:0f5e2070b534f9b880ed093a537626e3c7fdd28d5328a8d6df8d29cd3da760c7
只有在构建策略中定义输出镜像时,才会查看输出镜像的摘要和大小。
3.9.4. 构建快照
对于每个构建运行协调,如果现有任务运行是该构建运行的一部分,则 BuildRun
资源更新状态中的 buildSpec
字段。
在这个版本中,Build
资源快照会生成并嵌入到 BuildRun
资源的 status.buildSpec
字段中。因此,buildSpec
字段包含原始 Build
规格的确切副本,用于执行特定的镜像构建。通过使用构建快照,您可以查看原始的 Build
资源配置。
3.10. 构建与 Tekton 任务的关系
BuildRun
资源将镜像构造的任务委派给 Tekton TaskRun
资源,该资源运行所有步骤,直到任务完成或任务中发生失败为止。
在构建运行协调过程中,构建运行控制器会生成一个新的 TaskRun
资源。控制器在 TaskRun
资源中嵌入构建运行执行所需的步骤。嵌入的步骤在您的构建策略中定义。
3.11. 构建运行取消
您可以通过将状态设置为
来取消活跃的 BuildRun 实例。取消 BuildRun
CanceledBuildRun
实例时,底层 TaskRun
资源也会标记为已取消。
以下示例显示了为 BuildRun
资源运行的已取消构建运行:
apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buildah-buildrun spec: # [...] state: "BuildRunCanceled"
3.12. 自动构建运行删除
要自动删除构建运行,您可以在 build 或
规格中添加以下保留参数:
build
run
buildrun
TTL 参数:确保构建仅在完成后定义的持续时间内存在。-
buildrun.spec.retention.ttlAfterFailed
: 如果指定时间通过并且构建运行失败,则构建运行将被删除。 -
buildrun.spec.retention.ttlAfterSucceeded
: 如果指定时间通过并且构建运行成功,则构建运行将被删除。
-
build
TTL 参数:确保构建仅在定义的时间完成后才存在构建。-
build.spec.retention.ttlAfterFailed
:如果传递了指定时间,构建运行会被删除,构建运行失败。 -
build.spec.retention.ttlAfterSucceeded
ed :如果通过了指定时间并且构建运行成功,构建运行会被删除。
-
构建
限制参数:确保构建存在有限数量的成功或失败的构建。-
build.spec.retention.succeededLimit
: 定义构建可能存在的成功构建运行数量。 -
build.spec.retention.failedLimit
: 定义构建可以存在的失败构建运行数量。
-
第 4 章 在网络受限环境中使用构建
Red Hat OpenShift Pipelines Operator 支持在网络受限网络环境中注入代理环境变量。
4.1. 验证集群范围代理
作为集群管理员,您可以验证集群范围的代理设置。
流程
要验证集群范围代理是否已正确配置,请运行以下命令:
$ oc describe proxy/cluster
集群代理对象显示代理服务器和证书信息。
4.2. 验证代理环境变量
作为集群管理员,您可以验证环境变量,以确保为 OpenShift Container Platform 集群上的 Red Hat OpenShift 构建正确配置了代理设置。
流程
要验证环境变量,请运行以下命令:
$ oc set env deployment/openshift-builds-operator --list -n openshift-builds | grep PROXY
以下示例输出列出了
HTTP_PROXY
、HTTPS_PROXY
和NO_PROXY
环境变量:HTTP_PROXY=http://192.168.130.1:3128 HTTPS_PROXY=https://192.168.130.1:3129 NO_PROXY=.cluster.local,.svc,.testing,10.217.0.0/22,10.217.4.0/23,127.0.0.1,192.168.126.0/24,192.168.1 30.11,api-int.crc.testing,localhost
4.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.