# 通过 CLI 使用 CCD

> Follow this workflow to use CCD through the UGS command line interface, such as to authenticate, create buckets, manage entries, and handle releases.

本节举例说明如何通过命令行界面 (CLI) 使用 Cloud Content Delivery (CCD)，包括以下主题：

* [身份验证](#authentication)
* [创建存储桶](#creating-a-bucket)
* [根据一组本地文件创建条目](#creating-entries-in-the-bucket)
* [创建发布版本](#creating-a-release)
* [管理标示](#managing-badges)

> **Note:**
>
> 低于 v0.11.0 的 CLI 版本不需要 `--environment` 或 `--project` 标志。

## 身份验证##authentication

使用您的 API 密钥登录相应服务。如果您在查找 API 密钥时需要帮助，请参阅[开始使用](./cli.md#get-started)部分。

*身份验证*

```powershell
$ ucd auth login XXXXXXXXXXXX
Login successful.
```

使用 `auth info` 命令验证您是否已登录。

*登录验证*

```powershell
$ ucd auth info
Current user: Joe Smith
```

## 创建存储桶##creating-a-bucket

创建您的第一个存储桶。存储桶与单个项目相关联。此示例的 Project ID 为 `e1942cea-12df-4220-aa6d-f8c9c3ab7526`，但您需要使用实际的 Project ID 之一。如果您在查找 Project ID 时需要帮助，请参阅[开始使用](./cli.md#get-started)部分。

同样，此示例的环境 ID 为 `b5179fae-d9be-4cd4-8afb-7bfdd691eb06`，但您需要使用实际的环境 ID 之一。要查找项目的环境以及相应 ID 的列表，请访问 Dashboard（后台）并转到 **Projects（项目）**> **Project Settings（项目设置）**> **Environments（环境）**。

列出此项目的存储桶（此时应为空）。

*列出存储桶*

```powershell
$ ucd buckets list e1942cea-12df-4220-aa6d-f8c9c3ab7526 --environment=b5179fae-d9be-4cd4-8afb-7bfdd691eb06 
No buckets found for given project and environment.
```

为此项目创建一个名为 `example_bucket` 的存储桶：

*创建存储桶*

```powershell
$ ucd buckets create e1942cea-12df-4220-aa6d-f8c9c3ab7526 example_bucket --environment=b5179fae-d9be-4cd4-8afb-7bfdd691eb06
Created bucket: example_bucket (aee9ee5f-fa01-46d3-a293-731d15f066cf)
```

> **Note:**
>
> 只能通过 [Dashboard（后台）](./dashboard.md)编辑存储桶名称和添加描述。

存储桶和条目名称区分大小写。

要查看新创建的存储桶，请再次列出此项目的存储桶：

*列出存储桶*

```powershell
$ ucd buckets list e1942cea-12df-4220-aa6d-f8c9c3ab7526 --environment=b5179fae-d9be-4cd4-8afb-7bfdd691eb06
Buckets for project (e1942cea-12df-4220-aa6d-f8c9c3ab7526) in environment (b5179fae-d9be-4cd4-8afb-7bfdd691eb06):
- example_bucket (aee9ee5f-fa01-46d3-a293-731d15f066cf)
```

为了更轻松地创建条目和发布版本，请将环境和新创建的存储桶保存到本地配置中（不要在每个操作中将其作为参数提供给 CLI）。

复制您的环境 ID（在此示例中为 `b5179fae-d9be-4cd4-8afb-7bfdd691eb06`）：

```powershell
$ ucd config set environment b5179fae-d9be-4cd4-8afb-7bfdd691eb06 --project=e1942cea-12df-4220-aa6d-f8c9c3ab7526
Successfully switched to environment b5179fae-d9be-4cd4-8afb-7bfdd691eb06.
Currently active project: e1942cea-12df-4220-aa6d-f8c9c3ab7526.
```

从以上创建存储桶的消息中复制存储桶的 ID（不是存储桶名称，在此示例中为 `aee9ee5f-fa01-46d3-a293-731d15f066cf`）：

*设置配置*

```powershell
$ ucd config set bucket aee9ee5f-fa01-46d3-a293-731d15f066cf
Successfully switched to bucket aee9ee5f-fa01-46d3-a293-731d15f066cf.
Currently active project: e1942cea-12df-4220-aa6d-f8c9c3ab7526.
Currently active environment: b5179fae-d9be-4cd4-8afb-7bfdd691eb06.
Currently active bucket: aee9ee5f-fa01-46d3-a293-731d15f066cf (example_bucket).
```

CCD 会自动执行与您指定的存储桶和环境中的条目和发布版本相关的任何命令。

## 在存储桶中创建条目##creating-entries-in-the-bucket

列出这个新创建的存储桶中的条目（应为空）：

*列出条目*

```powershell
$ ucd entries list
No Entries found for current bucket.
```

同步本地文件夹中的所有文件。在此示例中，本地文件夹包含的内容是生成的 [AssetBundles](https://docs.unity3d.com/Manual/AssetBundlesIntro.html)：

*同步文件*

```powershell
$ ucd entries sync ./ServerData/StandaloneOSX
Calculating...
Added Entry: catalog_2019.07.30.18.24.34.hash
Added Entry: catalog_2019.07.30.18.24.34.json
Added Entry: remotedemodata_green.bundle
Added Entry: remotedemodata_mat1.bundle
Added Entry: remotedemodata_sphere.bundle
Added Entry: remotedemodata_unitylogo.bundle
Added Entry: remotedemodata_unitylogoprefab.bundle
Added Entry: remotedemodata_scenes_scene2.bundle
Added Entry: remotedemodata_scenes_scene.bundle
Added Entry: spaceshooterdata_done_asteroid01.bundle
Added Entry: spaceshooterdata_done_asteroid02.bundle
Added Entry: spaceshooterdata_done_asteroid03.bundle
Added Entry: spaceshooterdata_done_bolt-enemy.bundle
Added Entry: spaceshooterdata_done_bolt.bundle
Added Entry: spaceshooterdata_done_enemyship.bundle
Added Entry: spaceshooterdata_done_player.bundle
Added Entry: spaceshooterdata_engines_enemy.bundle
Added Entry: spaceshooterdata_engines_player.bundle
Added Entry: spaceshooterdata_explosion_asteroid.bundle
Added Entry: spaceshooterdata_explosion_enemy.bundle
Added Entry: spaceshooterdata_explosion_player.bundle
Added Entry: spaceshooterdata_starfield.bundle
Complete! Bytes uploaded: 5346781
```

此命令会将文件作为条目添加到存储桶中。您可以列出存储桶的内容，并查看有关每个条目的一些基本信息：

*列出存储桶的内容*

```powershell
$ ucd entries list
22 entries for current bucket (aee9ee5f-fa01-46d3-a293-731d15f066cf):
2019-08-21 14:27:03       167915 spaceshooterdata_starfield.bundle
2019-08-21 14:27:00       573539 spaceshooterdata_explosion_player.bundle
2019-08-21 14:26:56       412235 spaceshooterdata_explosion_enemy.bundle
2019-08-21 14:26:52       382630 spaceshooterdata_explosion_asteroid.bundle
2019-08-21 14:26:49       177018 spaceshooterdata_engines_player.bundle
2019-08-21 14:26:45       157215 spaceshooterdata_engines_enemy.bundle
2019-08-21 14:26:42      1085518 spaceshooterdata_done_player.bundle
2019-08-21 14:26:38      1070297 spaceshooterdata_done_enemyship.bundle
2019-08-21 14:26:34        27178 spaceshooterdata_done_bolt.bundle
2019-08-21 14:26:31        28362 spaceshooterdata_done_bolt-enemy.bundle
2019-08-21 14:26:28       231658 spaceshooterdata_done_asteroid03.bundle
2019-08-21 14:26:24       221450 spaceshooterdata_done_asteroid02.bundle
2019-08-21 14:26:20       227842 spaceshooterdata_done_asteroid01.bundle
2019-08-21 14:26:17        23016 remotedemodata_scenes_scene.bundle
2019-08-21 14:26:13        23064 remotedemodata_scenes_scene2.bundle
2019-08-21 14:26:10        10568 remotedemodata_unitylogoprefab.bundle
2019-08-21 14:26:07       462522 remotedemodata_unitylogo.bundle
2019-08-21 14:26:03         7864 remotedemodata_sphere.bundle
2019-08-21 14:26:00         6320 remotedemodata_mat1.bundle
2019-08-21 14:25:57         6320 remotedemodata_green.bundle
2019-08-21 14:25:53        44218 catalog_2019.07.30.18.24.34.json
2019-08-21 14:25:50           32 catalog_2019.07.30.18.24.34.hash
```

要获取有关特定条目的更多详细信息，请使用带有条目路径的 `entries info` 命令：

*获取条目信息*

```powershell
$ ucd entries info spaceshooterdata_starfield.bundle`
Entry Info:
Path: spaceshooterdata_starfield.bundle
Id: 8ac46783-be01-4a47-b23e-74233fc7cc09
Last Modified: 2019-08-21 14:27:03
Content Size: 167915
Content Hash: 4a3ad5b69bd489699d1909e8868a7cb1
Content Type: application/octet-stream
Content Link: …
Labels:
Metadata:
Current Version: aa0304db-fd9f-4772-9549-dfeb44cc6d6f
```

您的游戏客户端现在可以使用与条目关联的路径来请求存储桶中特定文件的内容。向位于 `<project_guid>.client-api.unity3dusercontent.com` 且特定于项目的子域发出所有游戏客户端请求。所有 URL 的请求路径都以 `/client_api/v1/` 开头。所有这些客户端请求都不需要身份验证。

要按路径获取条目（例如 `spaceshooterdata_starfield.bundle`）的内容，请输入：

`https://<project_guid>.client-api.unity3dusercontent.com/client_api/v1/buckets/aee9ee5f-fa01-46d3-a293-731d15f066cf/entry_by_path/content/?path=spaceshooterdata_starfield.bundle`

或者，要按条目 ID 获取条目的内容，请输入：

`https://<project_guid>.client-api.unity3dusercontent.com/client_api/v1/buckets/aee9ee5f-fa01-46d3-a293-731d15f066cf/entries/8ac46783-be01-4a47-b23e-74233fc7cc09/content/`

## 创建发布版本##creating-a-release

根据条目的当前状态创建发布版本：

*创建发布版本*

```powershell
$ ucd releases create -n "This is a sample note"
Created release (#1) in bucket (aee9ee5f-fa01-46d3-a293-731d15f066cf).
Id: 80653663-eb39-45e7-9323-e34b23df0d75
Created: 2019-08-21 14:27:30
...
```

这种情况下可以在请求内容时使用这些条目的确切版本，即使您稍后更新或移除这些条目也不影响。

> **Note:**
>
> 在创建发布版本期间可以使用 `-n` 标志来添加注释，但这些注释只能在后续通过 [Dashboard（后台）](./dashboard.md#releases)进行编辑。

要获取有关发布版本的更多详细信息，请使用 `releases info` 命令并提供您刚创建的发布版本的 ID：

*获取发布版本信息*

```powershell
$ ucd releases info 80653663-eb39-45e7-9323-e34b23df0d75
Release #1:
Id: 80653663-eb39-45e7-9323-e34b23df0d75
Created: 2019-08-21 14:27:30
Content Size: 123456
Content Hash: b62343cb3582a7de1286dd3cf23c3592
Notes: This is a sample note
Metadata:
Entries:
- remotedemodata_scenes_scene2.bundle  (version: d7c69bc0-5c0b-4625-8a7d-94a4972aa236)
- remotedemodata_unitylogo.bundle  (version: 97d3659f-0b74-403a-be67-02641ce2dc91)
- spaceshooterdata_done_enemyship.bundle  (version: edcedc81-80b6-4006-9732-0444898fcffa)
- remotedemodata_unitylogoprefab.bundle  (version: 4edfa2be-7fae-44c9-bb45-f601cc1130db)
- spaceshooterdata_done_bolt-enemy.bundle  (version: ef36bfa8-8b24-4b81-a329-b3fad0a0939b)
...
```

要获取您在此存储桶中生成的所有发布版本的列表，请输入：

*列出存储桶中的发布版本*

```powershell
$ ucd releases list
Releases for current bucket (aee9ee5f-fa01-46d3-a293-731d15f066cf):
2019-08-21 14:27:30  #1 (80653663-eb39-45e7-9323-e34b23df0d75)
```

现在，您可以直接引用此发布版本中包含的内容。这样就可以确保您获得 CCD 用于生成此发布版本的确切内容集，即使您稍后更改存储桶中的条目也不影响。

要按路径获取条目（例如 `spaceshooterdata_starfield.bundle`）的内容，请输入：

`https://<project_guid>.client-api.unity3dusercontent.com/client_api/v1/buckets/aee9ee5f-fa01-46d3-a293-731d15f066cf/releases/80653663-eb39-45e7-9323-e34b23df0d75/entry_by_path/content/?path=spaceshooterdata_starfield.bundle`

或者，要按条目 ID 获取条目的内容，请输入：

`https://<project_guid>.client-api.unity3dusercontent.com/client_api/v1/buckets/aee9ee5f-fa01-46d3-a293-731d15f066cf/releases/80653663-eb39-45e7-9323-e34b23df0d75/entries/8ac46783-be01-4a47-b23e-74233fc7cc09/content/`

您还可以请求与存储桶中最新发布版本对应的内容，因此客户端无需在每次 CCD 生成新的发布版本时进行更改。为此，请更新请求以使用 `release_by_badge` 途径并指定标示名称 `latest`（请参阅[管理标示](#managing-badges)）。例如：

`https://<project_guid>.client-api.unity3dusercontent.com/client_api/v1/buckets/aee9ee5f-fa01-46d3-a293-731d15f066cf/release_by_badge/latest/entry_by_path/content/?path=spaceshooterdata_starfield.bundle`

## 管理标示##managing-badges

生成一个发布版本后，您可以应用一个标示来唯一标识这个发布版本。一个标示只能指向存储桶中的一个发布版本，但您可以在不同发布版本之间移动标示。在运行时，您可以使用标示名称而不是特定的发布版本 ID 来查询内容，从而在工作流程中获得更大的灵活性。

例如，您可以将名为 `qa_latest` 的标示应用于最新发布版本以供 QA 团队使用，并在流程（手动或自动）中将该标示移动到每个新的发布版本。

要将名为 `my_first_badge` 的标示添加到您在[创建发布版本](#creating-a-release)中生成的发布版本，请使用 `badge_name` 和 `release_ID` 作为参数输入：

*添加标示*

```powershell
$ ucd badges add my_first_badge 80653663-eb39-45e7-9323-e34b23df0d75
Added badge 'my_first_badge' to release (80653663-eb39-45e7-9323-e34b23df0d75).
```

列出您在此存储桶中应用的所有标示：

*列出存储桶中的标示*

```powershell
$ ucd badges list
Badges for current bucket (aee9ee5f-fa01-46d3-a293-731d15f066cf):
2020-01-07 12:55:41  my_first_badge  (80653663-eb39-45e7-9323-e34b23df0d75)
```

与标示所引用的发布版本关联的内容可供下载。您可以采用与直接按条目 ID 下载内容类似的方式执行此下载操作。

要按路径获取条目（例如 `spaceshooterdata_starfield.bundle`）的内容，请输入：

`https://<project_guid>.client-api.unity3dusercontent.com/client_api/v1/buckets/aee9ee5f-fa01-46d3-a293-731d15f066cf/release_by_badge/my_first_badge/entry_by_path/content/?path=spaceshooterdata_starfield.bundle`

或者，要按条目 ID 获取条目的内容，请输入：

`https://<project_guid>.client-api.unity3dusercontent.com/client_api/v1/buckets/aee9ee5f-fa01-46d3-a293-731d15f066cf/release_by_badge/my_first_badge/entries/8ac46783-be01-4a47-b23e-74233fc7cc09/content/`
