本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
更新程序包版本状态
中的每个软件包版本都 CodeArtifact 有一个描述软件包版本的当前状态和可用性的状态。您可以使用 AWS CLI 和控制台更改软件包版本状态。
注意
有关程序包版本状态的更多信息(包括可用状态列表),请参阅程序包版本状态。
更新程序包版本状态
通过设置程序包版本的状态,可以控制如何使用程序包版本,而无需完全从存储库中删除版本。例如,当程序包版本的状态为 Unlisted
时,仍然可以正常下载版本,但使用 npm view
等命令返回的程序包版本列表中不会显示该版本。UpdatePackageVersionsStatus API允许在一次API调用中设置同一软件包的多个版本的软件包版本状态。有关不同状态的说明,请参阅程序包概览。
使用 update-package-versions-status
命令将程序包版本的状态更改为 Published
、Unlisted
或 Archived
。要查看使用该命令所需的IAM权限,请参阅更新软件包版本状态所需的IAM权限。以下示例将 npm 程序包 chalk
版本 4.1.0 的状态设置为 Archived
。
aws codeartifact update-package-versions-status --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagechalk
--versions4.1.0
--target-statusArchived
示例输出:
{ "successfulVersions": { "4.1.0": { "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=", "status": "Archived" } }, "failedVersions": {} }
此示例使用 npm 程序包,但该命令也适用于其他格式。使用单个命令可以将多个版本切换为相同的目标状态,请参见以下示例。
aws codeartifact update-package-versions-status --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagechalk
--versions4.1.0 4.1.1
--target-statusArchived
示例输出:
{ "successfulVersions": { "4.1.0": { "revision": "25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=", "status": "Archived" }, "4.1.1": { "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=", "status": "Archived" } }, "failedVersions": {} }
请注意,发布程序包版本之后,该版本就无法切换回 Unfinished
状态,因此不允许将此状态作为 --target-status
参数的值。要将程序包版本切换至 Disposed
状态,请改用 dispose-package-versions
命令,如下所述。
更新软件包版本状态所需的IAM权限
要为程序包调用 update-package-versions-status
,您必须拥有程序包资源的 codeartifact:UpdatePackageVersionsStatus
权限。这意味着您可以针对各个程序包授予调用 update-package-versions-status
的权限。例如,授予对 npm 包update-package-versions-status
进行调用的权限的IAM策略 chalk
将包括如下语句。
{ "Action": [ "codeartifact:UpdatePackageVersionsStatus" ], "Effect": "Allow", "Resource": "arn:aws:codeartifact:
us-east-1
:111122223333
:package/my_domain
/my_repo
/npm//chalk" }
更新限定范围的 npm 程序包的状态
要更新具有作用域的 npm 程序包版本的程序包版本状态,请使用 --namespace
参数。例如,要取消列出 @nestjs/core
的版本 8.0.0,请使用以下命令。
aws codeartifact update-package-versions-status --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--namespacenestjs
--packagecore
--versions8.0.0
--target-statusUnlisted
更新 Maven 程序包的状态
Maven 软件包始终有一个组 ID,在中将其称为命名空间。 CodeArtifact调用 update-package-versions-status
时使用 --namespace
参数来指定 Maven 组 ID。例如,要存档 Maven 程序包 org.apache.logging.log4j:log4j
的版本 2.13.1,请使用以下命令。
aws codeartifact update-package-versions-status --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatmaven
--namespaceorg.apache.logging.log4j
--packagelog4j
--versions2.13.1
--target-statusArchived
指定程序包版本修订
程序包版本修订是一个字符串,它为程序包版本指定一组特定的资产和元数据。您可以指定程序包版本修订来更新处于特定状态的程序包版本的状态。要指定程序包版本修订,请使用 --version-revisions
参数来传递一个或多个逗号分隔的程序包版本和程序包版本修订对。仅当程序包版本的当前修订与指定值相匹配时,才会更新程序包版本的状态。
注意
使用 --version-revisions
参数时还必须定义 —-versions
参数。
aws codeartifact update-package-versions-status --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagechalk
--version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8bzVMJ4=
" --versions4.1.0
--target-statusArchived
要使用单个命令更新多个版本,请将以逗号分隔的版本和版本修订对列表传递给 --version-revisions
选项。以下示例命令定义了两个不同的程序包版本和程序包版本修订对。
aws codeartifact update-package-versions-status --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagechalk
--version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=
,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=
" --versions4.1.0 4.0.0
--target-statusPublished
示例输出:
{ "successfulVersions": { "4.0.0": { "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=", "status": "Published" }, "4.1.0": { "revision": "25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=", "status": "Published" } }, "failedVersions": {} }
更新多个程序包版本时,传递到 --version-revisions
的版本必须与传递到 --versions
的版本相同。如果错误地指定了修订,则该版本的状态将不会更新。
使用预期的状态参数
update-package-versions-status
命令提供的 --expected-status
参数支持指定程序包版本的预期当前状态。如果当前状态与传递给 --expected-status
的值不匹配,则不会更新该程序包版本的状态。
例如,在 my_repo
,npm 软件包的 4.0.0 和 4.1.0 版本chalk
目前的状态为。Published
由于状态不匹配,调用 update-package-versions-status
(指定了 Unlisted
预期状态)将无法更新两个程序包版本。
aws codeartifact update-package-versions-status --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagechalk
--versions4.1.0 4.0.0
--target-statusArchived
--expected-statusUnlisted
示例输出:
{ "successfulVersions": {}, "failedVersions": { "4.0.0": { "errorCode": "MISMATCHED_STATUS", "errorMessage": "current status: Published, expected status: Unlisted" }, "4.1.0": { "errorCode": "MISMATCHED_STATUS", "errorMessage": "current status: Published, expected status: Unlisted" } } }
个别程序包版本的错误
调用 update-package-versions-status
时无法更新程序包版本的状态有多种原因。例如,可能错误地指定了程序包版本修订,或者预期状态与当前状态不匹配。在这些情况下,版本将包含在API响应中的failedVersions
地图中。如果一个版本失败,则可能会跳过在 update-package-versions-status
的同一次调用中指定的其他版本,并且不会更新其状态。这些版本也将包括在 failedVersions
映射中,且其 errorCode
为 SKIPPED
。
在 update-package-versions-status
的当前实施中,如果一个或多个版本的状态无法更改,则将跳过所有其他版本。也就是说,要么成功更新所有版本,要么不更新任何版本。API合同中并不能保证这种行为;将来,某些版本可能会成功,而其他版本在一次调用时可能会失败update-package-versions-status
。
以下示例命令包括由于程序包版本修订不匹配而导致的版本状态更新失败。该更新失败会导致系统跳过另一个版本状态更新调用。
aws codeartifact update-package-versions-status --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagechalk
--version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ=
,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=
" --versions4.1.0 4.0.0
--target-statusArchived
示例输出:
{ "successfulVersions": {}, "failedVersions": { "4.0.0": { "errorCode": "SKIPPED", "errorMessage": "version 4.0.0 is skipped" }, "4.1.0": { "errorCode": "MISMATCHED_REVISION", "errorMessage": "current revision: 25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=, expected revision: 25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ=" } } }
处置程序包版本
Disposed
软件包状态的行为与类似Archived
,唯一的不同是包裹资产将被永久删除, CodeArtifact 这样域名所有者的账户就不再需要支付资产存储费用。有关每种程序包版本状态的更多信息,请参阅程序包版本状态。要将程序包版本的状态更改为 Disposed
,请使用 dispose-package-versions
命令。此功能与 update-package-versions-status
分开,因为处置程序包版本是不可逆转的。由于会删除程序包资源,因此无法将版本的状态更改回 Archived
、Unlisted
或 Published
。可以对已处置的程序包版本采取的唯一操作是使用 delete-package-versions
命令将其删除。
要dispose-package-versions
成功调用,调用IAM主体必须拥有包资源的codeartifact:DisposePackageVersions
权限。
dispose-package-versions
命令的行为与 update-package-versions-status
类似,包括版本修订和预期状态部分中描述的 --version-revisions
和 --expected-status
选项的行为。例如,以下命令尝试处置程序包版本,但由于预期状态不匹配而失败。
aws codeartifact dispose-package-versions —domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagechalk
--versions4.0.0
--expected-statusUnlisted
示例输出:
{ "successfulVersions": {}, "failedVersions": { "4.0.0": { "errorCode": "MISMATCHED_STATUS", "errorMessage": "current status: Published, expected status: Unlisted" } } }
如果在 --expected-status
为 Published
时再次运行相同的命令,则处置会成功。
aws codeartifact dispose-package-versions —domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagechalk
--versions4.0.0
--expected-statusPublished
示例输出:
{ "successfulVersions": { "4.0.0": { "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=", "status": "Disposed" } }, "failedVersions": {} }