

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 更新套件版本狀態
<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 套件 4.1.0 版的狀態`chalk`設定為 `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 套件 *chalk* `update-package-versions-status`上呼叫 許可的 IAM 政策會包含如下所示的陳述式。

```
{
  "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` 參數。例如，若要取消列出 的 8.0.0 版`@nestjs/core`，請使用下列命令。

```
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 中稱為命名空間。呼叫 時，使用 `--namespace` 參數指定 Maven 群組 ID`update-package-versions-status`。例如，若要封存 Maven 套件 的 2.13.1 版`org.apache.logging.log4j:log4j`，請使用下列命令。

```
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` 參數傳遞一或多個逗號分隔的套件版本和套件版本修訂對。只有在套件版本的目前修訂版符合指定的值時，才會更新套件版本的狀態。

**注意**  
使用 `—-versions` 參數時，也必須定義 `--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/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`可能會略過，而不會更新其狀態。這類版本也會包含在具有 之 `errorCode`的`failedVersions`地圖中`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)`--version-revisions `和[預期狀態](#using-expected-status)區段中所述的 和 `--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": {}
}
```