Package 组原产地控制 - CodeArtifact

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

Package 组原产地控制

Package Origin 控制用于配置软件包版本如何进入域名。您可以在包组上设置源控件,以配置与该包组关联的每个软件包的版本如何进入域中的指定存储库。

Package group 原产地控制设置包括以下内容:

  • 限制设置:这些设置定义了包是否可以 CodeArtifact 从发布、内部上游或外部公共存储库进入存储库。

  • 允许的存储库列表:每个限制设置都可以设置为允许特定的存储库。如果将限制设置设置为允许特定存储库,则该限制将具有相应的允许存储库列表。

注意

包裹组的起源控制设置与单个包裹的起源控制设置略有不同。有关包裹来源控制设置的更多信息,请参阅程序包来源控制设置

限制设置

包群组的来源控制设置的限制设置决定了与该组关联的包如何进入域中的存储库。

发布

PUBLISH设置用于配置是否可以使用包管理器或类似工具将软件包版本直接发布到域中的任何存储库。

  • 允许:Package 版本可以直接发布到所有存储库。

  • BLOCK:Package 版本不能直接发布到任何存储库。

  • ALLOW_SPEC IFIC_REPOSITORYS:软件包版本只能直接发布到允许发布的存储库列表中指定的存储库中。

  • IN HERIED:该PUBLISH设置继承自第一个父包组,但设置不是INHERIT

外部_上游

EXTERNAL_UPSTREAM设置用于配置当软件包管理器请求时,是否可以从外部公共存储库中提取软件包版本。有关支持的外部存储库的列表,请参阅支持的外部连接存储库

  • 允许:任何软件包版本都可以通过外部连接从公共来源提取到所有存储库中。

  • BLOCK:Package 版本不能通过外部连接从公共来源提取到任何存储库中。

  • ALLOW_SPEC IFIC_REPOSITORYS:Package 版本只能从公共来源提取到允许的外部上游存储库列表中指定的存储库中。

  • IN HERIED:该EXTERNAL_UPSTREAM设置继承自第一个父包组,但设置不是INHERIT

内部_上游

INTERNAL_UPSTREAM设置用于配置当软件包管理器请求时,是否可以从同一 CodeArtifact 域的内部上游存储库中保留软件包版本。

  • 允许:任何软件包版本都可以从配置为上游 CodeArtifact 存储库的其他存储库中保留。

  • BLOCK:不能从配置为上游 CodeArtifact 存储库的其他存储库中保留 Package 版本。

  • ALLOW_SPECIFIC_REPOSITORY:Package 版本只能从配置为上游存储库 CodeArtifact 的其他存储库中保留到内部上游允许的存储库列表中指定的存储库中。

  • IN HERIED:该INTERNAL_UPSTREAM设置继承自第一个父包组,但设置不是INHERIT

允许的存储库列表

当限制设置配置为时ALLOW_SPECIFIC_REPOSITORIES,软件包组将包含随附的允许存储库列表,其中包含该限制设置允许使用的存储库列表。因此,一个软件包组包含 0 到 3 个允许的存储库列表,每个设置都有一个列表配置为ALLOW_SPECIFIC_REPOSITORIES

将存储库添加到包组的允许存储库列表时,必须指定将其添加到哪个允许的存储库列表中。

可能允许的存储库列表如下:

  • EXTERNAL_UPSTREAM:允许或阻止从已添加存储库中的外部存储库中提取软件包版本。

  • INTERNAL_UPSTREAM:允许或阻止从已添加存储库中的其他 CodeArtifact 存储库中提取软件包版本。

  • PUBLISH:允许或阻止将包版本从包管理器直接发布到已添加的存储库。

编辑包裹组起源控制设置

要为包裹组添加或编辑源控件,请执行以下过程中的步骤。有关包裹组来源控制设置的信息,请参阅限制设置允许的存储库列表

