Nuget Gallery 서버에 내 패키지 등록하기 : Uploading package to nugget gallery

Nuget 2011. 12. 16. 08:14

맨날 Nuget에서 필요한 라이브러리를 다운로드 받아서 사용하기만 해봤지 한번도 Nuget에 뭘 올리려는 생각은 해본 적이 없었다.

그래서 시도해 보기로 한 내 패키지 올려보기 !!

몇 번의 삽질끝에 성공하긴 했지만 생각보다 만만친 않았다.

 

이곳 싸이트에 가면 자세한 업로드 방법이 나와있긴 하지만 너무 바이블식의 장황한 설명이여서 내가 정말 필요한 부분만 발췌해서 정리해 놓기로 한다. 그리고 저 사이트에서 설명하는대로 패키지를 업로드하는 방법은 여러가지가 있지만, dll 어셈블리 파일들 뿐만 아니라 텍스트 파일, 자바스크립트 파일, PowerShell 스크립트 등의 여타 다른 파일들도 배포하기 위해서는 아래서 설명할 방법을 사용하는게 가장 쉬운 방법이다.

 

패키지 업로드는 크게

  • Nuget Convention에 따라 폴더 구조 만들어 주기
  • *.nuspec 파일 생성하기
  • *.nupkg 파일 생성하기
  • Nuget 갤러리에 배포하기

단계로 나눌 수 있다.

 

Nuget Convention에 따라 폴더 구조 만들어 주기

먼저 Nuget에서 원하는 폴더 구조 만들어 주기… 에 앞서 업로드 할 클래스 라이브러리를 하나 만들자.

그 다음 루트 폴더(최상위에 있는 DotNetRoo 폴더) 하위에 Nuget이라는 폴더와 함께 하위에 Nuget Convention 대로 폴더들을 만든다. 아래 그림 참조

 

그림처럼 Nuget 폴더 밑에 버전을 관리할 목적의 DotNetRoo.0.0.3 폴더, 그 하위에 Nuget Convention을 따르는 세 폴더 content, lib, tools 폴더를 만들어 놓는다.

Content 폴더에는 나중에 이 패키지를 nuget에서 다운로드받아서 설치했을때 그 프로젝트의 루트에 복사될 파일과 폴더를 위치시킨다. 이번엔 테스트 용도로 Test.txt 파일을 만들어서 넣어 놓는다. Lib 폴더에는 나중에 이 패키지를 nuget에서 다운로드 받아서 설치했을때 '레퍼런스 추가' 될 dll 파일들을 넣어 놓는다. 따라서 DotNetRoo/DotNetRoo/bin/debug 폴더 밑에 있는 DotNetRoo.dll 파일을 복사해서 lib 밑에 넣어둔다.

그런데, 이 때 우리가 원하는 닷넷 프레임웍의 최소 버전을 지정할 수 있는데 그림에서 처럼 net40이라고 폴더를 만들고 그 하위에 DotNetRoo.dll 파일을 넣어두면 이 패키지를 다운로드해서 설치할 때 최소한 .NET 4.0 버전을 요구하게 된다. net40 폴더 아래에 DotNetRoo.dll을 넣어 둔다.

마지막으로 tools 폴더는 나중에 이 패키지가 설치된 이후에 그 프로젝트의 Package Manager Console에서 사용할 수 있는 PowerShell 스크립트 파일들이 위치하게 된다. 이 때 Ps1 파일(PowerShell 스크립트) 이름을 Init.ps1, Install.ps1, Uninstall.ps1과 같이 Nuget Convention에 따라서 지어주면 나중에 패키지가 설치될 때 자동으로 실행되도록 할 수 있다. 일단 이 폴더는 빈 폴더로 놔두자.

 

*.nuspec 파일 생성하기

다음 단계는 nuspec라는 확장자를 가지는 XML 파일을 만들어 주는 것이다. *.nuspec 파일은 업로드할 패키지의 메타 정보를 가지고 있는 파일이라고 생각하면 된다.

이를 위해서는 커맨드 창에서 nugget 명령어를 실행해야 하는데 이를 위해서는 이 곳에서 nugget.exe를 다운로드 받은 후 환경변수 PATH에 그 폴더 경로를 추가하도록 한다.

그 다음 커맨드 창에서 /DotNetRoo/DotNetRoo 폴더로 이동한 후 nugget spec라는 명령을 실행시킨다.

이 폴더 위치에서 실행시키는 이유는 *.csproj 파일 때문이다. 저 파일을 인식해서 nuspec 파일을 만든다.

그럼 DotNetRoo.nuspec 라는 파일이 생성되고 열어보면 $id$, $version$와 같은 치환이 필요한 문자들이 들어가 있는데 아래 그림처럼 적절하게 치환시키면 된다.

그리고 이 파일은 /DotNetRoo/Nuget/DotNetRoo.0.0.3 폴더 밑으로 이동(복사가 아니고)시켜 놓도록 하자.

 

*.nupkg 파일 생성하기

그런 후 커맨드 창에서 DotNetRoo.0.0.3 파일이 있는 /DotNetRoo/Nuget/DotNetRoo.0.0.3 폴더로 이동한 다음 아래의 명령어를 실행시킨다.

그러면 DotNetRoo.0.0.3.nupkg 파일이 생성된 것을 볼 수 있다.

 

Nuget 갤러리에 배포하기

이제 마지막 단계이다. 커맨드 창의 같은 경로에서 아래와 같이 명령어를 실행한다.

여기서 xxxxxxxxxxxxxxxxxxxxxxx 라고 된 부분은 api-key키로 치환해야할 곳인데, http://nuget.org에서 회원가입을 한후 계정정보 페이지에 가보면 API Key라고 된 부분에 명시된 문자열 키를 복사하여 넣어주면 된다.

여기까지 무리없이 실행하였으면 nuget gallery에 내가 만든 DotNetRoo가 업로드되어 배포되었을 것이다.

 

내가 만든 패키지 다운로드 !!!

업로드한 패키지가 제대로 다운로드 되는지 확인해 보기 위해서 콘솔 프로젝트를 하나 만들고 Package Manager Console에서 install-package를 실행 해보자.

솔루션 탐색기를 보면 DotNetRoo 어셈블리가 추가되었고, 첫 단계에서 content 폴더에 넣었던 test.txt 파일도 추가된 것을 볼 수 있다.

 

이걸로 nuget 갤러리 서버에 패키지를 업로드하고 다운로드 하는 배포과정이 모두 끝났다.

다음 단계는???

신나게 오픈 소스 플젝 코딩하는거~

 

p.s 최근 Microsoft를 떠나 GitHub로 옮긴 Phill Haack이 어느날 Miguel(Mono 프로젝트의 창시자이자 Xamarin의 설립자)에게 오픈 소스에 이렇게 투자하는 이유가 뭐냐고 물었더니, "A rising tide lifts all boats"라는 대답을 듣고 많은 걸 생각하게 됐다고 한다. 또, 일맥 상통하는 얘긴데, NHibernate 프로젝트의 메인 개발자이자 RavenDB의 개발자인 Ayende가 자기가 평생 오픈 소스로 개발과 사업을 해오면서 프로젝트든 사업이든 한번도 실패한 적이 없다는 얘기도… 최근에 내 머릿속을 맴돈다.

tags :
Trackbacks 0 : Comments 0

Write a comment