IBM Cloud Docs
从存储库源代码部署应用程序

从存储库源代码部署应用程序

您可以使用 IBM Cloud® Code Engine 控制台和 CLI 直接从 Git 存储库中的源代码部署应用程序。 了解当您 使用 Code Engine 构建映像时可用的优点。

从控制台从存储库源代码部署应用程序

您可以使用控制台直接从源代码部署应用程序。

开始之前,请 规划构建。 您还可以找到 有关创建 Dockerfile 的提示

Code Engine 可以自动将映像推送 (上载) 到帐户中的 IBM Cloud® Container Registry 名称空间,甚至为您创建名称空间。 要将映像上载到其他 Container Registry 帐户或专用 Docker Hub 帐户,请参阅 访问容器注册表

有关访问映像注册表所需的许可权的更多信息,请参阅 设置映像注册表的权限

  1. 打开 Code Engine 控制台。
  2. 选择 让我们开始
  3. 选择应用程序
  4. 输入应用程序的名称。 为您的应用程序取一个在项目中独一无二的名称。
  5. 从可用项目列表中选择一个项目。 您还可以 创建新的。 请注意,您必须具有所选项目才能部署应用程序。
  6. 选择 源代码
  7. 单击 指定构建详细信息
  8. 选择源存储库,例如 https://github.com/IBM/CodeEngine。 由于我们正在使用不需要凭证的样本源,因此请选择 None 以进行代码存储库访问。 您可以选择提供分支名称。 如果未提供分支名称,并且将该字段留空,那么 Code Engine 将自动使用指定存储库的缺省分支。 单击 下一步
  9. 选择构建的策略和构建的资源。 有关构建选项的更多信息,请参阅 规划构建。 单击下一步
  10. 选择容器注册表位置,例如 IBM Registry Dallas,以指定在何处存储构建输出的映像。 如果您的注册表是专用注册表,那么必须 设置对其的访问权
  11. 提供有关在何处存储构建输出的映像的注册表信息。 Select an existing 登记处秘密 or create a new one. 如果要将映像构建到帐户中的 Container Registry 实例,那么可以选择 Code Engine managed secret 并让 Code Engine 为您创建和管理私钥。
  12. 为映像选择名称空间,名称和标记。 如果要将映像构建到帐户中的 IBM Cloud Container Registry 实例,那么可以选择现有名称空间,或者让 Code Engine 为您创建和管理名称空间。
  13. 单击完成
  14. 修改应用程序的任何运行时设置或环境变量。 有关这些选项的更多信息,请参阅 用于应用程序端点可视性的选项用于部署应用程序的选项
  15. 单击创建
  16. 提交构建运行后,会将构建的容器映像发送到 Container Registry,然后应用程序会为您拉取该映像并进行部署。 在应用程序状态更改为 Ready 后,可以测试应用程序。 单击 测试应用程序,然后在“测试应用程序”窗格中单击 发送请求。 要在网页中打开应用程序,请单击应用程序 URL

最终会自动删除完成的构建运行。 当构建运行基于构建配置时,如果构建运行成功,那么将在 3 小时后删除此构建运行。 如果构建运行不成功,那么将在 48 小时后删除此构建运行。

现在,您已部署应用程序,可以查看有关应用程序修订版和任何正在运行的实例的信息以及配置详细信息。

使用 CLI 从存储库源代码部署应用程序

您可以使用 CLI 直接从存储库源代码部署应用程序。 使用 app create 命令可从 Git 存储库源构建映像,并部署应用程序以引用此已构建的映像。

准备工作

在此场景中,Code Engine 从 Git 存储库源构建映像,自动将该映像上载到容器注册表,然后创建并部署应用程序以引用此已构建的映像。 如果图像位于IBM Cloud® Container Registry账户中,您只需提供应用程序的名称和Git仓库的 URL。 在这种情况下,Code Engine会为您管理命名空间。 但是,如果要使用其他容器注册表,那么必须为该容器注册表指定映像和注册表私钥。 有关选项的完整列表,请参阅 ibmcloud ce app create 命令。

有关访问映像注册表所需的许可权的更多信息,请参阅 设置映像注册表的权限

以下示例 application create 命令创建并部署 myapp 应用程序,该应用程序引用从 https://github.com/IBM/CodeEngine 构建源构建的映像。 此命令会自动构建映像并将该映像上载到帐户中的 IBM Cloud® Container Registry 名称空间,并且应用程序会引用此已构建的映像。 通过指定 --build-context-dir 选项,构建将使用 helloworld 目录中的源。 此示例命令使用缺省 dockerfile 策略和缺省 medium 构建大小。 由于未使用 --build-commit 选项指定存储库的分支名称,因此 Code Engine 会自动使用指定存储库的缺省分支。

ibmcloud ce application create --name myapp --build-source https://github.com/IBM/CodeEngine --build-context-dir helloworld

