Sonatype NexusjFrog Artifactory 사용하게되면 보다 정교하게 프로젝트의 artifact들을 관리할수 있지만, AWS S3 스토리지를 이용해서도 추가로 서버 설정없이 간단히 구성할 있습니다.

 

 

IAM 사용자 생성

이용자는 콘솔로그인이 필요없으며,  API 접속하게 되므로”Programmatic access”권한만 주고, S3버켓에만 접근 할수 있도록 권한만 주면 될것 같습니다.

저는 “maven-repo-artifact”라는 사용자를 생성하였습니다.

 

 

Repository Bucket 생성과 Permission Policy 적용

가능하면 나중에 Static webhosting 할수있도록 해당룰을 따르면 나중에 있으므로 관리하고있는 도메인을 이용하여 버켓이름을 생성합니다.

저는 “repo.helloworld.com.au” 이름으로 생성하였습니다.

 

버켓 하위에

repo.helloworld.com.au/release

repo.helloworld.com.au/snapshot 버전을 관리할 계획입니다.

 

그리고 Permission policy 설정하는 여러가지 정책이있는데..우선 저는 다음과 같이 설정하였습니다.

{

          "Version": "2012-10-17",

          "Id": " XXXXXX ",

           "Statement": [

                      {

                              "Sid": "XXXXXX",

                                "Effect": "Allow",

                                "Principal": {

                                                   "AWS": "arn:aws:iam::[AWS계정번호]:root"

                                  },

                                "Action": "s3:*",

                                "Resource": [

                                                   "arn:aws:s3:::repo.helloworld.com.au",

                                                   "arn:aws:s3:::repo.helloworld.com.au/*"

                                 ]

                      }

           ]

}

 

*** XXXXXX[AWS계정번호] 라고 마킹된 부분은 본인 계정에 맞에 설정합니다.

 

 

settings.xml 설정

모든 설정을 pom.xml에서 할수 있지만, 그렇게 되면 접속 정보까지 공유하게 되므로Authentication 관련된 정보는 로컬레 설정합니다.

 

setting.xml 파일은 Maven설치디렉토리/conf 있는것을 이용하는것과 ~.m2/settings.xml 파일을 편집해서 사용할수 있는데 보인이 사용하는 개발툴에 따라서 어느것을 Override해서 사용하는 냐에따라 선택에서 설정할 수있습니다.  모두다 서로간 상속받는 구조로 되어있으므로 개인개발툴의 설정을 고려하여 편집합니다.

 

Settings.xml에는 접속하려는 사용자 아이디와 비빌번호를 IAM사용자 생성시 발급받은Accesskey Secret access key 입력해줍니다.

    <server>

         <id>maven-repo-release</id>

         <username>[Access key]</username>

         <password>[Secret access key]</password>

    </server>

    <server>

         <id>maven-repo-snapshot</id>

         <username>[Access key]</username>

         <password>[Secret access key]</password>

    </server>

*** Access key[Secret access key] 라고 마킹된 부분은 본인 계정에 맞에 설정합니다.

 

 

 

pom.xml 설정

이젠 maven 플러그인을 실행할때 지정된 Repository 업로드 될수 있도록 설정(Redefine) 합니다.

다음과 같은 정보를 추가합니다.

 

아래 설정은 <project> 하위에 설정합니다.

<distributionManagement>
    <
repository>
        <
id>maven-repo-release</id>
        <
name>AWS Release Repository</name>
        <
url>s3://repo.helloworld.com.au/releases</url>
    </
repository>
    <
snapshotRepository>
        <
id>maven-repo-snapshot</id>
        <
name>AWS Snapshot Repository</name>
        <
url>s3://repo.helloworld.com.au/snapshots</url>
    </
snapshotRepository>
</
distributionManagement>

 

 

아래 설정은 <build> 하위에 설정합니다.

<extensions>
    <
extension>
        <
groupId>org.springframework.build</groupId>
        <
artifactId>aws-maven</artifactId>
        <
version>5.0.0.RELEASE</version>
    </
extension>
</
extensions>

 

*** Access key[Secret access key] 라고 마킹된 부분은 본인 계정에 맞에 설정합니다.

 

메이븐 dependency들을 다운로드 받을때 등록된 레파지토리에서 체크할수 있도록 등록해줍니다.

<repositories>
    <
repository>         <id>maven-repo-release</id>         <name>S3 Release Repository</name>         <url>s3://repo.helloworld.com.au/releases</url>     </repository>
    <
repository>         <id>maven-repo-snapshot</id>         <name>S3 Snapshot Repository</name>         <url>s3://repo.helloworld.com.au/snapshots</url>     </repository>
</
repositories>

 

 

 

 

이젠 업로드된 artifact들을 메이븐 dependency 설정을 통해 공유되도록 하기위한 설정을 합니다.

<dependency>     <groupId>au.com.helloworld</groupId>     <artifactId>helloworld.ecommerce</artifactId>     <version>${helloworld.ecommerce-version}</version> </dependency>

 

 

 

해당 디렉토리에서 다음 컨맨드를 실행하면 최종 결과물이 업로드되는것을 확인 할수 있을것입니다.

 

$> mvn deploy








Posted by Steven J.S Min

댓글을 달아 주세요

  1. coding8282 2018.05.26 23:14 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 제가 설정을 해봤는데, 서울 리전에 아티팩트 업로드가 실패하더라구요. 알아보니까 AWS Signature4 하고 연관이 있던데, 일본리전으로 해보니 잘 됩니다. 홁시 위에 같이 셋팅하신 후에 서울 리전에서 정상 작동하시는지요ㅜㅜ??