本文档介绍了批量作业创建的基础知识:如何创建和运行基于脚本或容器映像的作业以及使用预定义变量和自定义变量。如需详细了解如何创建和运行作业,请参阅作业创建和执行概览。
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门,并在满足项目和用户的前提条件以启用 Batch。
-
如需获取创建作业所需的权限,请让管理员授予您以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
对作业的服务帐号拥有的 Service Account User (
roles/iam.serviceAccountUser
),默认为默认的 Compute Engine 服务帐号
如需详细了解如何授予角色,请参阅管理访问权限。
-
项目的 Batch Job Editor (
-
每次创建作业时,请确保该作业具有有效的网络配置。
- 如果您对工作负载或项目没有任何特定的网络要求,并且尚未修改项目的默认网络,则无需执行任何操作。
- 否则,您需要在创建作业时配置网络。请在创建基本作业之前了解如何为作业配置网络,以便您可以修改以下示例,以满足您的网络要求。
-
每次创建作业时,请确保作业具有有效的虚拟机操作系统 (OS) 环境。
- 如果您的工作负载或项目没有任何特定的虚拟机操作系统映像或启动磁盘要求,则无需执行任何操作。
- 否则,您需要准备有效的虚拟机操作系统环境选项。在创建基本作业之前,请允许虚拟机操作系统环境的默认配置,或了解如何自定义虚拟机操作系统环境,以便修改以下示例以满足您的要求。
创建基本作业
如需了解您可以为作业指定的所有字段,请参阅 projects.locations.jobs
REST 资源的参考文档。总而言之,作业由包含一个或多个任务的数组组成,这些任务均运行一个或多个可运行对象,即作业的可执行脚本和/或容器。为了介绍基础知识,本部分介绍如何创建一个仅包含一个可运行对象(一个脚本或一个容器映像)的示例作业:
这两种作业的示例作业包含一个任务组,其中包含 4 个任务的数组。每个任务都会将一条消息及其索引输出到标准输出和 Cloud Logging。此作业的定义将并行性指定为 2,这表示该作业应在 2 个虚拟机上运行,以允许同时运行 2 个任务。
创建基本容器作业
您可以选择或创建容器映像,以提供从任何计算环境中运行的作业所需的代码和依赖项。如需了解详情,请参阅使用容器映像和在虚拟机实例上运行容器。
您可以使用 Google Cloud 控制台、gcloud CLI、Batch API、Go、Java、Node.js、Python 或 C++ 创建基本的容器作业。
控制台
如需使用 Google Cloud 控制台创建基本的容器作业,请执行以下操作:
在 Google Cloud 控制台中,前往作业列表页面。
点击
创建。此时系统会打开创建批量作业页面。在左侧窗格中,已选择作业详情页面。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
example-basic-job
。配置任务详情部分:
在新建可运行对象窗口中,添加至少一个要运行此作业的脚本或容器。
例如,如需添加一个容器,请执行以下操作:
选择容器映像网址(默认)。
在容器映像网址字段中,输入您要为此作业中的每个任务运行的容器映像的网址。
例如,要使用
busybox
Docker 容器映像,请输入以下网址:gcr.io/google-containers/busybox
可选:如需替换容器映像的
ENTRYPOINT
命令,请在入口点字段中输入命令。例如,输入以下内容:
/bin/sh
可选:如需替换容器映像的
CMD
命令,请执行以下操作:选中替换容器映像的 CMD 命令复选框。随即会出现一个文本框。
在文本框中输入一个或多个命令,每个命令之间要换行分隔。
例如,输入以下命令:
-c echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks.
点击完成。
在任务计数字段中,输入此作业的任务数量。该值必须是介于
1
到每个任务组的任务数限制之间的整数。例如,输入
4
。在并行性字段中,输入要并发运行的任务数量。该数字不能大于任务总数,并且必须是
1
和每个作业的并行任务限制之间的整数。例如,输入
2
。
配置资源规范页面:
在左侧窗格中,点击资源规范。 系统随即会打开资源规范页面。
在虚拟机预配模型部分中,为此作业的虚拟机预配模型选择以下选项之一:
如果您的作业可以承受抢占,并且您想要折扣虚拟机,请选择 Spot。
否则,请选择包量。
例如,选择包量(默认)。
选择此作业的位置:
在区域字段中,选择一个区域。
例如,选择
us-central1 (Iowa)
(默认)。在可用区字段中,执行以下操作之一:
如果要将此作业限制为仅在特定区域运行,请选择一个区域。
否则,请选择不限。
例如,选择不限(默认)。
选择以下机器系列之一:
对于常见工作负载,请点击通用。
对于性能密集型工作负载,请点击计算优化。
对于内存密集型工作负载,请点击内存优化。
例如,点击通用(默认)。
在系列字段中,为此作业的虚拟机选择机器系列。
例如,如果您为机器系列选择了通用,请选择 E2(默认)。
在机器类型字段中,选择此作业的虚拟机的机器类型。
例如,如果为机器系列选择了 E2,请选择 e2-medium(2 个 vCPU,4 GB 内存)(默认)。
配置每项任务所需的虚拟机资源量:
在核心字段中,输入每个任务的 vCPUs 数量。
例如,输入
1
(默认值)。在内存字段中,输入每个任务的 RAM 容量(以 GB 为单位)。
例如,输入
0.5
(默认值)。
可选:如需查看作业配置,请点击左侧窗格中的预览。
点击创建。
作业详情页面会显示您创建的作业。
gcloud
如需使用 gcloud CLI 创建基本的容器作业,请执行以下操作:
创建一个 JSON 文件,用于指定作业的配置详情。例如,如需创建基本的容器作业,请创建一个包含以下内容的 JSON 文件。如需详细了解您可以为作业指定的所有字段,请参阅
projects.locations.jobs
REST 资源的参考文档。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { CONTAINER } } ], "computeResource": { "cpuMilli": CORES, "memoryMib": MEMORY }, "maxRetryCount": MAX_RETRY_COUNT, "maxRunDuration": "MAX_RUN_DURATION" }, "taskCount": TASK_COUNT, "parallelism": PARALLELISM } ] }
请替换以下内容:
CONTAINER
:每个任务运行的容器。CORES
:可选。要为每项任务分配的核心数(具体来说就是 vCPUs,通常代表半个物理核心),以 milliCPU 为单位。如果未指定cpuMilli
字段,则值设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每项任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的重试次数上限。该值必须是0
到10
之间的整数。如果未指定maxRetryCount
字段,则值设置为0
,这意味着不会重试任务。如需详细了解maxRetryCount
字段,请参阅自动执行任务重试。MAX_RUN_DURATION
:可选。任务在重试或失败之前可以运行的最长时间,格式为以秒为单位的值后跟s
的值,例如3600s
表示 1 小时。如果未指定maxRunDuration
字段,则其值设置为作业的最长运行时间。如需详细了解maxRunDuration
字段,请参阅使用超时限制任务和可运行对象的运行时间。TASK_COUNT
:可选。作业的任务数量。该值必须是介于1
到每个任务组的任务数限制之间的整数。如果未指定taskCount
字段,则其值设置为1
。PARALLELISM
:可选。作业并发运行的任务数量。该数字不能大于任务数,并且必须是1
和每个作业的并行任务数限制之间的整数。如果未指定parallelism
字段,则值设置为1
。
使用
gcloud batch jobs submit
命令创建作业。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
请替换以下内容:
JOB_NAME
:作业的名称。LOCATION
:作业的位置。JSON_CONFIGURATION_FILE
:包含作业配置详细信息的 JSON 文件的路径。
例如,如需创建使用 busybox
Docker 容器映像运行任务的作业,请执行以下操作:
在当前目录中创建一个名为
hello-world-container.json
且包含以下内容的 JSON 文件:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." ] } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 }, "maxRetryCount": 2, "maxRunDuration": "3600s" }, "taskCount": 4, "parallelism": 2 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] }, "labels": { "department": "finance", "env": "testing" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
运行以下命令:
gcloud batch jobs submit example-container-job \ --location us-central1 \ --config hello-world-container.json
API
如需使用 Batch API 创建基本的容器作业,请使用 jobs.create
方法。如需详细了解您可以为作业指定的所有字段,请参阅 projects.locations.jobs
REST 资源的参考文档。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
CONTAINER
}
}
],
"computeResource": {
"cpuMilli": CORES,
"memoryMib": MEMORY
},
"maxRetryCount": MAX_RETRY_COUNT,
"maxRunDuration": "MAX_RUN_DURATION"
},
"taskCount": TASK_COUNT,
"parallelism": PARALLELISM
}
]
}
请替换以下内容:
PROJECT_ID
:您的项目 ID。LOCATION
:作业的位置。JOB_NAME
:作业的名称。CONTAINER
:每个任务运行的容器。CORES
:可选。要为每项任务分配的核心数(具体来说是 vCPUs,通常代表半个物理核心),以 milliCPU 为单位。如果未指定cpuMilli
字段,则值设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每项任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的重试次数上限。该值必须是0
到10
之间的整数。如果未指定maxRetryCount
字段,则值设置为0
,这意味着不会重试任务。如需详细了解maxRetryCount
字段,请参阅自动执行任务重试。MAX_RUN_DURATION
:可选。任务在重试或失败之前可以运行的最长时间,格式为以秒为单位的值后跟s
的值,例如3600s
表示 1 小时。如果未指定maxRunDuration
字段,则其值设置为作业的最长运行时间。如需详细了解maxRunDuration
字段,请参阅使用超时限制任务和可运行对象的运行时间。TASK_COUNT
:可选。作业的任务数量,必须是介于1
和每个任务组的任务数限制之间的整数。如果未指定taskCount
字段,则值设置为1
。PARALLELISM
:可选。作业并发运行的任务数量。该数字不能大于任务数量,并且必须是1
和每个作业的并行任务限制之间的整数。如果未指定parallelism
字段,则值设置为1
。
例如,如需创建使用 busybox
Docker 容器映像运行任务的作业,请使用以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-container-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
]
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
},
"maxRetryCount": 2,
"maxRunDuration": "3600s"
},
"taskCount": 4,
"parallelism": 2
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
},
"labels": {
"department": "finance",
"env": "testing"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
其中,PROJECT_ID
是您的项目 ID。
Go
Go
如需了解详情,请参阅 Batch Go API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
如需了解详情,请参阅 Batch Java API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
Node.js
如需了解详情,请参阅 Batch Node.js API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
如需了解详情,请参阅 Batch Python API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C++
C++
如需了解详情,请参阅 Batch C++ API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
创建基本脚本作业
您可以使用 Google Cloud 控制台、gcloud CLI、Batch API、Go、Java、Node.js、Python 或 C++ 创建基本脚本作业。
控制台
如需使用 Google Cloud 控制台创建基本脚本作业,请执行以下操作:
在 Google Cloud 控制台中,前往作业列表页面。
点击
创建。此时系统会打开创建批量作业页面。在左侧窗格中,已选择作业详情页面。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
example-basic-job
。配置任务详情部分:
在新建可运行对象窗口中,添加至少一个要运行此作业的脚本或容器。
例如,如需添加一个脚本,请执行以下操作:
选择脚本。随即会出现一个文本框。
在文本框中,输入您要为此作业中的每个任务运行的脚本。
例如,输入以下脚本:
echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks.
点击完成。
在任务计数字段中,输入此作业的任务数量。该值必须是介于
1
和每个任务组的任务数限制之间的整数。例如,输入
4
。在并行性字段中,输入要并发运行的任务数量。该数字不能大于任务总数,并且必须是
1
和每个作业的并行任务限制之间的整数。例如,输入
2
。
配置资源规范页面:
在左侧窗格中,点击资源规范。 系统随即会打开资源规范页面。
在虚拟机预配模型部分中,为此作业的虚拟机预配模型选择以下选项之一:
如果您的作业可以承受抢占,并且您想要折扣虚拟机,请选择 Spot。
否则,请选择包量。
例如,选择包量(默认)。
选择此作业的位置:
在区域字段中,选择一个区域。
例如,选择
us-central1 (Iowa)
(默认)。在可用区字段中,执行以下操作之一:
如果要将此作业限制为仅在特定区域运行,请选择一个区域。
否则,请选择不限。
例如,选择不限(默认)。
选择以下机器系列之一:
对于常见工作负载,请点击通用。
对于性能密集型工作负载,请点击计算优化。
对于内存密集型工作负载,请点击内存优化。
例如,点击通用(默认)。
在系列字段中,为此作业的虚拟机选择机器系列。
例如,如果您为机器系列选择了通用,请选择 E2(默认)。
在机器类型字段中,选择此作业的虚拟机的机器类型。
例如,如果为机器系列选择了 E2,请选择 e2-medium(2 个 vCPU,4 GB 内存)(默认)。
配置每项任务所需的虚拟机资源量:
在核心字段中,输入每个任务的 vCPUs 数量。
例如,输入
1
(默认值)。在内存字段中,输入每个任务的 RAM 容量(以 GB 为单位)。
例如,输入
0.5
(默认值)。
可选:如需查看作业配置,请点击左侧窗格中的预览。
点击创建。
作业详情页面会显示您创建的作业。
gcloud
如需使用 gcloud CLI 创建基本脚本作业,请执行以下操作:
创建一个 JSON 文件,用于指定作业的配置详情。例如,如需创建基本脚本作业,请创建一个包含以下内容的 JSON 文件。如需详细了解您可以为作业指定的所有字段,请参阅
projects.locations.jobs
REST 资源的参考文档。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { SCRIPT } } ], "computeResource": { "cpuMilli": CORES, "memoryMib": MEMORY }, "maxRetryCount": MAX_RETRY_COUNT, "maxRunDuration": "MAX_RUN_DURATION" }, "taskCount": TASK_COUNT, "parallelism": PARALLELISM } ] }
请替换以下内容:
SCRIPT
:每个任务运行的脚本。CORES
:可选。要为每项任务分配的核心数(具体来说就是 vCPUs,通常代表半个物理核心),以 milliCPU 为单位。如果未指定cpuMilli
字段,则值设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每项任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的重试次数上限。该值必须是0
到10
之间的整数。如果未指定maxRetryCount
字段,则值设置为0
,这意味着不会重试任务。如需详细了解maxRetryCount
字段,请参阅自动执行任务重试。MAX_RUN_DURATION
:可选。任务在重试或失败之前可以运行的最长时间,格式为以秒为单位的值后跟s
的值,例如3600s
表示 1 小时。如果未指定maxRunDuration
字段,则其值设置为作业的最长运行时间。如需详细了解maxRunDuration
字段,请参阅使用超时限制任务和可运行对象的运行时间。TASK_COUNT
:可选。作业的任务数量。该值必须是介于1
到每个任务组的任务数限制之间的整数。如果未指定taskCount
字段,则其值设置为1
。PARALLELISM
:可选。作业并发运行的任务数量。该数字不能大于任务数,并且必须是1
和每个作业的并行任务数限制之间的整数。如果未指定parallelism
字段,则值设置为1
。
使用
gcloud batch jobs submit
命令创建作业。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
请替换以下内容:
JOB_NAME
:作业的名称。LOCATION
:作业的位置。JSON_CONFIGURATION_FILE
:包含作业配置详细信息的 JSON 文件的路径。
例如,如需创建使用脚本运行任务的作业,请执行以下操作:
在当前目录中创建一个名为
hello-world-script.json
且包含以下内容的 JSON 文件:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 }, "maxRetryCount": 2, "maxRunDuration": "3600s" }, "taskCount": 4, "parallelism": 2 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] }, "labels": { "department": "finance", "env": "testing" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
运行以下命令:
gcloud batch jobs submit example-script-job \ --location us-central1 \ --config hello-world-script.json
API
如需使用 Batch API 创建基本脚本作业,请使用 jobs.create
方法。如需详细了解您可以为作业指定的所有字段,请参阅 projects.locations.jobs
REST 资源的参考文档。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
SCRIPT
}
}
],
"computeResource": {
"cpuMilli": CORES,
"memoryMib": MEMORY
},
"maxRetryCount": MAX_RETRY_COUNT,
"maxRunDuration": "MAX_RUN_DURATION"
},
"taskCount": TASK_COUNT,
"parallelism": PARALLELISM
}
]
}
请替换以下内容:
PROJECT_ID
:您的项目 ID。LOCATION
:作业的位置。JOB_NAME
:作业的名称。SCRIPT
:每个任务运行的脚本。CORES
:可选。要为每项任务分配的核心数(具体来说是 vCPUs,通常代表半个物理核心),以 milliCPU 为单位。如果未指定cpuMilli
字段,则值设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每项任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的重试次数上限。该值必须是0
到10
之间的整数。如果未指定maxRetryCount
字段,则值设置为0
,这意味着不会重试任务。如需详细了解maxRetryCount
字段,请参阅自动执行任务重试。MAX_RUN_DURATION
:可选。任务在重试或失败之前可以运行的最长时间,格式为以秒为单位的值后跟s
的值,例如3600s
表示 1 小时。如果未指定maxRunDuration
字段,则其值设置为作业的最长运行时间。如需详细了解maxRunDuration
字段,请参阅使用超时限制任务和可运行对象的运行时间。TASK_COUNT
:可选。作业的任务数量。该值必须是介于1
到每个任务组的任务数限制之间的整数。如果未指定taskCount
字段,则值设置为1
。PARALLELISM
:可选。作业并发运行的任务数量。该数字不能大于任务数量,并且必须是1
和每个作业的并行任务限制之间的整数。如果未指定parallelism
字段,则值设置为1
。
例如,如需创建使用脚本运行任务的作业,请使用以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-script-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
},
"maxRetryCount": 2,
"maxRunDuration": "3600s"
},
"taskCount": 4,
"parallelism": 2
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
},
"labels": {
"department": "finance",
"env": "testing"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
其中,PROJECT_ID
是您的项目 ID。
Go
Go
如需了解详情,请参阅 Batch Go API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
如需了解详情,请参阅 Batch Java API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
Node.js
如需了解详情,请参阅 Batch Node.js API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
如需了解详情,请参阅 Batch Python API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C++
C++
如需了解详情,请参阅 Batch C++ API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
使用环境变量
编写要运行作业的容器映像或脚本时,请使用环境变量。 您可以使用为所有批处理作业预定义的环境变量,以及在创建作业时定义的任何自定义环境变量。
使用预定义的环境变量
默认情况下,作业中的可运行对象可以使用以下预定义环境变量:
BATCH_TASK_COUNT
:此任务组中的任务总数。BATCH_TASK_INDEX
:此任务在任务组中的索引编号。第一个任务的索引为0
,每增加一个任务,其索引就会递增。BATCH_HOSTS_FILE
:一个文件的路径,该文件列出了此任务组中所有正在运行的虚拟机实例。如需使用此环境变量,必须将requireHostsFile
字段设置为true
。BATCH_TASK_RETRY_ATTEMPT
:此任务已尝试的次数。第一次尝试执行任务时,值为0
,之后的每次重试期间都会增加。任务允许的重试总次数由maxRetryCount
字段的值决定,如果未定义此值,则此值为0
。如需详细了解重试,请参阅自动执行任务重试。
如需查看如何使用预定义环境变量的示例,请参阅本文档的创建基本作业中之前的可运行对象示例。
定义和使用自定义环境变量
(可选)您可以在作业中定义一个或多个自定义环境变量。
您可以根据所需的数据范围在特定环境中定义每个变量:
对于对所有任务具有相同值的变量,请使用以下某个变量:
如果变量的所有可运行对象具有相同的值,请使用所有可运行对象的环境(
taskSpec
的environment
子字段)。否则,如果该变量为所有可运行对象使用单独的值,请使用特定可运行对象的一个或多个环境(
runnables[]
的environment
子字段)。
否则,对于每个任务都有单独的值的数组变量,请使用所有任务的环境 (
taskEnvironment
)。
在所选环境中,您可以使用以下环境子字段之一定义每个变量的名称和值:
如需在作业配置 JSON 文件中直接定义变量,请使用标准变量 (
variables
) 子字段,如本部分所示。对于您不想加密的数据,建议使用此选项。如需使用加密数据定义变量,您可以使用 Secret Manager 或 Cloud Key Management Service:
如需使用现有 Secret Manager Secret 的加密内容,请使用 Secret 变量 (
secretVariables
) 子字段。如需详细了解如何在作业中使用 Secret,请参阅使用 Secret Manager 保护敏感数据。如需使用现有 Cloud Key Management Service 密钥的加密内容,请使用加密变量 (
encryptedVariables
) 子字段。如需详细了解 Cloud KMS 密钥,请参阅 Cloud Key Management Service 的文档。
您可以通过 gcloud CLI 或 Batch API 为作业定义和使用自定义环境变量。 以下示例说明了如何创建两个定义和使用标准变量的作业。第一个示例作业具有特定可运行对象的变量。第二个示例作业包含一个数组变量,该变量针对每项任务提供不同的值。
gcloud
如果要定义一个作业以将环境变量传递给每个任务运行的可运行对象,请参阅有关如何为可运行对象定义和使用环境变量的示例。或者,如果要定义一个作业,以根据任务索引将环境变量列表传递给不同任务,请参阅示例,了解如何为每个任务定义和使用环境变量。
为可运行对象定义和使用环境变量
如需创建使用 gcloud CLI 将环境变量传递给可运行对象的作业,请使用 gcloud batch jobs submit
命令并在作业的配置文件中指定环境变量。
例如,如需创建一个脚本作业来定义环境变量并将其传递给 3 个任务的脚本,请发出以下请求:
在当前目录中创建一个名为
hello-world-environment-variables.json
且包含以下内容的 JSON 文件:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello ${VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." }, "environment": { "variables": { "VARIABLE_NAME": "VARIABLE_VALUE" } } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 } }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] } }
请替换以下内容:
VARIABLE_NAME
:传递给每个任务的环境变量的名称。按照惯例,环境变量名称采用大写形式。VARIABLE_VALUE
:可选。传递给每个任务的环境变量的值。
运行以下命令:
gcloud batch jobs submit example-environment-variables-job \ --location us-central1 \ --config hello-world-environment-variables.json
为每个任务定义和使用环境变量
如需使用 gcloud CLI 根据任务索引将环境变量传递给任务,请使用 gcloud batch jobs submit
命令并在作业的配置文件中指定 taskEnvironments
数组字段。
例如,要创建一个作业,使其包含 3 个环境变量(名称一致且值不同)的数组,并将环境变量传递给这些任务的脚本,这些任务的索引与该数组中的环境变量索引匹配,可使用以下代码:
在当前目录中创建一个名为
hello-world-task-environment-variables.json
且包含以下内容的 JSON 文件:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello ${TASK_VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." }, } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 } }, "taskCount": 3, "taskEnvironments": [ { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_0" } }, { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_1" } }, { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_2" } } ] } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] } }
请替换以下内容:
运行以下命令:
gcloud batch jobs submit example-task-environment-variables-job \ --location us-central1 \ --config hello-world-task-environment-variables.json
API
如果要定义一个作业以将环境变量传递给每个任务运行的可运行对象,请参阅有关如何为可运行对象定义和使用环境变量的示例。或者,如果要定义一个作业,以根据任务索引将环境变量列表传递给不同任务,请参阅示例,了解如何为每个任务定义和使用环境变量。
为可运行对象定义和使用环境变量
如需创建使用 Batch API 将环境变量传递给可运行对象的作业,请使用 gcloud batch jobs submit
命令并在 environment
字段中指定环境变量。
例如,如需创建包含环境变量的作业并将其传递给 3 个任务的脚本,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/<var>PROJECT_ID</var>/locations/us-central1/jobs?job_id=example-environment-variables-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello ${VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
"environment": {
"variables": {
"VARIABLE_NAME": "VARIABLE_VALUE"
}
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
}
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4"
}
}
]
}
}
请替换以下内容:
为每个任务定义和使用环境变量
如需创建使用 Batch API 根据任务索引将环境变量传递给任务的作业,请使用 jobs.create
方法并在 taskEnvironments
数组字段中指定环境变量。
例如,如需创建一个作业,使其包含 3 个具有匹配名称和不同值的环境变量的数组,并根据其索引将环境变量传递给这 3 个任务的脚本,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/<var>PROJECT_ID</var>/locations/us-central1/jobs?job_id=example-task-environment-variables-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello ${TASK_VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
}
},
"taskCount": 3,
"taskEnvironments": [
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_0"
}
},
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_1"
}
},
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_2"
}
}
]
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
}
}
请替换以下内容: