更新程序包版本状态 - CodeArtifact

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

更新程序包版本状态

中的每个软件包版本都 CodeArtifact 有一个描述软件包版本的当前状态和可用性的状态。您可以使用 AWS CLI 和控制台更改软件包版本状态。

注意

有关程序包版本状态的更多信息(包括可用状态列表),请参阅程序包版本状态

更新程序包版本状态

通过设置程序包版本的状态,可以控制如何使用程序包版本,而无需完全从存储库中删除版本。例如,当程序包版本的状态为 Unlisted 时,仍然可以正常下载版本,但使用 npm view 等命令返回的程序包版本列表中不会显示该版本。UpdatePackageVersionsStatus API允许在一次API调用中设置同一软件包的多个版本的软件包版本状态。有关不同状态的说明,请参阅程序包概览

使用 update-package-versions-status 命令将程序包版本的状态更改为 PublishedUnlistedArchived。要查看使用该命令所需的IAM权限,请参阅更新软件包版本状态所需的IAM权限。以下示例将 npm 程序包 chalk 版本 4.1.0 的状态设置为 Archived

aws codeartifact update-package-versions-status --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm --package chalk --versions 4.1.0 --target-status Archived

示例输出:

{ "successfulVersions": { "4.1.0": { "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=", "status": "Archived" } }, "failedVersions": {} }

此示例使用 npm 程序包,但该命令也适用于其他格式。使用单个命令可以将多个版本切换为相同的目标状态,请参见以下示例。

aws codeartifact update-package-versions-status --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm --package chalk --versions 4.1.0 4.1.1 --target-status Archived

示例输出:

{ "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-owner 111122223333 --repository my_repo --format npm --namespace nestjs --package core --versions 8.0.0 --target-status Unlisted

更新 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-owner 111122223333 --repository my_repo --format maven --namespace org.apache.logging.log4j --package log4j --versions 2.13.1 --target-status Archived

指定程序包版本修订

程序包版本修订是一个字符串,它为程序包版本指定一组特定的资产和元数据。您可以指定程序包版本修订来更新处于特定状态的程序包版本的状态。要指定程序包版本修订,请使用 --version-revisions 参数来传递一个或多个逗号分隔的程序包版本和程序包版本修订对。仅当程序包版本的当前修订与指定值相匹配时,才会更新程序包版本的状态。

注意

使用 --version-revisions 参数时还必须定义 —-versions 参数。

aws codeartifact update-package-versions-status --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm --package chalk --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8bzVMJ4=" --versions 4.1.0 --target-status Archived

要使用单个命令更新多个版本,请将以逗号分隔的版本和版本修订对列表传递给 --version-revisions 选项。以下示例命令定义了两个不同的程序包版本和程序包版本修订对。

aws codeartifact update-package-versions-status --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm --package chalk --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=" --versions 4.1.0 4.0.0 --target-status Published

示例输出:

{ "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-owner 111122223333 --repository my_repo --format npm --package chalk --versions 4.1.0 4.0.0 --target-status Archived --expected-status Unlisted

示例输出:

{ "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 映射中,且其 errorCodeSKIPPED

update-package-versions-status 的当前实施中,如果一个或多个版本的状态无法更改,则将跳过所有其他版本。也就是说,要么成功更新所有版本,要么不更新任何版本。API合同中并不能保证这种行为;将来,某些版本可能会成功,而其他版本在一次调用时可能会失败update-package-versions-status

以下示例命令包括由于程序包版本修订不匹配而导致的版本状态更新失败。该更新失败会导致系统跳过另一个版本状态更新调用。

aws codeartifact update-package-versions-status --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm --package chalk --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ=,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=" --versions 4.1.0 4.0.0 --target-status Archived

示例输出:

{ "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 分开,因为处置程序包版本是不可逆转的。由于会删除程序包资源,因此无法将版本的状态更改回 ArchivedUnlistedPublished。可以对已处置的程序包版本采取的唯一操作是使用 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-owner 111122223333 --repository my_repo --format npm --package chalk --versions 4.0.0 --expected-status Unlisted

示例输出:

{ "successfulVersions": {}, "failedVersions": { "4.0.0": { "errorCode": "MISMATCHED_STATUS", "errorMessage": "current status: Published, expected status: Unlisted" } } }

如果在 --expected-statusPublished 时再次运行相同的命令,则处置会成功。

aws codeartifact dispose-package-versions —domain my_domain --domain-owner 111122223333 --repository my_repo --format npm --package chalk --versions 4.0.0 --expected-status Published

示例输出:

{ "successfulVersions": { "4.0.0": { "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=", "status": "Disposed" } }, "failedVersions": {} }