

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

# 将包发布到 Amazon S3 conda 频道
<a name="publish-packages-s3-channel"></a>

您可以将 conda 包发布到亚马逊简单存储服务 (Amazon S3) 存储桶，这样 AWS Deadline Cloud（Deadline Cloud）工作人员就可以安装它们来运行作业。该`rattler-build publish`命令在 Amazon S3 上的使用方式与使用本地文件系统通道的方式相同。该命令可以生成配方并发布结果，也可以发布您已经构建的包文件。在这两种情况下，该命令都会将包上传到存储桶，并一步为频道编制索引。

该`rattler-build publish`命令 AWS 使用标准凭证链进行身份验证，因此它像使用任何 AWS 工具一样使用您的 AWS 配置。有关配置凭据的更多信息，请参阅 *AWS Command Line Interface (AWS CLI) 用户指南*中的[配置和凭据文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

## 先决条件
<a name="publish-s3-prereqs"></a>

在将包发布到 Amazon S3 之前，请完成以下先决条件：
+ **pixi 和 rattler-build — 从 pixi.sh** [安装 pixi，然后安装。](https://pixi.sh) `rattler-build`

  ```
  pixi global install rattler-build
  ```
+ **git** — 克隆示例存储库所必需的。在Windows，[git f](https://gitforwindows.org/) or Windows 还提供了一个`bash`外壳，这是一些Windows示例配方所需要的。
+ **亚马逊 S3 存储桶** — 用作 conda 通道的亚马逊 S3 存储桶。您可以使用 Deadline Cloud 场中的任务附件存储桶，也可以创建单独的存储桶。
+ **AWS 凭证**-使用`aws configure`命令或命令在您的工作站上配置凭据。`aws login`有关更多信息，请参阅 *AWS Command Line Interface 用户指南*中的[设置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html)。
+ **IAM 权限** —（可选）要缩小您的证书所拥有的权限范围，您可以使用 AWS Identity and Access Management (IAM) 策略，该策略仅授予对 Amazon S3 存储桶和您使用的频道前缀的以下权限（例如，`/Conda/*`）：
  + `s3:GetObject`
  + `s3:PutObject`
  + `s3:DeleteObject`
  + `s3:ListBucket`
  + `s3:GetBucketLocation`

## 将包裹发布到 Amazon S3 频道
<a name="publish-s3-procedure"></a>

与`s3://`目标`rattler-build publish`一起使用，将包发布到您的 Amazon S3 conda 频道。如果存储桶中不存在该频道，则会自动`rattler-build`初始化该频道。在开始之前，请确保您已完成[先决条件](#publish-s3-prereqs)。

以下示例发布了 Deadline [Cloud](https://github.com/aws-deadline/deadline-cloud-samples) 示例存储库中的 Blender 4.5 示例配方GitHub。您可以替换样本存储库中的其他食谱，也可以使用自己的食谱。

**将包发布到 Amazon S3 频道**

1. 克隆截止日期云示例存储库。

   ```
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
   ```

1. 切换到 `conda_recipes` 目录。

   ```
   cd deadline-cloud-samples/conda_recipes
   ```

1. 运行如下命令。将 *amzn-s3-demo-bucket*替换为存储桶名称。

   在 Linux and 上macOS，运行以下命令。

   ```
   rattler-build publish blender-4.5/recipe/recipe.yaml \
       --to s3://amzn-s3-demo-bucket/Conda/Default
   ```

   在 Windows (cmd) 上，运行以下命令。

   ```
   rattler-build publish blender-4.5/recipe/recipe.yaml ^
       --to s3://amzn-s3-demo-bucket/Conda/Default
   ```

   前`/Conda/Default`缀组织存储桶内的频道。您可以使用不同的前缀，但该前缀在引用该频道的所有命令和队列配置中必须一致。

要重新生成和发布更新的软件包，请添加`--build-number=+1`以自动增加内部版本号。

```
rattler-build publish blender-4.5/recipe/recipe.yaml \
    --to s3://amzn-s3-demo-bucket/Conda/Default \
    --build-number=+1
```

如果你的包配方依赖于来自特定渠道（例如 [conda-forge](https://conda-forge.org/)）的软件包，请`-c conda-forge`添加到命令中。

您也可以发布已经生成的包文件，例如，来自本地版本的`.conda`文件。将 *amzn-s3-demo-bucket*替换为存储桶名称。

```
rattler-build publish output/linux-64/blender-4.5.0-hb0f4dca_0.conda \
    --to s3://amzn-s3-demo-bucket/Conda/Default
```

## 测试软件包
<a name="publish-s3-test"></a>

发布软件包后，创建一个临时 pixi 项目以验证软件包是否正常运行。该项目通过 Amazon S3 渠道安装软件包。

**测试软件包**

1. 创建临时测试目录并使用 Amazon S3 通道初始化一个 pixi 项目。将 *amzn-s3-demo-bucket*替换为存储桶名称。

   ```
   mkdir package-test-env
   cd package-test-env
   pixi init --channel s3://amzn-s3-demo-bucket/Conda/Default
   ```

1. 将软件包添加到项目中。

   ```
   pixi add blender=4.5
   ```

1. 验证软件包是否正常运行。

   ```
   pixi run blender --version
   ```

## 清理
<a name="publish-s3-cleanup"></a>

测试完成后，移除测试项目目录。

**清理测试资源**
+ 移除测试项目目录。

  在 Linux and 上macOS，运行以下命令。

  ```
  rm -rf package-test-env
  ```

  在 Windows (cmd) 上，运行以下命令。

  ```
  rmdir /s /q package-test-env
  ```

## 调试版本
<a name="publish-s3-debug"></a>

如果构建失败，则`rattler-build`会保留构建目录，以便您可以进行调查。运行以下命令在构建环境中打开一个交互式 shell，其中所有环境变量都与生成期间一样设置。

```
rattler-build debug shell
```

在调试 shell 中，您可以修改文件、运行单独的构建命令以及添加依赖关系以隔离问题。有关更多信息，请参阅 rattler-build 文档中的[调试构建](https://rattler-build.prefix.dev/latest/debugging_builds/)。

## 为其他平台构建软件包
<a name="publish-s3-cross-platform"></a>

该`rattler-build publish`命令为运行该命令的工作站的操作系统生成软件包。如果您的 Deadline Cloud 队列使用的操作系统与您的工作站不同，或者您的软件包有其他主机要求，则您可以选择以下选项：
+ `rattler-build publish`在与目标操作系统匹配的主机上运行。例如，使用Linux正在运行的亚马逊弹性计算云 (Amazon EC2) 实例为Linux队列构建软件包。
+ 使用 Deadline Cloud 软件包生成队列在目标平台上自动构建。请参见[创建包生成队列](automate-package-builds.md#s3-channel-create-queue)。
+ （高级）使用交叉编译为不同于工作站的不同平台构建软件包。有关更多信息，请参阅 rattler-[build 文档中的交叉编译](https://rattler-build.prefix.dev/latest/compilers/#cross-compilation)。

## 后续步骤
<a name="publish-s3-next-steps"></a>

将包发布到 Amazon S3 conda 频道后，将您的 Deadline Cloud 队列配置为使用该频道：
+ [为自定义 conda 包配置生产队列权限](configure-jobs-s3-channel.md#s3-channel-configure-permissions) — 向您的生产队列授予对 Amazon S3 conda 频道的只读访问权限。
+ [向队列环境添加 conda 通道 — 配置队列环境](configure-jobs-s3-channel.md#s3-channel-add-channel)以安装来自 Amazon S3 conda 通道的软件包。