

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

# 对构造使用发布和版本控制
<a name="version-control-best-practices"></a>

## 的版本控制 AWS CDK
<a name="version-control"></a>

AWS CDK 通用结构可以由多个团队创建，并在整个组织中共享以供使用。通常，开发人员会在其常用 AWS CDK 结构中发布新功能或错误修复。这些构造被 AWS CDK 应用程序或任何其他现有 AWS CDK 构造用作依赖关系的一部分。出于这个原因，开发人员必须独立使用适当的语义版本更新和发布他们的构造。下游 AWS CDK 应用程序或其他 AWS CDK 构造可以更新其依赖关系以使用新发布的 AWS CDK 构造版本。

语义版本控制（Semver）是一组规则或方法，用于为计算机软件提供唯一的软件编号。版本的定义如下：
+ 主要版本包含不兼容的 API 更改或重大更改。
+ 次要版本包含以向后兼容方式添加的功能。
+ 修补版本包含向后兼容的错误修复。

有关语义版本控制的更多信息，请参阅语[义版本控制文档中的语义版本控制规范 (SemVer)](https://semver.org/)。

## AWS CDK 构造的存储库和打包
<a name="repo-packaging"></a>

由于 AWS CDK 构造由不同的团队开发并由多个 AWS CDK 应用程序使用，因此您可以为每个 AWS CDK 构造使用单独的存储库。这也可以帮助您实施访问控制。每个存储库可以包含与同一个 AWS CDK 构造相关的所有源代码及其所有依赖关系。通过将单个应用程序（即 AWS CDK 构造）保存在单个存储库中，可以缩小部署期间更改的影响范围。

 AWS CDK 不仅可以生成用于部署基础设施的 CloudFormation 模板，还可以捆绑诸如 Lambda 函数和 Docker 映像之类的运行时资产，并将它们与您的基础设施一起部署。不仅可以将定义基础架构的代码和实现运行时逻辑的代码组合到一个构造中，而且这是一种最佳实践。这两种代码不需要存放在单独的存储库中，甚至不需要放在单独的软件包中。

要跨存储库边界使用软件包，你必须有一个私有软件包存储库，类似于 npm、或 Maven Central PyPi，但位于组织内部。还必须有一个构建、测试软件包并将其发布到私有软件包存储库的发布流程。您可以使用本地虚拟机 (VM) 或 Amazon S3 创建私有存储库，例如 PyPi 服务器。在设计或创建私有软件包注册表时，必须考虑高可用性和可扩展性带来的服务中断风险。托管在云端以存储软件包的无服务器托管服务可以大大减少维护开销。例如，您可以使用[AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/)托管大多数流行编程语言的软件包。您还可以使用 CodeArtifact 设置外部存储库连接并在其中进行复制 CodeArtifact。

对软件包存储库中软件包的依赖由您的语言的包管理器管理（例如， TypeScript 或 JavaScript 应用程序的 npm）。软件包管理器会记录应用程序所依赖的每个软件包的具体版本，然后让您以受控方式升级这些依赖项，从而确保构建的可重复性，如下图所示。

![软件包依赖项](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/images/dependencies.png)


## 为... 构造发行版 AWS CDK
<a name="construct-releasing"></a>

我们建议您创建自己的自动化管道来构建和发布新的 AWS CDK 构造版本。如果您建立了适当的拉取请求审批流程，那么一旦您提交并将源代码推送到存储库的主分支，管道就可以构建和创建候选发布版本。在发布生产就绪版本之前，可以将该版本推送到该版本 CodeArtifact 并进行测试。或者，在将代码与主分支合并之前，可以在本地测试您的新 AWS CDK 构造版本。这会使得管道发布生产就绪版本。考虑到共享构造和软件包必须独立于使用应用程序进行测试，就好像它们是向公众发布一样。

下图显示了一个示例 AWS CDK 版本发布管道。

![](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/images/release_pipeline.png)


您可以使用以下示例命令来构建、测试和发布 npm 软件包。首先，运行以下命令，登录到构件存储库。

```
aws codeartifact login --tool npm --domain <Domain Name> --domain-owner $(aws sts get-caller-identity --output text --query 'Account')  \
--repository <Repository Name> --region <AWS Region Name>
```

然后，完成以下步骤：

1. 根据 `package.json`** **文件安装所需的软件包：`npm install`

1. 创建候选发布版本：`npm version prerelease --preid rc`

1. 构建 npm 软件包：`npm run build`

1. 测试 npm 软件包：`npm run test`

1. 发布 npm 软件包：`npm publish`