기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Maven 스냅샷 사용
Maven 스냅샷은 최신 프로덕션 브랜치 코드를 참조하는 Maven 패키지의 특수 버전입니다. 이 스냅샷은 최종 릴리스 버전보다 앞서는 개발 버전입니다. 패키지 버전에 추가된 접미사 SNAPSHOT
으로 Maven 패키지의 스냅샷 버전을 식별할 수 있습니다. 예를 들어, 버전 1.1
의 스냅샷은 1.1-SNAPSHOT
입니다. 자세한 내용은 Apache Maven Project 웹 사이트의 SNAPSHOT 버전이란 무엇입니까?
AWS CodeArtifact 는 Maven 스냅샷 게시 및 사용을 지원합니다. 시간 기반 버전 번호를 사용하는 고유한 스냅샷은 지원되는 유일한 스냅샷입니다. CodeArtifact 는 Maven 2 클라이언트에서 생성되는 비고유 스냅샷을 지원하지 않습니다. 지원되는 Maven 스냅샷을 모든 CodeArtifact 리포지토리에 게시할 수 있습니다.
에 스냅샷 게시 CodeArtifact
AWS CodeArtifact 는 스냅샷을 게시할 때 와 같은 클라이언트가 mvn
사용하는 요청 패턴을 지원합니다. 따라서 Maven 스냅샷이 게시되는 방식을 자세히 이해하지 못했더라도 빌드 도구 또는 패키지 관리자의 설명서를 따르면 됩니다. 더 복잡한 작업을 수행하는 경우 이 섹션에서는 가 스냅샷을 CodeArtifact 처리하는 방법을 자세히 설명합니다.
Maven 스냅샷이 CodeArtifact 리포지토리에 게시되면 이전 버전이 빌드라는 새 버전으로 보존됩니다. Maven 스냅샷이 게시될 때마다 새 빌드 버전이 생성됩니다. 스냅샷의 모든 이전 버전은 빌드 버전에서 유지 관리됩니다. Maven 스냅샷이 게시되면 패키지 버전 상태가 Published
로 설정되고 이전 버전이 포함된 빌드의 상태가 Unlisted
로 설정됩니다. 이 동작은 패키지 버전에 접미사 -SNAPSHOT
이 있는 Maven 패키지 버전에만 적용됩니다.
예를 들어 라는 maven 패키지의 스냅샷 버전com.mycompany.myapp:pkg-1
은 라는 CodeArtifact 리포지토리에 업로드됩니다my-maven-repo
. 스냅샷 버전은 1.0-SNAPSHOT
입니다. 지금까지 게시된 com.mycompany.myapp:pkg-1
의 버전은 없습니다. 먼저, 초기 빌드의 자산은 다음 경로에 게시됩니다.
PUT maven/
my-maven-repo
/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210728.194552-1.jar PUT maven/my-maven-repo
/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210728.194552-1.pom
참고로 20210728.194552-1
타임스탬프는 스냅샷 빌드를 게시하는 클라이언트에 의해 생성됩니다.
.pom 및 .jar 파일을 업로드한 후 리포지토리에 존재하는 com.mycompany.myapp:pkg-1
의 유일한 버전은 1.0-20210728.194552-1
입니다. 이는 이전 경로에 지정된 버전이 1.0-SNAPSHOT
인 경우에도 발생합니다. 현재 패키지 버전 상태는 Unfinished
입니다.
aws codeartifact list-package-versions --domain
my-domain
--repository \my-maven-repo
--package pkg-1 --namespace com.mycompany.myapp --format maven { "versions": [ { "version": "1.0-20210728.194552-1", "revision": "GipMW+599JmwTcTLaXo9YvDsVQ2bcrrk/02rWJhoKUU=", "status": "Unfinished" } ], "defaultDisplayVersion": null, "format": "maven", "package": "pkg-1", "namespace": "com.mycompany.myapp" }
그런 다음, 클라이언트가 패키지 버전용 maven-metadata.xml
파일을 업로드합니다.
PUT
my-maven-repo
/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/maven-metadata.xml
maven-metadata.xml 파일이 성공적으로 업로드되면 는 1.0-SNAPSHOT
패키지 버전을 CodeArtifact 생성하고 1.0-20210728.194552-1
버전을 로 설정합니다Unlisted
.
aws codeartifact list-package-versions --domain
my-domain
--repository \my-maven-repo
--package pkg-1 --namespace com.mycompany.myapp --format maven { "versions": [ { "version": "1.0-20210728.194552-1", "revision": "GipMW+599JmwTcTLaXo9YvDsVQ2bcrrk/02rWJhoKUU=", "status": "Unlisted" }, { "version": "1.0-SNAPSHOT", "revision": "tWu8n3IX5HR82vzVZQAxlwcvvA4U/+S80edWNAkil24=", "status": "Published" } ], "defaultDisplayVersion": "1.0-SNAPSHOT", "format": "maven", "package": "pkg-1", "namespace": "com.mycompany.myapp" }
이제 스냅샷 버전 1.0-SNAPSHOT
을 빌드에서 사용할 수 있습니다. 리포지토리 my-maven-repo
에는 두 가지 버전의 com.mycompany.myapp:pkg-1
이 있지만 두 버전 모두 동일한 자산을 포함하고 있습니다.
aws codeartifact list-package-version-assets --domain
my-domain
--repository \my-maven-repo
--format maven --namespace com.mycompany.myapp \ --package pkg-1 --package-version 1.0-SNAPSHOT--query 'assets[*].name' [ "pkg-1-1.0-20210728.194552-1.jar", "pkg-1-1.0-20210728.194552-1.pom" ]
--package-version
파라미터를 1.0-20210728.194552-1
로 변경하여 이전에 표시된 것과 동일한 list-package-version-assets
명령을 실행하면 동일한 출력이 표시됩니다.
1.0-SNAPSHOT
의 추가 빌드가 리포지토리에 추가되면 새 빌드마다 새 Unlisted
패키지 버전이 생성됩니다. 버전 1.0-SNAPSHOT
의 자산은 매번 업데이트되므로 버전은 항상 해당 버전의 최신 빌드를 참조합니다. 최신 자산으로 1.0-SNAPSHOT
을 업데이트하는 절차는 새 빌드용 maven-metadata.xml
파일을 업로드하는 것으로 시작됩니다.
스냅샷 버전 사용
스냅샷을 요청하면 상태 Published
의 버전이 반환됩니다. 이 버전은 항상 Maven 스냅샷의 최신 버전입니다. URL 경로의 스냅샷 버전(예: 1.0-20210728.194552-1
) 대신 빌드 버전 번호(예: 1.0-SNAPSHOT
)를 사용하여 스냅샷의 특정 빌드를 요청할 수도 있습니다. Maven 스냅샷의 빌드 버전을 보려면 CodeArtifact API 가이드ListPackageVersions API의 를 사용하고 상태 파라미터를 로 설정합니다Unlisted
.
스냅샷 버전 삭제
Maven 스냅샷의 모든 빌드 버전을 삭제하려면 DeletePackageVersions API를 사용하여 삭제할 버전을 지정합니다.
curl을 사용한 스냅샷 게시
Amazon Simple Storage Service(Amazon S3) 또는 다른 아티팩트 리포지토리 제품에 저장된 기존 스냅샷 버전이 있는 경우 에 다시 게시할 수 있습니다 AWS CodeArtifact. 가 Maven 스냅샷을 지원하는 방법 CodeArtifact( 참조에 스냅샷 게시 CodeArtifact)으로 인해 와 같은 일반 HTTP 클라이언트로 스냅샷을 게시하는 curl
것은 에 설명된 대로 Maven 릴리스 버전을 게시하는 것보다 더 복잡합니다curl을 사용한 게시. mvn
또는 gradle
같은 Maven 클라이언트를 사용하여 스냅샷 버전을 빌드하고 배포하는 경우, 이 섹션은 관련성이 없습니다. Maven 클라이언트에 대한 설명서를 따라야 합니다.
스냅샷 버전을 게시하려면 스냅샷 버전의 빌드를 하나 이상 게시해야 합니다. 에서 스냅샷 버전의 빌드가 n개 있는 CodeArtifact경우 n + 1 CodeArtifact 버전이 있습니다. n 빌드 버전은 모두 상태가 Unlisted
이고 1개의 스냅샷 버전(최신 게시 빌드)은 입니다Published
. 스냅샷 버전(즉, “-”가 포함된 버전 문자열이 있는 버전SNAPSHOT)에는 최신 게시 빌드와 동일한 자산 세트가 포함되어 있습니다. curl
을 사용하여 이 구조를 생성하는 가장 간단한 방법은 다음과 같습니다.
-
curl
을 사용하여 모든 빌드의 모든 자산을 게시합니다. -
curl
을 사용하여 마지막 빌드의maven-metadata.xml
파일(즉, 가장 최근의 날짜-시간 스탬프가 있는 빌드)을 게시합니다. 그러면 버전 문자열에 ‘-SNAPSHOT
’ 이 포함되고 올바른 자산 세트가 포함된 버전이 하나 생성됩니다. -
UpdatePackageVersionsStatus API 를 사용하여 최신이 아닌 모든 빌드 버전의 상태를 로 설정합니다
Unlisted
.
다음 curl
명령을 사용하여 패키지 com.mycompany.app:pkg-1
의 스냅샷 버전 1.0-SNAPSHOT
에 대한 스냅샷 자산(예: .jar 및 .pom 파일)을 게시하세요.
curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://
my_domain-111122223333
.d.codeartifact.us-west-2
.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210729.171330-2.jar
\ --data-binary@pkg-1-1.0-20210728.194552-1.jar
curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://
my_domain-111122223333
.d.codeartifact.us-west-2
.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210729.171330-2.pom
\ --data-binary@pkg-1-1.0-20210728.194552-1.pom
다음 예제를 사용하는 경우:
-
Replace
my_domain
CodeArtifact 도메인 이름을 사용합니다. -
Replace
111122223333
CodeArtifact 도메인 소유자의 AWS 계정 ID를 사용합니다. -
Replace
us-west-2
CodeArtifact 도메인이 있는 AWS 리전 를 사용합니다. -
Replace
my_maven_repo
CodeArtifact 리포지토리 이름을 사용합니다.
중요
--data-binary
파라미터의 값 앞에 문자 @
을 붙여야 합니다. 값을 따옴표로 묶을 때는 따옴표 안에 @
을 포함해야 합니다.
각 빌드에 업로드할 자산이 두 개 이상 존재할 수 있습니다. 예를 들어, 기본 및 외에 Javadoc JAR 및 소스 JAR 파일이 있을 수 있습니다pom.xml
. 는 업로드된 각 자산에 대한 체크섬을 자동으로 생성하기 때문에 CodeArtifact 패키지 버전 자산에 대한 체크섬 파일을 게시할 필요가 없습니다. 자산이 제대로 업로드되었는지 확인하려면 list-package-version-assets
명령을 사용하여 생성된 체크섬을 가져와서 원본 체크섬과 비교합니다. 가 Maven 체크섬을 CodeArtifact 처리하는 방법에 대한 자세한 내용은 섹션을 참조하세요 Maven 체크섬 사용.
다음 curl 명령어를 사용하여 최신 빌드 버전용 maven-metadata.xml
파일을 게시하세요.
curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://
my_domain-111122223333
.d.codeartifact.us-west-2
.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/
maven-metadata.xml \ --data-binary @maven-metadata.xml
maven-metadata.xml
파일은 <snapshotVersions>
요소의 최신 빌드 버전에 있는 자산 중 한 가지 이상을 참조해야 합니다. 또한 <timestamp>
값이 있어야 하며 이 값은 자산 파일 이름의 타임스탬프와 일치해야 합니다. 예를 들어, 이전에 게시된 20210729.171330-2
빌드의 경우 maven-metadata.xml
의 내용은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?> <metadata> <groupId>com.mycompany.app</groupId> <artifactId>pkg-1</artifactId> <version>1.0-SNAPSHOT</version> <versioning> <snapshot> <timestamp>20210729.171330</timestamp> <buildNumber>2</buildNumber> </snapshot> <lastUpdated>20210729171330</lastUpdated> <snapshotVersions> <snapshotVersion> <extension>jar</extension> <value>1.0-20210729.171330-2</value> <updated>20210729171330</updated> </snapshotVersion> <snapshotVersion> <extension>pom</extension> <value>1.0-20210729.171330-2</value> <updated>20210729171330</updated> </snapshotVersion> </snapshotVersions> </versioning> </metadata>
maven-metadata.xml
이 게시된 후 마지막 단계는 기타 모든 빌드 버전(즉, 최신 빌드를 제외한 모든 빌드 버전)의 패키지 버전 상태를 Unlisted
로 설정하는 데 그 목적이 있습니다. 예를 들어, 1.0-SNAPSHOT
버전에 두 개의 빌드가 있고 첫 번째 빌드가 20210728.194552-1
인 경우 해당 빌드를 Unlisted
로 설정하는 명령은 다음과 같습니다.
aws codeartifact update-package-versions-status --domain
my-domain
--domain-owner 111122223333 \ --repositorymy-maven-repo
--format maven --namespace com.mycompany.app --package pkg-1 \ --versions 1.0-20210728.194552-1 --target-status Unlisted
스냅샷과 외부 연결
Maven 스냅샷은 외부 연결을 통해 Maven 퍼블릭 리포지토리에서 가져올 수 없습니다. 는 Maven 릴리스 버전 가져오기 AWS CodeArtifact 만 지원합니다.
스냅샷 및 업스트림 리포지토리
일반적으로 Maven 스냅샷은 업스트림 리포지토리와 함께 사용할 때 Maven 릴리스 버전과 동일한 방식으로 작동하지만 업스트림 관계가 있는 두 리포지토리에 동일한 패키지 버전의 스냅샷을 게시하려는 경우 제한이 있습니다. 예를 들어 AWS CodeArtifact 도메인에 리포지토리가 두 개 있고 U
가 업스트림인 R
U
와 가 있다고 가정해 보겠습니다R
. 에 새 빌드를 게시하는 경우 Maven 클라이언트가 해당 스냅샷 버전의 최신 빌드를 요청R
하면 에서 최신 버전을 CodeArtifact 반환합니다U
. 최신 버전이 이제 가 R
아닌 에 있기 때문에 예상치 못한 상황이 발생할 수 있습니다U
. 이를 방지하는 방법은 두 가지가 있습니다.
-
에 있는
R
경우1.0-SNAPSHOT
에서와 같은 스냅샷 버전의 빌드를 게시하지 마세요1.0-SNAPSHOT
U
. -
CodeArtifact 패키지 오리진 제어를 사용하여 에서 해당 패키지의 업스트림을 비활성화합니다
R
. 후자의 경우 에 빌드를1.0-SNAPSHOT
게시할 수 있지만R
가 아직 보존되지U
않은 에서 해당 패키지의 다른 버전을R
가져오지 못하게 합니다.