IBM Cloud Docs
使用 CLI 从本地源代码创建作业

使用 CLI 从本地源代码创建作业

您可以使用 IBM Cloud® Code Engine CLI 直接从本地工作站上的源代码创建作业。 使用 job create 命令可从本地源构建映像,并定义作业的配置以引用此已构建映像。

提交从本地目录提取代码的构建时,源代码将打包到归档文件中。Code Engine 会自动将映像上载到帐户中的 IBM Cloud® Container Registry 名称空间,然后创建作业以引用此构建的映像。 请注意,只能将 IBM Cloud Container Registry 作为本地构建的目标。 对于此场景,您只需要提供作业的名称和本地源的路径。 有关选项的完整列表,请参阅 ibmcloud ce job create 命令。

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

您可以选择通过使用 .ceignore 文件来忽略源代码中的某些文件模式,该文件的行为类似于 .gitignore 文件。 例如,node.js 应用程序的 .ceignore 文件的条目可能包括 node_modules.npm。 有关要忽略的更多样本文件模式,请参阅 GitHub.gitignore 存储库

此场景需要 IBM Cloud® Container Registry。

准备工作

此示例使用 https://github.com/IBM/CodeEngine 样本; 尤其是 helloworld 样本。

  1. 使用以下命令将 https://github.com/IBM/CodeEngine 样本源下载到本地工作站。

    git clone https://github.com/IBM/CodeEngine
    
  2. 更改为 CodeEngine\helloworld 目录。

  3. CodeEngine\helloworld 目录中,创建 myjob-local 作业,该作业使用从本地工作站上的 CodeEngine\helloworld 源构建的映像。 此命令会自动构建映像并将其推送到帐户中的 IBM Cloud Container Registry 名称空间。 如果您没有现有的 Container Registry 名称空间,那么 Code Engine 会自动为您创建一个名称空间。 通过添加 --wait 选项,这将指定作业创建等待映像构建完成。

    ibmcloud ce job create --name myjob-local --build-source . --wait
    

    . 指示构建源位于当前工作目录中。

    示例输出

    Creating job 'myjob-local'...
    Packaging files to upload from source path '.'...
    Submitting build run 'myjob-local-run-220420-150457582'...
    Creating image 'private.us.icr.io/ce--abcde-glxo4kabcde/job-myjob-local'...
    Waiting for build run to complete...
    Build run status: 'Running'
    Build run completed successfully.
    Run 'ibmcloud ce buildrun get -n myjob-local-run-220420-150457582' to check the build run status.
    OK
    

    因为我们指定了 --wait 选项,所以 job create 命令的输出提供了有关在创建作业之前构建运行的进度的信息。

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

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

    命令描述
    选项 描述
    --name 作业的名称。 请使用项目中唯一的名称。 此值是必需的。
    -名称必须以小写字母数字字符开头和结尾。
    -名称必须不超过 63 个字符,并且可以包含字母,数字和连字符 (-)。
    --build-source 本地源的路径。
    --wait 指定在创建作业之前等待映像构建完成。
  4. (可选) 使用 job get 命令来显示有关作业的信息,包括有关构建的信息。

    ibmcloud ce job get --name myjob-local
    

    示例输出

    [...]
    Name:          myjob-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
    
    Image:                private.us.icr.io/ce--abcde-glxo4kabcde/job-myjob-local
    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-local-run-220420-150457582
      Build Type:         local
      Build Strategy:     dockerfile-medium
      Timeout:            600
      Source:             .
      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-local-run-220420-150457582' for details..
    [...]
    
  5. 既然已创建作业并且已构建映像,请运行引用已构建映像的作业。 此示例命令根据 myjob-local 作业配置运行 myjobrun-local 作业。

    ibmcloud ce jobrun submit --name myjobrun-local --job myjob-local
    
  6. (可选) 查看作业运行的详细信息。

    ibmcloud ce jobrun get --name myjobrun-local
    

    示例输出

    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-local
    Image:                private.us.icr.io/ce--abcde-glxo4kabcde/job-myjob-local
    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:          2m40s
      Instance Statuses:
        Succeeded:  1
      Conditions:
        Type      Status  Last Probe  Last Transition
        Pending   True    2m44s       2m44s
        Running   True    2m40s       2m40s
        Complete  True    2m40s       2m40s
    
    Events:
      Type    Reason     Age                    Source                Messages
      Normal  Updated    2m41s (x3 over 2m45s)  batch-job-controller  Updated JobRun "myjobrun-local"
      Normal  Completed  2m41s                  batch-job-controller  JobRun completed successfully
    
    Instances:
      Name                Running  Status     Restarts  Age
      myjobrun-local-0-0  0/1      Succeeded  0         2m45s
    

现在,您的作业是从存储库源代码创建并运行的,您可以使用 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 存储库