1.5. 创建 buildpacks 构建
了解如何创建 buildpacks 构建并将创建的镜像推送到目标 registry。有两个 buildpacks ClusterBuildStrategy 选项可用于 Red Hat OpenShift 构建:
-
Buildpacks策略 -
Buildpacks-extender策略
buildpacks-extender 策略与实验性 buildpacks 扩展器生命周期阶段 兼容。您可以使用此策略,例如基于 Node.js 的构建。但是,扩展器 阶段不支持 Quarkus 或任何其他基于 Java 的构建。对于这样的构建,您可以使用 buildpacks 策略。
Buildpacks 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 您已在 OpenShift Container Platform 集群中安装了 Red Hat OpenShift Operator 的构建。
-
已安装
ocCLI。 -
已使用
oc new-project buildpacks-example命令创建存储最终应用镜像的项目。 -
可选: 已安装
shpCLI。
使用带有 buildpacks 的 shp CLI 需要您开始创建 buildpacks 构建前必须完成的额外权限设置。
流程
OPTIONAL :要使用带有 buildpacks 的
shpCLI,您必须首先向pipeline服务帐户授予权限,以便使用以下命令访问buildpacks-example项目中的镜像 registry:$ oc policy add-role-to-user system:image-puller system:serviceaccount:default:pipeline --namespace=buildpacks-example$ oc policy add-role-to-user system:image-pusher system:serviceaccount:default:pipeline --namespace=buildpacks-exampleOPTIONAL:通过切换回主工作项目来继续使用
shpCLI:$ oc project defaultOPTIONAL:通过应用权限完成
shpCLI 设置:$ oc create rolebinding allow-builds-to-push \ --clusterrole=edit \ --serviceaccount=default:pipeline \ --namespace=buildpacks-example创建
Build资源,并将其应用到 OpenShift Container Platform 集群:使用
ocCLI$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildpack-nodejs-build spec: source:1 type: Git git: url: https://github.com/redhat-openshift-builds/samples.git strategy:2 name: buildpacks kind: ClusterBuildStrategy retention: atBuildDeletion: true paramValues:3 - name: run-image4 value: paketobuildpacks/run-ubi8-base:latest - name: cnb-builder-image5 value: paketobuildpacks/builder-jammy-tiny:0.0.344 - name: source-subpath6 value: "buildpacks/nodejs" output:7 image: image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app EOF使用
shpCLI:$ shp build create buildpack-nodejs-build \ --source-git-url="https://github.com/redhat-openshift-builds/samples.git" \ --strategy-name="buildpacks" \ --output-image="image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app" \ --param-value="source-subpath=buildpacks/nodejs" \ --param-value="cnb-builder-image=paketobuildpacks/builder-jammy-tiny:0.0.344" \ --param-value="run-image=paketobuildpacks/run-ubi8-base:latest"
检查
Build资源是否已创建:使用
ocCLI:$ oc get builds.shipwright.io buildpack-nodejs-build使用
shpCLI:$ shp build list
创建
BuildRun资源,并将其应用到 OpenShift Container Platform 集群:..使用
ocCLI:$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buildpack-nodejs-buildrun namespace: builds-test spec: build: name: buildpack-nodejs-build1 EOF- 1
- 对要执行的
buildpack-nodejs-build资源的引用。
使用
shpCLI:…
$ shp build run buildpack-nodejs-buildrun --follow
+
shp CLI 版本 0.16.0 无法自动为 BuildRun 资源生成名称。您必须手动创建名称:
使用唯一名称创建
BuildRun资源$ shp buildrun create buildpack-nodejs-<buildrun_resource_name> --buildref-name buildpack-nodejs-build1 - 1
- 引用构建的标记。
按照日志操作:
$ shp buildrun logs buildpack-nodej-<buildrun_resource_name> --follow
检查
BuildRun资源是否已创建:使用
ocCLI:$ oc get buildrun buildpack-nodejs-buildrun使用
shpCLI:$ shp buildrun list
BuildRun 资源创建一个 TaskRun 资源,然后创建 Pod 来执行构建策略步骤。
验证
- 等待所有容器完成其任务。
检查 pod 是否显示
STATUS字段为Completed:$ oc get pods -w检查
TaskRun资源是否显示SUCCESS字段为True:$ oc get tr检查
BuildRun资源是否显示SUCCESS字段为True:$ oc get br注意如果构建运行失败,您可以检查
BuildRun资源中的status.failureDetails字段,以识别 pod 或容器中故障的确切点。pod 可能会切换到
NotReady状态,因为其中一个容器完成了其任务。这是预期的行为。从可以访问内部 registry 的节点运行以下命令来检查镜像是否已推送到
build.spec.output.image字段中指定的 registry:$ podman pull注意podman pull命令的输出示例可能类似如下:- 输出示例
$ image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app本例中的项目名称是
buildpacks-example,镜像名称为taxi-app。