添加或编辑包裹组来源控件 (CLI)
  1. 如果还没有,请 AWS CLI 按照中的步骤进行配置使用进行设置 AWS CodeArtifact

  2. 使用 update-package-group-origin-configuration 命令来添加或编辑程序包来源控制。

    • 对于--domain,请输入包含要更新的软件包组的 CodeArtifact 域。

    • 对于--domain-owner,请输入域名所有者的账号。

    • 对于--package-group,输入要更新的包裹组。

    • 对于--restrictions,输入代表源控制限制的键值对。

    • 对于--add-allowed-repositories,输入包含限制类型和存储库名称的 JSON 对象,以添加到相应限制允许的存储库列表中。

    • 对于--remove-allowed-repositories,输入包含限制类型和存储库名称的 JSON 对象,以便从相应限制允许的存储库列表中移除。

    aws codeartifact update-package-group-origin-configuration \ --domain my_domain \ --domain-owner 111122223333 \ --package-group '/nuget/*' \ --restrictions INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \ --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo \ --remove-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2

    以下示例在一个命令中添加了多个限制和多个存储库。

    aws codeartifact update-package-group-origin-configuration \ --domain my_domain \ --domain-owner 111122223333 \ --package-group '/nuget/*' \ --restrictions PUBLISH=BLOCK,EXTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES,INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \ --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2 \ --remove-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2

Package group 起源控制配置示例

以下示例显示了常见软件包管理场景的包源控制配置。

允许发布带有私有名称的软件包,但不允许摄取

这种情况很可能是包管理中的常见场景:

  • 允许将带有私有名称的软件包从包管理器发布到您域中的存储库,并阻止它们从外部公共存储库提取到您域中的存储库。

  • 允许将所有其他包从外部公共存储库提取到您域中的存储库,并阻止它们通过包管理器发布到您域中的存储库。

为此,您应该使用包含私有名称和原始设置 PUBLISHALLOW、EXTERNAL_UPSTREAM:BLOC K 和 INTERNAL_UPSTREAM:ALLO W 的模式配置包组。这将确保具有私有名称的软件包可以直接发布,但不能从外部存储库中获取。

以下 AWS CLI 命令使用与所需行为相匹配的起源限制设置创建和配置软件包组:

要创建包组,请执行以下操作:

aws codeartifact create-package-group \ --domain my_domain \ --package-group /npm/space/anycompany~ \ --domain-owner 111122223333 \ --contact-info contact@email.com | URL \ --description "my package group"

要更新包裹组的起源配置,请执行以下操作:

aws codeartifact update-package-group-origin-configuration \ --domain my_domain \ --domain-owner 111122223333 \ --package-group '/npm/space/anycompany~' \ --restrictions PUBLISH=ALLOW,EXTERNAL_UPSTREAM=BLOCK,INTERNAL_UPSTREAM=ALLOW

允许通过一个存储库从外部存储库摄取

在这种情况下,您的域名有多个存储库。在这些存储库中,repoA有上游连接repoB,该上游连接与公共存储库有外部连接npmjs.com,如下所示:

repoA --> repoB --> npmjs.com

你想允许从特定包组中提取软件包,/npm/space/anycompany~npmjs.comrepoA,但只能通过。repoB您还想阻止将与软件包组关联的软件包提取到您域中的任何其他存储库中,并通过包管理器阻止直接发布软件包。为此,您可以按如下方式创建和配置软件包组:

PUBLISH:BLO CK、EXTERNAL_UPSTREPASTIOS:ALLOW_SPECIFIC_REPOSITORIOS 和 INTERNAL_UPSTERIOS:

repoArepoB添加到相应的允许存储库列表中:

  • repoA应该添加到INTERNAL_UPSTREAM列表中,因为它会从其内部上游获取软件包repoB

  • repoB应该添加到EXTERNAL_UPSTREAM列表中,因为它会从外部存储库中获取软件包,npmjs.com

以下 AWS CLI 命令使用与所需行为相匹配的起源限制设置创建和配置软件包组:

要创建包组,请执行以下操作:

aws codeartifact create-package-group \ --domain my_domain \ --package-group /npm/space/anycompany~ \ --domain-owner 111122223333 \ --contact-info contact@email.com | URL \ --description "my package group"

要更新包裹组的起源配置,请执行以下操作:

aws codeartifact update-package-group-origin-configuration \ --domain my_domain \ --domain-owner 111122223333 \ --package-group /npm/space/anycompany~ \ --restrictions PUBLISH=BLOCK,EXTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES,INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \ --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=repoA originRestrictionType=EXTERNAL_UPSTREAM,repositoryName=repoB

包裹组起源控制设置如何与包裹来源控制设置交互

由于包裹具有起源控制设置,并且其关联的包裹组具有起源控制设置,因此了解这两种不同的设置是如何相互作用的,这一点很重要。有关设置之间交互的信息,请参阅包裹来源控件如何与包裹组起源控件交互