本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在儲存庫間複製套件
您可以將套件版本從一個儲存庫複製到中 CodeArtifact的另一個儲存庫 這對於諸如封裝推進工作流程或在專案團隊或專案之間共用封裝版本等案例非常有用。來源和目的地儲存庫必須位於相同的網域中,才能複製套件版本。
複製套件所需的IAM權限
若要在中複製套件版本 CodeArtifact,呼叫使用者必須具有必要的IAM權限,而且附加至來源和目的地儲存庫的資源型政策必須具有必要的權限。如需以資源為基礎的權限原則和 CodeArtifact 儲存庫的詳細資訊,請參閱 儲存庫政策。
呼叫的使用者copy-package-versions
必須具有來源儲存庫的CopyPackageVersions
權限,以及目標儲存庫的權限。ReadFromRepository
來源儲存庫必須具有ReadFromRepository
權限,且目的地儲存庫必須具有指派給IAM帳戶或複製套件的使用者的CopyPackageVersions
權限。下列原則是使用put-repository-permissions-policy
指令新增至來源儲存區域或目的地儲存區域的範例儲存區域原則。Replace (取代) 111122223333
與帳戶調用的 ID copy-package-versions
。
注意
調用put-repository-permissions-policy
將替換當前存儲庫策略(如果存在)。您可以使用命get-repository-permissions-policy
令來查看策略是否存在,如需詳細資訊,請參閱閱讀政策。如果原則確實存在,您可能想要將這些權限新增至其中,而不是取代它。
來源儲存庫權限原則範例
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
111122223333
:root" }, "Resource": "*" } ] }
目標儲存庫權限原則範例
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:CopyPackageVersions" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
111122223333
:root" }, "Resource": "*" } ] }
複製套件版本
使用中的copy-package-versions
指令可 CodeArtifact 將一或多個套裝程式版本從來源儲存庫複製到相同網域中的目的地儲存區域。下列範例會將名為的 npm 套件 6.0.2 和 4.0.0 版複製my-package
到my_repo
儲存庫。repo-2
aws codeartifact copy-package-versions --domain
my_domain
--domain-owner111122223333
--source-repositorymy_repo
\ --destination-repositoryrepo-2
--packagemy-package
--format npm \ --versions6.0.2 4.0.0
您可以在單一作業中複製相同套件名稱的多個版本。若要複製不同套件名稱的版本,您必須呼叫每copy-package-versions
個套件名稱。
前面的命令將產生以下輸出,假設兩個版本都可以成功複製。
{ "successfulVersions": { "6.0.2": { "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, "4.0.0": { "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } }, "failedVersions": {} }
從上游儲存庫複製套件
通常,copy-package-versions
只會在--source-repository
選項指定的存放庫中尋找要複製的版本。但是,您可以使用--include-from-upstream
選項從來源儲存庫及其上游儲存庫複製版本。如果您使用 CodeArtifact SDK,請呼叫includeFromUpstream
參數設定為 true 的。CopyPackageVersions
API如需詳細資訊,請參閱使用中的上游存儲庫 CodeArtifact。
複製範圍內的 npm 套件
若要複製範圍中的 npm 套件版本,請使用--namespace
選項來指定範圍。例如,若要複製封裝@types/react
,請使用--namespace types
。使用時必須省略@
符號--namespace
。
aws codeartifact copy-package-versions --domain
my_domain
--domain-owner111122223333
--source-repositoryrepo-1
\ --destination-repositoryrepo-2
--format npm --namespacetypes
\ --packagereact
--versions0.12.2
複製 Maven 軟件包版本
若要在儲存庫之間複製 Maven 套件版本,請指定要複製的套件,方法是使用選項傳遞 Maven 群組識別碼,並使用--namespace
選項傳遞 Maven 文件 ID。--name
例如,若要複製單一版本的com.google.guava:guava
:
aws codeartifact copy-package-versions --domain
my_domain
--domain-owner111122223333
\ --source-repositorymy_repo
--destination-repositoryrepo-2
--format maven --namespacecom.google.guava
\ --packageguava
--versions27.1-jre
如果套件版本複製成功,輸出將類似下列內容。
{ "successfulVersions": { "27.1-jre": { "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } }, "failedVersions": {} }
來源儲存庫中不存在的版本
如果您指定的版本不存在於來源儲存庫中,則複製將會失敗。如果某些版本存在於來源儲存庫中,而某些版本不存在,則所有版本都將無法複製。在下列範例中,array-unique
npm 套件的 0.2.0 版本存在於來源儲存庫中,但版本 5.6.7 不是:
aws codeartifact copy-package-versions --domain
my_domain
--domain-owner111122223333
\ --source-repositorymy_repo
--destination-repositoryrepo-2
--format npm \ --packagearray-unique
--versions0.2.0 5.6.7
在這種情況下,輸出將類似於以下內容。
{ "successfulVersions": {}, "failedVersions": { "0.2.0": { "errorCode": "SKIPPED", "errorMessage": "Version 0.2.0 was skipped" }, "5.6.7": { "errorCode": "NOT_FOUND", "errorMessage": "Could not find version 5.6.7" } } }
SKIPPED
錯誤碼用於指示版本未複製到目的地儲存庫,因為無法複製其他版本。
目的地儲存庫中已存在的版本
將套件版本複製到已存在的儲存庫時,會 CodeArtifact比較其套件資產和兩個儲存庫中的套件版本層級中繼資料。
如果來源和目的地儲存庫中的套件版本資產和中繼資料相同,則不會執行副本,但作業會視為成功。這意味著這copy-package-versions
是冪等的。發生這種情況時,來源和目的地儲存庫中已存在的版本將不會列在的輸出中copy-package-versions
。
在下列範例中,來源儲存庫中array-unique
有兩個版本的 npm 套件repo-1
。版本 0.2.1 也存在於目標存儲庫dest-repo
和版本 0.2.0 不是。
aws codeartifact copy-package-versions --domain
my_domain
--domain-owner111122223333
\ --source-repositorymy_repo
--destination-repositoryrepo-2
--format npm --packagearray-unique
\ --versions0.2.1 0.2.0
在這種情況下,輸出將類似於以下內容。
{ "successfulVersions": { "0.2.0": { "revision": "Yad+B1QcBq2kdEVrx1E1vSfHJVh8Pr61hBUkoWPGWX0=", "status": "Published" } }, "failedVersions": {} }
版本 0.2.0 列在中,successfulVersions
因為它已成功從來源複製到目標儲存庫。版本 0.2.1 不會顯示在輸出中,因為它已經存在於目標存儲庫中。
如果來源和目的地儲存庫中的套件版本資產或中繼資料不同,複製作業將會失敗。您可以使用--allow-overwrite
參數強制覆寫。
如果某些版本存在於目標儲存庫中,而某些版本不存在,則所有版本都將無法複製。在下列範例中,array-unique
npm 套件的 0.3.2 版本同時存在於來源和目的地儲存庫中,但套件版本的內容不同。版本 0.2.1 存在於源存儲庫中,但不存在於目標中。
aws codeartifact copy-package-versions --domain
my_domain
--domain-owner111122223333
\ --source-repositorymy_repo
--destination-repositoryrepo-2
--format npm --packagearray-unique
\ --versions0.3.2 0.2.1
在這種情況下,輸出將類似於以下內容。
{ "successfulVersions": {}, "failedVersions": { "0.2.1": { "errorCode": "SKIPPED", "errorMessage": "Version 0.2.1 was skipped" }, "0.3.2": { "errorCode": "ALREADY_EXISTS", "errorMessage": "Version 0.3.2 already exists" } } }
版本 0.2.1 被標記為,SKIPPED
因為它沒有複製到目標存儲庫。未複製,因為版本 0.3.2 的複本失敗,因為它已存在於目標儲存庫中,但在來源和目標儲存庫中並不相同。
指定套件版本修訂
套件版本修訂是指定套件版本的一組特定資產和中繼資料的字串。您可以指定封裝版本修訂,以複製處於特定狀態的封裝版本。若要指定封裝版本修訂,請使用--version-revisions
參數將一或多個以逗號分隔的封裝版本和封裝版本修訂配對傳遞給命copy-package-versions
令。
注意
您必須使用指定--versions
或--version-revisions
參數copy-package-versions
。您不能同時指定兩者。
下列範例只會在套件my-package
版本修訂版本的來源儲存庫中複製 0.3.2 版REVISION-1-SAMPLE-6C81EFF7DA55CC
的套件。
aws codeartifact copy-package-versions --domain
my_domain
--domain-owner111122223333
--source-repositoryrepo-1
\ --destination-repositoryrepo-2
--format npm --namespacemy-namespace
\ --packagemy-package
--version-revisions0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC
下列範例會複製兩個版本的套件my-package
,0.3.2 和 0.3.13。只有在 0.3.2 的來源儲存庫版本具有修訂版REVISION-1-SAMPLE-6C81EFF7DA55CC
且版本 0.3.13 my-package
具有修訂版時,複製才會成功。REVISION-2-SAMPLE-55C752BEE772FC
aws codeartifact copy-package-versions --domain
my_domain
--domain-owner111122223333
--source-repositoryrepo-1
\ --destination-repositoryrepo-2
--format npm --namespacemy-namespace
\ --packagemy-package
--version-revisions0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC
,0.3.13=REVISION-2-SAMPLE-55C752BEE772FC
若要尋找封裝版本的修訂版本,請使用describe-package-version
或指list-package-versions
令。
如需詳細資訊,請參閱〈CodeArtifact API參考〉CopyPackageVersion中的Package 版本修訂和。
複製 npm 套件
如需有關 npm 套件copy-package-versions
行為的詳細資訊,請參閱 npm 標籤和 CopyPackageVersions API.