IBM Cloud Docs
使用 buildpack 构建应用程序

使用 buildpack 构建应用程序

构建或映像构建是一种可用于从源代码创建容器映像的机制。Code Engine 支持从 Dockerfile 和 Cloud Native Buildpack 进行构建。

准备工作

所有 Code Engine 用户都需要具有现收现付帐户。 教程可能会产生成本。 使用“成本估算器”可根据您的预计使用量生成成本估算。 有关更多信息,请参阅 Code Engine 定价

设置注册表访问权

由于构建的输出是存储在容器注册表中的映像,因此您必须 设置对 Code Engine的映像注册表的访问权。 要在 Docker Hub 中存储映像,请使用 ibmcloud ce secret create --format registry 命令创建注册表访问权。 在以下示例中,使用 dockerhub 作为注册表访问权的名称,并将 Docker 中心标识指定为用户名。 对于 Docker Hub 密码,可以指定 Docker Hub 密码或 访问令牌

ibmcloud ce secret create --format registry --name dockerhub --server https://index.docker.io/v1/ --username username --password password

示例输出

Creating registry secret 'dockerhub'...
OK

有关更多信息,请参阅 添加注册表访问文档

创建构建

创建包含有关应用程序或作业的源代码的信息的构建。 信息可以包括作业或应用程序的位置和访问信息。

ibmcloud ce build create 命令不会创建映像,但会创建用于构建映像的配置。 ibmcloud ce buildrun submit 命令引用构建配置以创建映像。 在执行 buildrun submit 命令之前,不会验证或使用您在 build create 命令或 build update 命令上指定的选项来创建映像。 构建配置支持映像的多个后续构建,例如,将更改应用于源存储库时。

在以下示例中,要创建构建配置,请使用 ibmcloud ce build create 命令。 使用 tutorial-build 作为构建的名称,并将 https://github.com/IBM/CodeEngine 指定为源代码的位置,将 /s2i-buildpacks 指定为包含源的上下文目录文件夹。 使用先前为注册表访问而创建的 dockerhub 注册表私钥。 指定 buildpacks 作为用于编译源代码的构建策略,并指定 small 作为构建大小。

ibmcloud ce build create --name tutorial-build --source https://github.com/IBM/CodeEngine --commit main --context-dir /s2i-buildpacks --registry-secret dockerhub --image docker.io/<your_docker_ID>/tutorial --size small --strategy buildpacks

示例输出

Creating build 'tutorial-build'...
OK

size 选项指定构建的大小,这将确定所使用的资源量。 有效值为 smallmediumlargexlargexxlargesize 反映了应用程序或作业的源代码的构建需求。 如果由于缺少内存或磁盘空间而导致构建失败,或者速度不够快,请尝试切换到更大的大小。 更大的构建大小还意味着将更多内存和 CPU 核心分配给构建过程。 增大此大小可能会加快构建过程,但此操作也会增加成本。 有关构建的更多信息,请查看 故障诊断技巧

提交构建运行

现在已创建构建配置,您可以使用 ibmcloud ce buildrun submit 命令基于该构建配置运行构建。 在以下示例中,引用 tutorial-build 构建配置并提交构建运行。 系统将生成唯一的构建运行名称。 您可以选择使用 --name 选项为构建运行提供名称,这可能很有用,因为获取构建运行详细信息需要构建运行的名称。 在此示例中,系统会自动生成构建运行名称。

ibmcloud ce buildrun submit --build tutorial-build

示例输出

Submitting build run 'tutorial-build-run-851026-090000000'...
Run 'ibmcloud ce buildrun get -n tutorial-build-run-851026-090000000' to check the build run status.
OK

要检查构建运行的状态,请使用 buildrun get ibmcloud ce buildrun get 命令来显示构建运行的详细信息。

ibmcloud ce buildrun get --name tutorial-build-run-851026-090000000

示例输出

Getting build run 'tutorial-build-run-851026-090000000'...
[...]
OK

Name:          tutorial-build-run-851026-090000000
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           3m42s  
Created:       2021-03-14T14:31:21-05:00  

Summary:  Succeeded  
Status:   Succeeded  
Reason:   Succeeded  

当状态为 Succeeded 时,构建完成。

如果构建运行存在问题,请使用 ibmcloud ce buildrun logs 命令来显示有关构建运行的日志。

ibmcloud ce buildrun logs --buildrun tutorial-build-run-851026-090000000

示例输出

Getting build run 'tutorial-build-run-851026-090000000'...
Getting instances of build run 'tutorial-build-run-851026-090000000'...
Getting logs for build run 'tutorial-build-run-851026-090000000'...
OK

tutorial-build-run-851026-090000000-7vlrw-pod-c9t6g/step-git-source-source-7tbwh:
{"level":"info","ts":1610378702.42616,"caller":"git/git.go:165","msg":"Successfully cloned https://github.com/IBM/CodeEngine @ 6b66f2bc3e1277c2e6475608a9c50335712116e0 (grafted,  HEAD, origin/main) in path /workspace/source"}
{"level":"info","ts":1610378703.5453625,"caller":"git/git.go:203","msg":"Successfully initialized and updated submodules in path /workspace/source"}
[...]

通过使用 buildpack 构建策略从源代码成功构建容器映像!

使用容器映像

现在,已构建容器映像并将该映像推送到已配置的容器注册表位置,您可以在 Code Engine中部署该映像。 例如,您可以创建使用所创建映像的 Code Engine 应用程序。

ibmcloud ce application create --name tutorial-app --image <your_docker_ID>/tutorial

示例输出

Creating application 'tutorial-app'...
[...]

Buildpack 的后续步骤

有关更多信息,请参阅 部署应用程序

源代码项目是否使用 Dockerfile? 请遵循相同的步骤,但指定 Dockerfile 构建策略以构建应用程序或作业的映像。 有关 Dockerfile 的更多信息,请参阅 为 Code Engine

要查找更多代码示例吗? 请查看 IBM Cloud Code Engine GitHub 存储库的样本