

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

# CodeArtifact 与通用包一起使用
<a name="using-generic"></a>

这些主题向您展示了如何使用和发布通用软件包 AWS CodeArtifact。

**Topics**
+ [通用程序包概述](generic-packages-overview.md)
+ [通用程序包支持的命令](generic-packages-supported-commands.md)
+ [发布和使用通用程序包](publishing-using-generic-packages.md)

# 通用程序包概述
<a name="generic-packages-overview"></a>

使用`generic`包格式，您可以上传任何类型的文件以在 CodeArtifact 存储库中创建包。通用程序包与任何特定的编程语言、文件类型或程序包管理生态系统无关。这对于存储任意构建构件（例如应用程序安装程序、机器学习模型、配置文件等）和进行版本控制非常有用。

通用程序包由程序包名称、命名空间、版本和一个或多个资产（或文件）组成。通用包可以与其他格式的包一起存在于一个 CodeArtifact 存储库中。

您可以使用 AWS CLI 或 SDK 来处理通用包。有关适用于通用包的 AWS CLI 命令的完整列表，请参阅[通用程序包支持的命令](generic-packages-supported-commands.md)。

## 通用程序包限制
<a name="generic-packages-constraints"></a>
+ 永远不会从上游存储库中提取通用程序包。只能从通用程序包发布到的存储库中提取通用程序包。
+ 他们不能声明要从中返回[ListPackageVersionDependencies](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackageVersionDependencies.html)或显示的依赖关系 AWS 管理控制台 。
+ 它们可以存储自述文件和许可文件，但它们不能被 CodeArtifact解释。这些文件中的信息不是从[GetPackageVersionReadme](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_GetPackageVersionReadme.html)或返回的 [DescribePackageVersion](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DescribePackageVersion.html)，也不会出现在中 AWS 管理控制台。
+ 与其中的所有软件包一样 CodeArtifact，资产大小和每个包的资产数量都有限制。有关中的限制和配额的更多信息 CodeArtifact，请参阅[中的配额 AWS CodeArtifact](service-limits.md)。
+ 程序包包含的资产名称必须遵循以下规则：
  + 资产名称可以使用 Unicode 字母和数字。具体而言，允许使用以下 Unicode 字符类别：小写字母 (`Ll`)、修饰符字母 (`Lm`)、其他字母 (`Lo`)、首字母大写字母 (`Lt`)、大写字母 (`Lu`)、字母数字 (`Nl`) 和十进制数字 (`Nd`)。
  + 允许使用以下特殊字符：`~!@^&()-_+[]{};,.`
  + 资产无法命名为 `.` 或 `..`
  + 空格是唯一允许的空白字符。资产名称不能以空格字符开头或结尾，也不能包括连续空格。

# 通用程序包支持的命令
<a name="generic-packages-supported-commands"></a>

