

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 部署
<a name="gg-cli-deployment"></a>

使用 `deployment` 命令与核心设备上的本地组件进行交互。

要监控本地部署的进度，请使用 `status` 子命令。您无法使用控制台监控本地部署的进度。

**子命令**
+ [创建](#deployment-create)
+ [取消](#deployment-cancel)
+ [列表](#deployment-list)
+ [status](#deployment-status)

## 创建
<a name="deployment-create"></a>

使用指定的组件配方、构件和运行时参数创建或更新本地部署。

**摘要**  

```
greengrass-cli deployment create 
    --recipeDir {{path/to/component/recipe}}
    [--artifactDir {{path/to/artifact/folder}} ]
    [--update-config {{{component-configuration}}}]
    [--groupId {{<thing-group>}}]
    [--merge "{{<component-name>=<component-version>}}"]...
    [--runWith "{{<component-name>}}:posixUser={{<user-name>}}[:{{<group-name>}}]"]...
    [--systemLimits "{{{component-system-resource-limits}}}]"]...
    [--remove {{<component-name>}},...]
    [--failure-handling-policy {{<policy name}}[ROLLBACK, DO_NOTHING]>]
```

**参数**  
+ `--recipeDir`，`-r`。包含组件配方文件的文件夹的完整路径。
+ `--artifactDir`，`-a`。包含构件文件（您要在部署中包含的构件）的文件夹的完整路径。构件文件夹必须包含以下目录结构：

  ```
  {{/path/to/artifact/folder}}/{{<component-name>}}/{{<component-version>}}/{{<artifacts>}}
  ```
+ `--update-config`，`-c`。部署的配置参数，以 JSON 字符串或 JSON 文件形式提供。JSON 字符串应采用以下格式：

  ```
  { \
    "{{componentName}}": { \ 
      "MERGE": {"{{config-key}}": "{{config-value}}"}, \
      "RESET": ["{{path/to/reset/}}"] \
    } \
  }
  ```

  `MERGE` 和 `RESET` 区分大小写，且必须大写。
+ `--groupId`，`-g`。部署的目标事物组。
+ `--merge`，`-m`。要添加或更新的目标组件的名称和版本。必须以 `{{<component>}}={{<version>}}` 格式提供组件信息。每个要指定的其它组件均需使用单独的参数。如果需要，可使用 `--runWith` 参数提供运行组件的 `posixUser`、`posixGroup` 和 `windowsUser` 信息。
+ `--runWith`。运行通用或 Lambda 组件的 `posixUser`、`posixGroup` 和 `windowsUser` 信息。必须以 `{{<component>}}:{posixUser|windowsUser}={{<user>}}[:{{<=posixGroup>}}]` 格式提供此信息。例如，您可以指定 **HelloWorld:posixUser=ggc\_user:ggc\_group** 或 **HelloWorld:windowsUser=ggc\_user**。每个要指定的其它选项均需使用单独的参数。

  有关更多信息，请参阅 [配置运行组件的用户](configure-greengrass-core-v2.md#configure-component-user)。
+ `--systemLimits`。应用于核心设备上通用和非容器化 Lambda 组件进程的系统资源限制。您可以配置每个组件进程可使用的最大 CPU 和 RAM 使用量。指定序列化 JSON 对象或 JSON 文件的文件路径。JSON 对象必须具有以下格式。

  ```
  {  \
    "{{componentName}}": { \ 
      "cpus": {{cpuTimeLimit}}, \
      "memory": {{memoryLimitInKb}} \
    } \
  }
  ```

  您可以为每个组件配置以下系统资源限制：
  + `cpus` – <a name="system-resource-limits-cpu-definition-this"></a>此组件进程可在核心设备上使用的最大 CPU 时间。核心设备的总 CPU 时间等于 CPU 核心的设备数量。例如，在一台有 4 个 CPU 核心的核心设备上，您可以将此值设置为 `2`，以便将此组件进程限制为使用每个 CPU 核心的 50%。在一台有 1 个 CPU 核心的设备上，您可以将此值设置为 `0.25`，以便将此组件进程限制为使用 CPU 的 25%。如果将此值设置为大于 CPU 内核数的数字，则 AWS IoT Greengrass Core 软件不会限制组件的 CPU 使用率。
  + `memory` – <a name="system-resource-limits-memory-definition-this"></a>此组件进程可在核心设备上使用的最大 RAM 数量（以千字节表示）。

  有关更多信息，请参阅 [配置组件的系统资源限制](configure-greengrass-core-v2.md#configure-component-system-resource-limits)。

  此功能适用于 Linux 核心设备上的 Greengrass n [ucleus 组件](greengrass-nucleus-component.md)和 Greengrass CLI 的 v2.4.0 及更高版本。 AWS IoT Greengrass 目前不支持在 Windows 核心设备上使用此功能。
+ `--remove`。要从本地部署中移除的目标组件的名称。如果组件定义了[卸载生命周期](component-recipe-reference.md#uninstall-lifecycle-definition)步骤，则 AWS IoT Greengrass Core 软件将在移除组件之前运行卸载脚本。要移除从云部署中合并的组件，必须按以下格式提供目标事物组的组 ID：

------
#### [ Greengrass nucleus v2.4.0 and later ]

  ```
  --remove {{<component-name>}} --groupId {{<group-name>}}
  ```

------
#### [ Earlier than v2.4.0 ]

  ```
  --remove {{<component-name>}} --groupId thinggroup/{{<group-name>}}
  ```

------
+ `--failure-handling-policy`。定义部署失败时采取的操作。您可以指定两个操作：
  + `ROLLBACK` – 
  + `DO_NOTHING` – 

  此功能适用于 [Greengrass Nucleus](greengrass-nucleus-component.md) v2.11.0 及更高版本。

**输出**  
下面的示例显示运行此命令时产生的输出。  

```
$ sudo greengrass-cli deployment create \
    --merge MyApp1=1.0.0 \
    --merge MyApp2=1.0.0 --runWith MyApp2:posixUser=ggc_user \
    --remove MyApp3 \
    --recipeDir recipes/ \ 
    --artifactDir artifacts/

Local deployment has been submitted! Deployment Id: 44d89f46-1a29-4044-ad89-5151213dfcbc
```

## 取消
<a name="deployment-cancel"></a>

取消指定的部署。

摘要  

```
greengrass-cli deployment cancel
    -i {{<deployment-id>}}
```

参数  
`-i`。要取消的部署的唯一标识符。部署 ID 会在 `create` 命令的输出中返回。

Output  
+ 无

## 列表
<a name="deployment-list"></a>

检索最近 10 次本地部署的状态。

**摘要**  

```
greengrass-cli deployment list
```

**参数**  
无

**输出**  
下面的示例显示运行此命令时产生的输出。根据您的部署状态，输出会显示以下状态值之一：`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。  

```
$ sudo greengrass-cli deployment list

44d89f46-1a29-4044-ad89-5151213dfcbc: SUCCEEDED
Created on: 6/27/23 11:05 AM
```

## status
<a name="deployment-status"></a>

检索特定部署的状态。

**摘要**  

```
greengrass-cli deployment status -i {{<deployment-id>}}
```

**参数**  
`-i`。部署的 ID。

**输出**  
下面的示例显示运行此命令时产生的输出。根据您的部署状态，输出会显示以下状态值之一：`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。  

```
$ sudo greengrass-cli deployment status -i 44d89f46-1a29-4044-ad89-5151213dfcbc

44d89f46-1a29-4044-ad89-5151213dfcbc: FAILED
Created on: 6/27/23 11:05 AM
Detailed Status: {{<Detailed deployment status>}}
Deployment Error Stack: {{List of error codes}}
Deployment Error Types: {{List of error types}}
Failure Cause: {{Cause}}
```