从存储库源代码创建作业
您可以使用 IBM Cloud® Code Engine 控制台和 CLI 直接从 Git 存储库中的源代码创建作业。 了解当您 使用 Code Engine 构建映像时可用的优点。
从控制台从存储库源代码创建作业
您可以使用控制台直接从源代码创建作业。
开始之前,请 规划构建。 您还可以找到 有关创建 Dockerfile 的提示。 每次运行作业时,都会在构建过程中使用最新版本的从属构建工件 (包括 buildpack 和容器映像) 并将其包括在生成的容器映像中。
Code Engine 可以自动将映像推送 (上载) 到帐户中的 IBM Cloud® Container Registry 名称空间,甚至为您创建名称空间。 要将映像推送到其他 Container Registry 帐户或专用 Docker Hub 帐户,请参阅 访问容器注册表。
有关访问映像注册表所需的许可权的信息,请参阅 设置映像注册表的权限。
- 打开 Code Engine 控制台。
- 选择 让我们开始。
- 选择工作。
- 输入任务名称。 使用项目中独一无二的工作名称。
- 从可用项目列表中选择一个项目。 您还可以 创建新的。 请注意,您必须具有所选项目才能创建作业。
- 选择 源代码。
- 单击 指定构建详细信息。
- 选择源存储库,例如
https://github.com/IBM/CodeEngine
。 由于我们正在使用不需要凭证的样本源,因此请选择None
以进行代码存储库访问。 您可以选择提供分支名称。 如果未提供分支名称,并且将该字段留空,那么 Code Engine 将自动使用指定存储库的缺省分支。 单击 下一步。 - 选择构建的策略和构建的资源。 有关构建选项的更多信息,请参阅 规划构建。 单击下一步。
- 提供有关在何处存储构建输出的映像的注册表信息。 选择容器注册表位置,例如
IBM Registry Dallas
。 如果您的注册表是专用注册表,那么必须 设置对其的访问权。 - Select an existing 登记处秘密 or create a new one. 如果要将映像构建到帐户中的 IBM Cloud Container Registry 实例,那么可以选择
Code Engine managed secret
并让 Code Engine 为您创建和管理私钥。 - 为映像选择名称空间,名称和标记。 如果要将映像构建到帐户中的 IBM Cloud Container Registry 实例,那么可以选择现有名称空间,或者让 Code Engine 为您创建和管理名称空间。
- 单击完成。
- 修改环境变量或运行时设置的任何缺省值。 有关这些选项的更多信息,请参阅 用于创建和运行作业的选项。
- 单击创建。
- 提交构建运行后,会将构建的容器映像发送到 Container Registry,然后作业可以引用构建的映像。 当作业就绪时,单击 提交作业 以根据当前配置运行该作业。
最终会自动删除完成的构建运行。 当构建运行基于构建配置时,如果构建运行成功,那么将在 3 小时后删除此构建运行。 如果构建运行不成功,那么将在 48 小时后删除此构建运行。
现在,您已创建作业并 运行作业,您可以从作业页面查看有关作业配置和作业运行的详细信息。
需要帮助吗? 请查看 有关构建的故障诊断提示。
使用 CLI 从存储库源代码创建作业
您可以使用 CLI 直接从存储库源代码创建作业。 使用 job create
命令从 Git 存储库源构建映像,并定义作业的配置。
准备工作
- 设置 Code Engine CLI 环境。
- 创建和使用项目。
在此场景中,Code Engine 从 Git 存储库源构建映像,自动将该映像上载到容器注册表,然后使用 job create
命令创建作业配置以引用此已构建的映像。 如果映像将位于 IBM Cloud Container Registry 帐户中,那么您只需提供作业的名称和 Git 存储库的 URL。 在这种情况下,Code Engine 将为您管理名称空间。 但是,如果要使用其他容器注册表,那么必须为该容器注册表指定映像和注册表私钥。
使用 ibmcloud ce jobrun submit
命令来运行引用已构建映像的作业。 有关选项的完整列表,请参阅 ibmcloud ce job create
和 ibmcloud ce jobrun submit
命令。
有关访问映像注册表所需的许可权的信息,请参阅 设置映像注册表的权限。
-
使用
job create
命令来创建myjob-repo
作业,以引用从https://github.com/IBM/CodeEngine
构建源构建的映像。 此命令会自动构建映像并将该映像上载到帐户中的 IBM Cloud® Container Registry 名称空间,并为此作业引用此构建的映像运行作业。 通过指定--build-context-dir
选项,构建将使用helloworld
目录中的源。 此示例命令使用缺省dockerfile
策略和缺省medium
构建大小。 由于未使用--build-commit
选项指定存储库的分支名称,因此 Code Engine 会自动使用指定存储库的缺省分支。 通过添加--wait
选项,这将指定作业创建等待映像构建完成。ibmcloud ce job create --name myjob-repo --build-source https://github.com/IBM/CodeEngine --build-context-dir helloworld --wait
示例输出
Creating job 'myjob-repo'... Submitting build run 'myjob-repo-run-220420-15590196'... Creating image 'private.us.icr.io/ce--abcde-glxo4kabcde/job-myjob-repo'... Waiting for build run to complete... Build run status: 'Running' Build run completed successfully. Run 'ibmcloud ce buildrun get -n myjob-repo-run-220420-15590196' to check the build run status. OK
因为我们指定了
--wait
选项,所以job create
命令的输出提供了有关在创建作业之前构建运行的进度的信息。在此示例中,已构建的映像将上载到 IBM Cloud Container Registry中的
ce--abcde-glxo4kabcde
名称空间。下表概述了此示例中与
job create
命令配合使用的选项。 有关该命令及其选项的更多信息,请参阅ibmcloud ce job create
命令。命令描述 选项 描述 --name
作业的名称。 请使用项目中唯一的名称。 此值是必需的。
-名称必须以小写字母数字字符开头和结尾。
-名称必须不超过 63 个字符,并且可以包含字母,数字和连字符 (-)。--build-source
包含源代码的 Git 存储库的 URL; 例如, https://github.com/IBM/CodeEngine
。--build-context-dir
存储库中包含 buildpack 文件或 Dockerfile 的目录。 此值是可选的。 --wait
指定在创建作业之前等待映像构建完成。 -
(可选) 使用
job get
命令来显示有关作业的信息,包括有关构建的信息。ibmcloud ce job get --name myjob-repo
示例输出
[...] Name: myjob-repo ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2d15h Created: 2022-04-14T16:10:11-04:00 Image: private.us.icr.io/ce--abcde-glxo4kabcde/job-myjob-repo Resource Allocation: CPU: 1 Memory: 4G Registry Secrets: ce-auto-icr-private-us-south Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 Build Information: Build Run Name: myjob-repo-run-220420-15590196 Build Type: git Build Strategy: dockerfile-medium Timeout: 600 Source: https://github.com/IBM/CodeEngine Context Directory: helloworld Dockerfile: Dockerfile Build Run Summary: Succeeded Build Run Status: Succeeded Build Run Reason: All Steps have completed executing Run 'ibmcloud ce buildrun get -n myjob-repo-run-220420-15590196' for details.
-
既然已创建作业并且已构建映像,请运行引用已构建映像的作业。 此示例命令根据
myjob-repo
作业配置运行myjobrun-repo
作业。ibmcloud ce jobrun submit --name myjobrun-repo --job myjob-repo
-
(可选) 查看作业运行的详细信息。
ibmcloud ce jobrun get --name myjobrun-repo
示例输出
Getting jobrun 'myjobrun-local'... Getting instances of jobrun 'myjobrun-local'... Getting events of jobrun 'myjobrun-local'... Run 'ibmcloud ce jobrun events -n myjobrun-local' to get the system events of the job run instances. Run 'ibmcloud ce jobrun logs -f -n myjobrun-local' to follow the logs of the job run instances. OK Name: myjobrun-local ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2d15h Created: 2022-04-14T16:10:11-04:00 Job Ref: myjob-repo Image: private.us.icr.io/ce--abcde-glxo4kabcde/job-myjob-repo Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Registry Secrets: ce-auto-icr-private-us-south Runtime: Mode: task Array Indices: 0 Array Size: 1 JOP_ARRAY_SIZE Value: 1 Max Execution Time: 7200 Retry Limit: 3 Status: Completed: 90s Instance Statuses: Succeeded: 1 Conditions: Type Status Last Probe Last Transition Pending True 101s 101s Running True 91s 91s Complete True 90s 90s Events: Type Reason Age Source Messages Normal Updated 91s (x4 over 102s) batch-job-controller Updated JobRun "myjobrun-repo" Normal Completed 91s batch-job-controller JobRun completed successfully Instances: Name Running Status Restarts Age myjobrun-repo-0-0 0/1 Succeeded 0 102s
现在,您的作业是从存储库源代码创建并运行的,您可以使用 ibmcloud ce job update
命令来更新作业以满足您的需求。 有关更新作业的更多信息,请参阅 更新作业。
如果要更新源以用于作业,那么必须在 job update
命令上提供 --build-source
选项。
使用 CLI 从存储库源代码或 本地源 创建作业时,生成的构建运行不基于构建配置。 最终会自动删除完成的构建运行。 如果构建运行成功,那么将在 1 小时后删除不基于构建配置的构建运行。 如果构建运行不成功,那么将在 24 小时后删除此构建运行。 只能使用 CLI 显示有关此构建运行的信息。 无法在控制台中查看此构建运行。
后续步骤
-
创建作业后,提交作业以运行该作业。 请参阅 运行作业。 您可以多次运行作业。
-
既然已创建作业,请考虑使作业由事件驱动。 通过使用事件预订,您可以通过 定期调度 来触发作业,或者将作业设置为对诸如 文件上载 之类的事件作出反应。
-
您可以通过以下 任何 方式 更新作业 及其引用的代码,而与创建或先前更新作业的方式无关。
-
如果您具有容器映像,那么根据 Open Container Initiative(OCI)标准,您只需提供对该映像的引用,这将在创建 (或更新) 作业时指向容器注册表的位置。 您可以从 公共注册表 或 专用注册表 中的映像创建 (或更新) 作业,然后从作业运行中访问引用的映像。
如果使用
job create
命令创建了作业,并且指定了--build-source
选项以从本地或存储库源构建容器映像,并且要将作业更改为指向其他容器映像,那么必须首先从作业中除去该构建的关联。 例如,运行ibmcloud ce job update -n JOB_NAME --build-clear
。 从作业中除去构建的关联后,可以更新作业以引用其他映像。 -
如果从位于 Git 存储库中的源代码开始,那么可以选择让 Code Engine 负责从源构建映像,并使用 单个 操作创建 (或更新) 作业。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 从存储库源代码创建作业。 如果想要对映像的构建进行更多控制,那么可以选择在创建 (或更新) 作业并运行作业之前使用 Code Engine 来 构建映像。
-
如果是从本地工作站上的源代码开始,那么可以选择让 Code Engine 负责从源构建映像并使用 单个 CLI 命令创建作业。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 使用 CLI 从本地源代码创建作业。 如果要对映像构建进行更多控制,那么可以选择在创建 (或更新) 作业并运行作业之前使用 Code Engine 来 构建映像。
例如,您可以选择让 Code Engine 在为作业开发源时处理本地源的构建。 然后,在映像成熟后,可以更新作业以引用所需的特定映像。 您可以根据需要重复此过程。
运行更新后的作业时,引用的容器映像的最新版本将用于作业运行,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于作业运行。
-
要查找更多代码示例吗? 请查看 样本 IBM Cloud Code Engine GitHub 存储库。