아티클 관련 제품: SparklingSoDA3.0
들어가며
- NEXUS Repository는 기본적으로 관리자 로그인을 통해 UI에서 패키지를 업로드 할 수 있습니다.
- 하지만 Python 패키지를 제외한 기타 R 및 Yum, Docker 이미지들은 UI에서 업로드 기능을 제공하지 않습니다.
- 이러한 경우 아래의 API를 호출하여 NEXUS Repository에 원하는 파일 및 패키지 (이미지)들을 업로드 할 수 있습니다.
내용
먼저 NEXUS Repository에 접속합니다.
Browse 버튼을 눌러 업로드를 하고자 하는 대상의 저장소의 이름을 확인합니다.
대부분 업로드하는 포맷(형식) 이름에 + repo 혹은 hosted 라는 형식의 저장소 이름이 설정되어 있을 것 입니다. Python 패키지를 업로드 하고자 하는 경우 ex) pypi-repo or pypi-hosted R 패키지를 업로드 하고자 하는 경우 ex) r-repo or r-hosted etc..
NEXUS Repository와 통신이 가능한 환경에서 다음의 curl API를 호출합니다.
(NEXUS가 실행 된 노드와 통신이 가능한 환경이라면 운영체제를 가리지 않고 어느 곳에서도 실행이 가능합니다.)
curl -u admin:admin123 -X POST "http://<NEXUS주소>:8081/service/rest/v1/components?repository=<업로드 저장소 이름>" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "pypi.asset=@<업로드할 파일 풀네임>"
curl -u admin:admin123 -X POST "http://<NEXUS주소>:8081/service/rest/v1/components?repository=<업로드 저장소 이름>" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "pypi.asset=@<업로드할 파일 풀네임>"
만약 NEXUS가 실행 된 노드에서 리눅스 터미널 명령어로 위와 같은 API를 실행한다면, 아래와 같은 예시를 참고하여 작업을 진행합니다.
ls -al -rw-r--r--. 1 root root typing_extensions-4.5.0-py3-none-any.whl curl -u admin:admin123 -X POST "http://repo.sparklingsoda.io:8081/service/rest/v1/components?repository=pypi-repo" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "pypi.asset=@typing_extensions-4.5.0-py3-none-any.whl"
* 예시로 protobuf라는 패키지를 위의 API를 이용하여 업로드 진행해보겠습니다.
* 현재 리스트에는 없는 4.22.0 버전의 protobuf 패키지를 업로드 합니다.
업로드할 패키지 파일이 위치한 디렉토리에서 아래의 명령어를 실행합니다.
curl -u admin:admin123 -X POST "http://repo.sparklingsoda.io:8081/service/rest/v1/components?repository=pypi-repo" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "pypi.asset=@protobuf-4.22.0-cp37-abi3-manylinux2014_x86_64.whl"
※ /etc/hosts에 repo.sparklingsoda.io가 등록되어 있지 않다면 실제 ip주소를 입력해야 합니다.
API로 패키지 업로드 후 아래와 같이 4.22.0 파일이 추가된 것을 확인할 수 있습니다.
마무리
- 위와 같은 방법으로 NEXUS Repository에서 UI의 upload기능을 이용하지 않고도 통신이 가능한 노드에서 API를 호출하여 패키지 및 파일들을 업로드 할 수 있습니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.