본문 바로가기
개발 관련됨/개발 관련 유용한 정보함

[나만의 라이브러리 제작기-2] JFlog Bintary는 무엇이고, 어떻게 라이브러리를 올렸는가?

by simplify-len 2020. 9. 12.

들어가기

 JFlog Bintray는 자바 의존성을 추가하기 위한 공개 저장소 중 JCenter에 배포하기 위해 존재하는 플랫폼 중 일부입니다. 그 부분에 대해서 좀 더 자세히 살펴보고, 올리는 과정에서 겪었던 이슈를 적어볼까 합니다.

JFlog Bintray? 

 사실 위에서 언급한 것과 같이, JFlog는 그저 배포를 위한 플랫폼 중 일 부분입니다. Bintray는 "Software Distrubutuin as Service" 로서 홈페이지 설명에 따르면, 

- 단 한번의 배포로, 다양한 주요 패키지(docekr, debian, npm, maven ... )들을 한번에 배포할 수 있게 도와준다.

- REST API를 활용하기 때문에 Jenkins와 같은 배포 도구에도 손쉽게 붙여 사용할 수 있다.

- 그리고 마지막으로 Artifactory 와 손쉽게 통합할 수 있게 해주는 도구

Artifactory 이란?
 바이너리 저장소 관리자 역할을하는 JFrog의 제품 입니다. 그것은 많은 사람들이 Frigidaire 브랜드인지 여부에 관계없이 냉장고를 표시하기 위해 Frigidaire 또는 fridge를 사용하는 것처럼 매우 일반적인 바이너리 저장소의 동의어로 'artifactory'를 사용합니다.

 바이너리 저장소는 종종 아티팩트로 표시되는 빌드 프로세스의 결과를 저장한다는 점에서 소스 코드 저장소의 자연스러운 확장입니다. 대부분의 경우 바이너리 저장소를 직접 사용하지 않고 선택한 기술과 함께 제공되는 패키지 관리자를 통해 사용합니다.
대부분의 경우 이들은 나중에 전체 제품으로 조립할 수있는 개별 애플리케이션 구성 요소를 저장하므로 빌드를 더 작은 청크로 분할하여 리소스를보다 효율적으로 사용하고 빌드 시간을 줄이고 바이너리 디버그 데이터베이스를 더 잘 추적 할 수 있습니다.

 

어떻게 JCenter에 올렸는가?

 처음 시작은 기억보단 기록을 블로그를 참조했습니다.

여기서는 Maven을 사용했지만, 저는 Gradle을 사용해 진행했습니다. 중간에 pom.xml 대신 여기를 참조해서 진행했습니다. 그리고 중간중간 여러가지 사이트를 참조했는데, 가장 좋았던 사이트의 경우는 여기, 여기 입니다.

 진행하면서 문제가 생긴 부분 있으시면, 댓글 달아주시면- 해결방법에 대해서 같이 고민하겠습니다.

 개인 계정을 했을 때는 쉽게 가능했었는데, Binrary 에 조직을 만들면서 예상치 못했던 문제를 맞닥뜨렸습니다. 

 

겪었던 이슈들

1.Build.gradle 에서 gradle task 중, publication을 위한 행위를 진행하는데, 조직이 경우에는 어떻게 올려야하는가?   

JCenter 연동시,

2. Package should include sources as part of the package. 라는 문구를 만났을 때 해결하는 방법

 이 두가지를 해결할 수 있었던 Build.gradle은 아래와 같습니다. 코드 저장소

 

slipp-projects/assertions

Contribute to slipp-projects/assertions development by creating an account on GitHub.

github.com

 gradle 과 bintray 를 연동하기 위해서 사용된 plugin은 github.com/bintray/gradle-bintray-plugin 입니다.

 

plugins {
    id 'java-library'
    id 'maven-publish'
    id "com.jfrog.bintray" version "1.8.4"
    id "com.jfrog.artifactory" version "4.5.4"
}

group 'net.slipp'
version '0.1.1-snapshot'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
...
bintray {
    user = System.getenv('BINTRAY_USER')
    key = System.getenv('BINTRAY_KEY')
    publications = ['MyPublication']
    pkg {
        repo = 'libraries'
        name = 'assertions'
        userOrg = 'slipp-projects'
        vcsUrl = 'https://github.com/slipp-projects/assertions.git'
        version {
            desc = 'slipp-assertion-library'
            released  = new Date()
        }
    }
}

task sourcesJar(type: Jar) {
    from sourceSets.main.allJava
    archiveClassifier.set('sources')
}

task javadocJar(type: Jar) {
    from javadoc
    archiveClassifier.set('javadoc')
}

publishing {
    publications {
        MyPublication(MavenPublication) {
            from components.java
            artifact sourcesJar
            artifact javadocJar
            groupId 'net.slipp'
            artifactId 'assertions'
        }
    }
}

이렇게 작성후 조직이라면, userOrg 를 입력해 주셔야합니다. 그리고 GPG Key를 그룹단위로 입력할 수 있기 때문에 꼭 그 행위를 해야 합니다. 그리고 개인의 경우에는 API_KEY가 존재하지만, 조직의 경우에는 없습니다. 그럼 어떻게 배포하는가? 조직원이라면 자신의 API KEY를 갖고 배포하면 됩니다.

 그리고, bintray 연동을 위해서 publications=['MyPublication'] 부분을 추가해야합니다. 이 부분을 놓쳐서 시간을 낭비했었습니다. bintray와 gradle을 연동하는 sample 프로젝트를 통해서 찾을 수 있었습니다.

 

BINTRAY_USER=username BINTRAY_KEY=api_key ./gradlew clean bintrayUpload -s

 추가 팁으로 gradle에 변수를 받을 수 있는 다양한 방법은 여기 링크를 통해 확인하실 수 있습니다.

 

[참고자료]

jfrog.com/integration/bintray/

devops.stackexchange.com/questions/1898/what-is-an-artifactory

medium.com/@nmauti/sign-and-publish-on-maven-central-a-project-with-the-new-maven-publish-gradle-plugin-22a72a4bfd4b

devops.stackexchange.com/questions/1898/what-is-an-artifactory

reflectoring.io/guide-publishing-to-bintray-with-gradle/

댓글