리포지토리 간 패키지 복사 - CodeArtifact

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

리포지토리 간 패키지 복사

의 한 리포지토리에서 다른 리포지토리로 패키지 버전을 복사할 수 있습니다 CodeArtifact. 이 기능은 패키지 프로모션 워크플로우나 팀 또는 프로젝트 간 패키지 버전 공유 같은 시나리오에 유용합니다. 소스 리포지토리와 대상 리포지토리는 패키지 버전을 복사하는 도메인과 동일한 도메인에 있어야 합니다.

패키지를 복사하는 데 필요한 IAM 권한

에서 패키지 버전을 복사하려면 CodeArtifact호출 사용자에게 필요한 IAM 권한이 있어야 하며 소스 및 대상 리포지토리에 연결된 리소스 기반 정책에 필요한 권한이 있어야 합니다. 리소스 기반 권한 정책 및 CodeArtifact 리포지토리에 대한 자세한 내용은 섹션을 참조하세요 리포지토리 정책.

copy-package-versions를 호출하는 사용자에게는 소스 리포지토리에 대한 ReadFromRepository 권한과 대상 리포지토리에 대한 CopyPackageVersions 권한이 있어야 합니다.

소스 리포지토리에는 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 리포지토리에서 동일한 도메인의 대상 리포지토리로 하나 이상의 패키지 버전을 복사합니다. 다음 예제는 my_repo 리포지토리에 있는 my-package라는 npm 패키지의 버전 6.0.2 및 4.0.0을 repo-2 리포지토리로 복사합니다.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository my_repo \ --destination-repository repo-2 --package my-package --format npm \ --versions 6.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 옵션을 사용하면 소스 리포지토리와 업스트림 리포지토리 모두에서 버전을 복사할 수 있습니다. 를 사용하는 경우 includeFromUpstream 파라미터가 true로 설정된 CopyPackageVersions API 를 CodeArtifact SDK호출합니다. 자세한 내용은 에서 업스트림 리포지토리로 작업하기 CodeArtifact 단원을 참조하십시오.

범위가 지정된 npm 패키지 복사

범위 내의 npm 패키지 버전을 복사하려면 --namespace 옵션을 사용하여 범위를 지정하세요. 예를 들어 @types/react 패키지를 복사하려면 --namespace types를 사용합니다. --namespace를 사용할 때는 @ 기호를 생략해야 합니다.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \ --destination-repository repo-2 --format npm --namespace types \ --package react --versions 0.12.2

Maven 패키지 버전 복사

리포지토리 간에 Maven 패키지 버전을 복사하려면 --namespace 옵션을 적용해 Maven 그룹 ID를 전달하고 --name 옵션을 적용해 Maven artifactID를 전달하여 복사할 패키지를 지정하세요. 예를 들어 com.google.guava:guava의 단일 버전을 복사하는 방법은 다음과 같습니다.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \ --source-repository my_repo --destination-repository repo-2 --format maven --namespace com.google.guava \ --package guava --versions 27.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-owner 111122223333 \ --source-repository my_repo --destination-repository repo-2 --format npm \ --package array-unique --versions 0.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의 출력에 나열되지 않습니다.

다음 예제에서는 npm 패키지 array-unique의 두 버전이 소스 리포지토리 repo-1에 존재합니다. 버전 0.2.1도 대상 리포지토리 dest-repo에 있지만 버전 0.2.0은 없습니다.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \ --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \ --versions 0.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-owner 111122223333 \ --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \ --versions 0.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 명령에 전달합니다.

참고

copy-package-versions가 있는 --versions 또는 --version-revisions 파라미터를 지정해야 합니다. 둘 다 지정할 수는 없습니다.

다음 예제에서는 패키지 버전 개정 REVISION-1-SAMPLE-6C81EFF7DA55CC와 함께 소스 리포지토리에 존재하는 패키지 my-package의 버전 0.3.2만 복사합니다.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \ --destination-repository repo-2 --format npm --namespace my-namespace \ --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC

다음 예제에서는 패키지 my-package의 두 버전(0.3.2 및 0.3.13)을 복사합니다. my-package의 소스 리포지토리 버전 0.3.2에 개정 REVISION-1-SAMPLE-6C81EFF7DA55CC가 있고 버전 0.3.13에 개정 REVISION-2-SAMPLE-55C752BEE772FC가 있는 경우에만 복사가 성공합니다.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \ --destination-repository repo-2 --format npm --namespace my-namespace \ --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC,0.3.13=REVISION-2-SAMPLE-55C752BEE772FC

패키지 버전의 개정을 찾으려면 describe-package-version 또는 list-package-versions 명령을 사용합니다.

자세한 내용은 CodeArtifact API 참조CopyPackageVersion패키지 버전 개정 및 섹션을 참조하세요.

npm 패키지 복사

npm 패키지의 copy-package-versions 동작에 대한 자세한 내용은 npm 태그 및 를 CopyPackageVersions API참조하세요.