示例输出

Creating application 'myapp'...
Submitting build run 'myapp-run-220411-13abcdefg'...
Creating image 'private.us.icr.io/ce--abcde-4svg40kna19/app-myapp:220411-1756-if8jv'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myapp-run-220411-13abcdefg' to check the build run status.
Waiting for application 'myapp' to become ready.
Configuration 'myapp' is waiting for a Revision to become ready.
Ingress has not yet been reconciled.
Waiting for load balancer to be ready.
Run 'ibmcloud ce application get -n myapp' to check the application status.
OK

https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud

请注意,application create 命令的输出提供了有关在创建和部署应用程序之前构建运行的进度的信息。

在此示例中,已构建的映像将上载到 Container Registry中的 ce--abcde-4svg40kna19 名称空间。

下表概述了此示例中与 app create 命令配合使用的选项。 有关该命令及其选项的更多信息,请参阅 ibmcloud ce app create 命令。

命令描述
选项 描述
--name 应用程序的名称。 请使用项目中唯一的名称。 此值是必需的。
-名称必须以小写字母开头。
-名称必须以小写字母数字字符结尾。
-名称必须不超过 63 个字符,并且可以包含字母,数字和连字符 (-)。
--build-source 包含源代码的Git仓库的 URL;例如,https://github.com/IBM/CodeEngine.
--build-context-dir 存储库中包含 buildpack 文件或 Dockerfile 的目录。 此值是可选的。

以下输出显示此示例的 application get 命令的结果,包括有关构建的信息。

示例输出

[...]
Name:          myapp  
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
URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
Cluster Local URL:  http://myapp.4svg40kna19.svc.cluster.local
Console URL:        https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration
Status Summary:  Application deployed successfully

Environment Variables:    
    Type     Name             Value  
    Literal  CE_API_BASE_URL  https://api.us-south.codeengine.cloud.ibm.com  
    Literal  CE_APP           myapp  
    Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
    Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Literal  CE_REGION        us-south  
    Literal  CE_SUBDOMAIN     abcdabcdab
Image:                  private.us.icr.io/ce--27fe9-4svg40kna19/app-myapp:220414-2010-sqsoj
Resource Allocation:
  CPU:                1
  Ephemeral Storage:  400M
  Memory:             4G
Registry Secrets:
  ce-auto-icr-private-us-south

Revisions:
  myapp-00001:
    Age:                23m
    Latest:             true
    Traffic:            100%
    Image:              private.us.icr.io/ce--27fe9-4svg40kna19/app-myapp:220414-2010-sqsoj (pinned to 86944c)  
    Running Instances:  0

Runtime:
  Concurrency:    100
  Maximum Scale:  10
  Minimum Scale:  0
  Timeout:        300

Build Information:
  Build Run Name:     myapp-run-220414-161009244
  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 myapp-run-220414-161009244' for details.
[...]

现在,您的应用程序是从存储库源代码创建和部署的,您可以使用 ibmcloud ce app update 命令来更新应用程序以满足您的需求。 有关更新应用程序的更多信息,请参阅 更新应用程序。 如果要更新源以用于应用程序,必须在 application update 命令上提供 --build-source 选项。

使用 CLI 从存储库源代码或 本地源 部署应用程序时,生成的构建运行不基于构建配置。 最终会自动删除完成的构建运行。 如果构建运行成功,那么将在 1 小时后删除不基于构建配置的构建运行。 如果构建运行不成功,那么将在 24 小时后删除此构建运行。 只能使用 CLI 显示有关此构建运行的信息。 无法在控制台中查看此构建运行。

后续步骤

  • 应用程序部署完成后,可通过 URL 访问应用程序

  • 您可以创建 定制域映射 并将其分配给应用程序。 有关使用定制域名跨多个区域部署应用程序的更多信息,请参阅 配置高可用性应用程序

  • 现在,您的应用程序已部署,请考虑使应用程序成为事件驱动的应用程序。 通过使用事件预订,您可以通过 定期调度 来触发应用程序,或者设置应用程序以对事件 (例如 文件上载Kafka 消息) 作出反应。

部署应用程序后,您可以使用以下 任何 方法 更新已部署的应用程序 及其引用的代码,而与创建或先前更新应用程序的方式无关:

  • 如果您具有容器映像,那么根据 Open Container Initiative(OCI)标准,您只需要提供对该映像的引用,这将指向部署应用程序时容器注册表的位置。 您可以使用 公共注册表专用注册表 中的映像来部署应用程序。

    如果使用 app create 命令创建了应用程序,并且指定了 --build-source 选项以从本地或存储库源构建容器映像,并且要将应用程序更改为指向其他容器映像,那么必须首先从应用程序中除去构建的关联。 例如,运行 ibmcloud ce application update -n APP_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 存储库的样本