如何通过 AWS CloudFormation 创建一个使用指定默认分支名称的 AWS CodeCommit 存储库?

上次更新日期:2021 年 1 月 29 日

我想通过 AWS CloudFormation 创建一个使用指定默认分支名称的 AWS CodeCommit 存储库。

简短描述

2021 年 1 月 19 日,AWS 将 CodeCommit 中默认分支的名称从 master 更改为 main。当您对新建的存储库执行以下操作时,此名称更改会影响 CodeCommit 的默认行为:

  • 使用 CodeCommit 控制台、API 或 AWS 命令行界面 (AWS CLI) 提交到存储库。
  • 使用 AWS CloudFormation 模板创建存储库,并在创建模板时添加代码。
    重要提示:这会影响 2021 年 2 月 8 日之后创建的 AWS CloudFormation 模板。
  • 使用 AWS Cloud Development Kit (AWS CDK) 创建并提交存储库。
    重要提示:这会影响 2021 年 2 月 8 日之后创建的 AWS CDK 模板。

为避免名称更改所带来的任何影响,您可以执行以下任一操作:

  • 使用 AWS CloudFormation 模板中 AWS::CodeCommit::Repository Code 资源的 BranchName 属性来指定代码所需的默认分支的名称。
  • 修改您的代码,以便获取新的默认 main 分支名称。

重要提示:名称更改仅影响 2021 年 2 月 8 日之后使用 AWS CloudFormation 或 AWS CDK 模板创建的存储库。

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

解决方法

根据您使用的是 AWS CloudFormation 还是 AWS CDK,选择以下解决方案之一。

更新 AWS CloudFormation 模板以创建具有特定名称的默认分支

1.    更新堆栈模板,然后将 CodeCommit 存储库的 BranchName 属性设置为您的分支名称。请参阅以下 YAML 和 JSON 示例:

YAML:

  MyRepoResource:
    Type: AWS::CodeCommit::Repository
    Properties:
      RepositoryName: MyRepo
      Code:
        BranchName: DefaultBranchName
        S3: 
          Bucket: MySourceCodeBucket,
          Key: MyKey

JSON:

 {
    "MyRepoResource": {
        "Type": "AWS::CodeCommit::Repository",
        "Properties": {
            "RepositoryName": "MyRepo",
            "Code": {
                "BranchName": "DefaultBranchName",
                "S3": {
                    "Bucket": "MySourceCodeBucket",
                    "Key": "MyKey"
                }
            }
        }
    }
}

重要提示:在 YAML 和 JSON 模板中,进行以下更新:

MyRepo 设置为您正在创建的 CodeCommit 存储库的名称。将 DefaultBranchName 设置为用于将代码导入存储库的默认分支。将 MySourceCodeBucket 设置为 Amazon Simple Storage Service (Amazon S3) 存储桶的名称或 Amazon 资源名称 (ARN),该存储桶包含带有您要提交到新存储库的内容的 .zip 文件。将 MyKey 设置为识别 Amazon S3 中对象的密钥。

2.    无论何时创建新的 AWS CloudFormation 堆栈,都可以使用更新的模板。

现在,当您创建新堆栈时,AWS CloudFormation 模板将为您创建一个新的存储库。然后,CodeCommit 会将您的代码推送到默认分支,该分支使用您在模板中定义的特定名称。

更新 AWS CDK 代码以创建具有指定默认分支名称的 CodeCommit 存储库

使用 CfnRepository.CodeProperty.BranchName 属性更新 AWS CDK 代码以指定 BranchName。然后,当您创建代码并将初始提交推送到存储库时,BranchName 将成为存储库默认分支的名称。

有关在创建 CodeCommit 存储库时设置 BranchName,请参阅以下 TypeScript 示例:

import * as cdk from '@aws-cdk/core';
import codecommit = require('@aws-cdk/aws-codecommit');
export class CdkCodecommitStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // The code creates a new CodeCommit repository with Branch name DefaultBranchName
      new codecommit.CfnRepository(this, 'MyRepoResource', {
            repositoryName: "MyRepo",
            code: {
              "branchName": "DefaultBranchName",
              "s3": {
                "bucket": "MySourceCodeBucket",
                "key": "MyKey"
              }
            },
        });
  }
}

重要提示:在前面的 TypeScript 示例中,进行以下更新:

MyRepo 设置为您正在创建的 CodeCommit 存储库的名称。将 DefaultBranchName 设置为用于将代码导入存储库的默认分支。将 MySourceCodeBucket 设置为 S3 存储桶的名称或 ARN,该存储桶包含带有您要提交到新存储库的内容的 .zip 文件。将 MyKey 设置为识别 Amazon S3 中对象的密钥。

注意:要将示例转换为 AWS CDK 支持的其他语言,请参阅 Translating TypeScript AWS CDK code to other languages.

2.    无论何时部署 AWS CloudFormation 堆栈,都可以使用更新的 AWS CDK 代码。

现在,AWS CloudFormation 为您创建了一个新的存储库。然后,CodeCommit 会将 S3 对象中的代码推送到默认分支,该分支具有您在 AWS CDK 应用程序中定义的特定名称。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?