如何使用 AWS CloudFormation 建立使用指定預設分支名稱的 AWS CodeCommit 儲存庫?

2 分的閱讀內容
0

我想要使用 AWS CloudFormation 建立使用指定預設分支名稱的 AWS CodeCommit 儲存庫?

簡短說明

在 2021 年 1 月 19 日,AWS 在 CodeCommit 中將預設分支名稱從 master 改成 main。當您對建立的新儲存庫執行下列動作時,這個名稱變更會影響 CodeCommit 的預設行為:

  • 使用 CodeCommit 主控台、API 或 AWS Command Line Interface (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 屬性,以指定程式碼預期的預設分支名稱。
  • 修改您的程式碼,使其成為預期的新預設主要分支名稱。

**重要事項:**名稱變更僅影響 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 Resource Name (ARN),且該儲存貯體包含您要遞交至新儲存庫內容的 .zip 檔案。將 MyKey 設定為可在 Amazon S3 中識別物件的金鑰。

2.    每當您建立新的 AWS CloudFormation 堆疊時,都可以使用更新的範本。

現在,當您建立新堆疊時,AWS CloudFormation 範本會為您建立新的儲存庫。然後,CodeCommit 會使用您在範本中定義的特定名稱將程式碼推送至預設分支。

更新您的 AWS CDK 程式碼,以使用指定的預設分支名稱建立 CodeCommit 儲存庫

更新您的 AWS CDK 程式碼,以使用 CfnRepository.CodeProperty.BranchName 屬性指定 BranchName。然後,當您的程式碼建立並推送初始遞交至該儲存庫時,BranchName 成為儲存庫的預設分支名稱。

請參閱下列 TypeScript 範例,以在建立 CodeCommit 儲存庫時設定BranchName

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 設定為您用於匯入程式碼至儲存庫中的預設分支。使用 S3 儲存貯體的名稱或 ARN 設定 MySourceCodeBucket,且該儲存貯體包含您要遞交至新儲存庫內容的 .zip 檔案。將 MyKey 設定為可在 Amazon S3 中識別物件的金鑰。

**注意:**若要將範例轉換為 AWS CDK 支援的其他語言,請參閱將 TypeScript AWS CDK 程式碼翻譯為其他語言

2.    每當您部署 AWS CloudFormation 堆疊時,都可以使用更新的 AWS CDK 程式碼。

現在,AWS CloudFormation 會為您建立新的儲存庫。然後,CodeCommit 會將 S3 物件中的程式碼推送至您在 AWS CDK 應用程式中定義特定名稱的預設分支。


AWS 官方
AWS 官方已更新 3 年前