您可以使用 AWS CLI 或 SDK 来处理通用包。以下 CodeArtifact 命令适用于通用包：
+ [copy-package-versions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/copy-package-versions.html) (请参阅 [在存储库之间复制程序包](copy-package.md))
+ [delete-package](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/delete-package.html)（请参阅[删除软件包 (AWS CLI)](delete-package.md#delete-package-CLI)）
+ [delete-package-versions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/delete-package-versions.html) (请参阅 [删除程序包版本 (AWS CLI)](delete-package.md#delete-package-version-CLI))
+ [describe-package](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/describe-package.html) 
+ [describe-package-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/describe-package-version.html) (请参阅 [查看和更新程序包版本详细信息和依赖项](describe-package-version.md))
+ [dispose-package-versions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/dispose-package-versions.html) (请参阅 [处置程序包版本](update-package-version-status.md#dispose-package-versions))
+ [get-package-version-asset](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/get-package-version-asset.html) (请参阅 [下载程序包版本资源](download-assets.md))
+ [list-package-version-assets](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/list-package-version-assets.html) (请参阅 [列出程序包版本资产](list-assets.md))
+ [list-package-versions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/list-package-versions.html) (请参阅 [列出程序包版本](list-packages-versions.md))
+ [list-packages](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/list-packages.html)（请参阅[列出程序包名称](list-packages.md)）
+ [publish-package-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/publish-package-version.html) (请参阅 [发布通用程序包](publishing-using-generic-packages.md#publishing-generic-packages))
+ [put-package-origin-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/put-package-origin-configuration.html) (请参阅 [编辑程序包来源控制](package-origin-controls.md))
**注意**  
您可以使用 `publish` 来源控制设置来允许或阻止在存储库中发布通用程序包名称。但是，因为无法从上游存储库提取通常程序包，所以 `upstream` 设置不适用于通用程序包。
+ [update-package-versions-status](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codeartifact/update-package-versions-status.html) (请参阅 [更新程序包版本状态](update-package-version-status.md#updating-pv-status))

# 发布和使用通用程序包
<a name="publishing-using-generic-packages"></a>

要发布通用程序包版本及其相关资产，请使用 `publish-package-version` 命令。您可以使用 `list-package-version-asset` 命令列出通用程序包的资产，然后使用 `get-package-version-asset` 下载资产。以下主题包含使用这些命令发布通用包或下载通用包资产的 step-by-step说明。

## 发布通用程序包
<a name="publishing-generic-packages"></a>

通用程序包由程序包名称、命名空间、版本和一个或多个资产（或文件）组成。本主题演示如何发布名为 `my-package`、命名空间为 `my-ns`、版本为 `1.0.0` 且包含一个名为 `asset.tar.gz` 的资产的程序包。

**先决条件：**
+  AWS Command Line Interface 使用设置和配置 CodeArtifact （请参阅[使用进行设置 AWS CodeArtifact](get-set-up-for-codeartifact.md)）
+ 拥有 CodeArtifact 域和存储库（请参阅[开始使用 AWS CLI](getting-started-cli.md)）

**发布通用程序包**

1. 使用以下命令为要上传到软件包版本的每个文件生成 SHA256 哈希值，并将该值放在环境变量中。此值用作完整性检查，用来确认在最初发送后未更改文件内容。

------
#### [ Linux ]

   ```
   export ASSET_SHA256=$(sha256sum asset.tar.gz | awk '{print $1;}')
   ```

------
#### [ macOS ]

   ```
   export ASSET_SHA256=$(shasum -a 256 asset.tar.gz | awk '{print $1;}')
   ```

------
#### [ Windows ]

   ```
   for /f "tokens=*" %G IN ('certUtil -hashfile asset.tar.gz SHA256 ^| findstr /v "hash"') DO SET "ASSET_SHA256=%G"
   ```

------

1. 调用 `publish-package-version` 来上传资产并创建新的程序包版本。
**注意**  
 如果您的程序包中包含多个资产，则可以为要上传的每个资产调用一次 `publish-package-version`。每次调用 `publish-package-version` 都包括 `--unfinished` 参数，上传最终资产时除外。省略 `--unfinished` 会将程序包版本的状态设置为 `Published`，并阻止将额外资产上传到该版本。  
 或者，在每次调用 `publish-package-version` 时都包括 `--unfinished`，然后使用 `update-package-versions-status` 命令将程序包版本的状态设置为 `Published`。

------
#### [ Linux/macOS ]

   ```
   aws codeartifact publish-package-version --domain my_domain --repository my_repo \
         --format generic --namespace my-ns --package my-package --package-version 1.0.0 \
         --asset-content asset.tar.gz --asset-name asset.tar.gz \
         --asset-sha256 $ASSET_SHA256
   ```

------
#### [ Windows ]

   ```
   aws codeartifact publish-package-version --domain my_domain --repository my_repo ^
         --format generic --namespace my-ns --package my-package --package-version 1.0.0 ^
         --asset-content asset.tar.gz --asset-name asset.tar.gz ^  
         --asset-sha256 %ASSET_SHA256%
   ```

------

   下面显示了输出。

   ```
   {
       "format": "generic",
       "namespace": "my-ns",
       "package": "my-package",
       "version": "1.0.0",
       "versionRevision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
       "status": "Published",
       "asset": {
           "name": "asset.tar.gz",
           "size": 11,
           "hashes": {
               "MD5": "41bba98d5b9219c43089eEXAMPLE-MD5",
               "SHA-1": "69b215c25dd4cda1d997a786ec6EXAMPLE-SHA-1",
               "SHA-256": "43f24850b7b7b7d79c5fa652418518fbdf427e602b1edabe6EXAMPLE-SHA-256",
               "SHA-512": "3947382ac2c180ee3f2aba4f8788241527c8db9dfe9f4b039abe9fc560aaf5a1fced7bd1e80a0dca9ce320d95f0864e0dec3ac4f2f7b2b2cbEXAMPLE-SHA-512"
           }
       }
   }
   ```

## 列出通用程序包资产
<a name="listing-generic-package-assets"></a>

要列出通用程序包中包含的资产，请使用 `list-package-version-assets` 命令。有关更多信息，请参阅 [列出程序包版本资产](list-assets.md)。

以下示例列出程序包 `my-package` 的版本 `1.0.0` 的资产。

**列出程序包版本资产**
+ 调用 `list-package-version-assets` 来列出通用程序包中包含的资产。

------
#### [ Linux/macOS ]

  ```
  aws codeartifact list-package-version-assets --domain my_domain \
    --repository my_repo --format generic --namespace my-ns \
    --package my-package --package-version 1.0.0
  ```

------
#### [ Windows ]

  ```
  aws codeartifact list-package-version-assets --domain my_domain ^
    --repository my_repo --format generic --namespace my-ns ^
    --package my-package --package-version 1.0.0
  ```

------

  下面显示了输出。

  ```
  {
      "assets": [
          {
              "name": "asset.tar.gz",
              "size": 11,
              "hashes": {
                  "MD5": "41bba98d5b9219c43089eEXAMPLE-MD5",
                  "SHA-1": "69b215c25dd4cda1d997a786ec6EXAMPLE-SHA-1",
                  "SHA-256": "43f24850b7b7b7d79c5fa652418518fbdf427e602b1edabe6EXAMPLE-SHA-256",
                  "SHA-512": "3947382ac2c180ee3f2aba4f8788241527c8db9dfe9f4b039abe9fc560aaf5a1fced7bd1e80a0dca9ce320d95f0864e0dec3ac4f2f7b2b2cbEXAMPLE-SHA-512"
              }
          }
      ],
      "package": "my-package",
      "format": "generic",
      "namespace": "my-ns",
      "version": "1.0.0",
      "versionRevision": "REVISION-SAMPLE-1-C7F4S5E9B772FC"
  }
  ```

## 下载通用程序包资产
<a name="downloading-generic-package-assets"></a>

要从通用程序包下载资产，请使用 `get-package-version-asset` 命令。有关更多信息，请参阅 [下载程序包版本资源](download-assets.md)。

以下示例将资产 `asset.tar.gz` 从程序包 `my-package` 的版本 `1.0.0` 下载到当前工作目录中也命名为 `asset.tar.gz` 的文件中。

**下载程序包版本资产**
+ 调用 `get-package-version-asset` 从通用程序包下载资产。

------
#### [ Linux/macOS ]

  ```
  aws codeartifact get-package-version-asset --domain my_domain \
    --repository my_repo --format generic --namespace my-ns --package my-package \
    --package-version 1.0.0 --asset asset.tar.gz \ 
    asset.tar.gz
  ```

------
#### [ Windows ]

  ```
  aws codeartifact get-package-version-asset --domain my_domain ^
    --repository my_repo --format generic --namespace my-ns --package my-package ^
    --package-version 1.0.0 --asset asset.tar.gz ^
    asset.tar.gz
  ```

------

  下面显示了输出。

  ```
  {
      "assetName": "asset.tar.gz",
      "packageVersion": "1.0.0",
      "packageVersionRevision": "REVISION-SAMPLE-1-C7F4S5E9B772FC"
  }
  ```