

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

# 更新程序包版本状态
<a name="update-package-version-status"></a>

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

**注意**  
有关程序包版本状态的更多信息（包括可用状态列表），请参阅[程序包版本状态](packages-overview.md#package-version-status)。

## 更新程序包版本状态
<a name="updating-pv-status"></a>

通过设置程序包版本的状态，可以控制如何使用程序包版本，而无需完全从存储库中删除版本。例如，当程序包版本的状态为 `Unlisted` 时，仍然可以正常下载版本，但使用 `npm view` 等命令返回的程序包版本列表中不会显示该版本。该 [UpdatePackageVersionsStatus API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html) 允许在单个 API 调用中设置同一个软件包的多个版本的软件包版本状态。有关不同状态的说明，请参阅[程序包概览](packages-overview.md)。

使用 `update-package-versions-status` 命令将程序包版本的状态更改为 `Published`、`Unlisted` 或 `Archived`。要查看使用命令所需的 IAM 权限，请参阅[更新程序包版本状态所需的 IAM 权限](#update-package-version-status-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 权限
<a name="update-package-version-status-iam"></a>

要为程序包调用 `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 程序包的状态
<a name="update-package-version-status-scoped-npm"></a>

要更新具有作用域的 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 程序包的状态
<a name="update-package-version-status-maven"></a>

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
```

## 指定程序包版本修订
<a name="update-status-specify-package-version-revision"></a>

程序包版本修订是一个字符串，它为程序包版本指定一组特定的资产和元数据。您可以指定程序包版本修订来更新处于特定状态的程序包版本的状态。要指定程序包版本修订，请使用 `--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` 的版本相同。如果错误地指定了修订，则该版本的状态将不会更新。

## 使用预期的状态参数
<a name="using-expected-status"></a>

`update-package-versions-status` 命令提供的 `--expected-status` 参数支持指定程序包版本的预期当前状态。如果当前状态与传递给 `--expected-status` 的值不匹配，则不会更新该程序包版本的状态。

例如，在中*my\$1repo*，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"
        }
    }
}
```

## 个别程序包版本的错误
<a name="update-package-version-status-errors"></a>

调用 `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-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="
        }
    }
}
```

## 处置程序包版本
<a name="dispose-package-versions"></a>

`Disposed`软件包状态的行为与类似`Archived`，唯一的不同是包裹资产将被永久删除， CodeArtifact 这样域名所有者的账户就不再需要支付资产存储费用。有关每种程序包版本状态的更多信息，请参阅[程序包版本状态](packages-overview.md#package-version-status)。要将程序包版本的状态更改为 `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` 类似，包括[版本修订](#update-status-specify-package-version-revision)和[预期状态](#using-expected-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-status` 为 `Published` 时再次运行相同的命令，则处置会成功。

```
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": {}
}
```