GitHub Package 사용하기: NuGet
민경환 사원
GitHub Package 사용하기: NuGet
참고하면 좋은 포스팅 : GitHub 패키지 저장소 호스팅: GitHub Package Registry 시작하기
GitHub Pacakge 란?
NPM, Maven, rubygems, NuGet 패키지 및 Docker 이미지를 배포할 수 있는 서비스
무스마에서는 GitHub Package 를 이용하여 NPM
패키지를 호스팅 하고 여러 프로젝트에서 잘 사용하고 있습니다.
그런데! 이번에는 .NET
라이브러리를 공유해야 할 상황이 왔는데요.
GitHub Package 는 .NET
패키지 관리자인 NuGet
또한 지원하기 때문에 이를 이용하여 성공적으로 공유할 수 있었습니다 🙂
dotnet CLI
를 이용하여 간단하게 GitHub Pacakge 에 게시하는 방법을 알아보겠습니다.
사전작업
Personal access tokens 발급받기
패키지를 게시 및 설치하려면 액세스 토큰이 필요합니다. 개인 액세스 토큰을 사용하여 사용자 이름으로 GitHub 패키지에 직접 인증 할 수 있습니다.
토큰을 발급받을 수 있는 페이지로 이동합니다.
-
GitHub → User → Settings
-
Developer settings → Personal access tokens
토큰 발급을 위하여 Generate new token 을 클릭합니다.
wrtie:packages 에 체크하고 토큰을 생성합니다.
write:pacakges
scope 를 선택하면 자동으로repo
와read:packages
가 선택됩니다.패키지 게시를 할 필요가 없고 설치만 필요한 경우
read:pacakges
scope 만 선택하세요.
생성된 토큰을 잘 복사해둡니다.
.NET SDK 설치
자신이 배포할 버전에 맞는 SDK 를 설치하세요.
Window
https://dotnet.microsoft.com/download 에서 다운로드
Mac
$ brew tap isen-ng/dotnet-sdk-versions
$ brew cask install dotnet-sdk2-2-400
Nuget 설치
Window
- https://www.nuget.org/downloads 에서 NuGet 4.1.0 이상 다운로드
nuget.exe
를 둔 폴더를 PATH 환경 변수에 추가
Mac
$ brew install nuget
Nuget.Config 작성
직접 작성하는 방법
OS | NuGet.Config 파일 위치 |
---|---|
Window | %appdata%\NuGet\NuGet.Config |
Mac/Linux | ~/.config/NuGet/NuGet.Config 혹은 ~/.nuget/NuGet/NuGet.Config |
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="github" value="https://nuget.pkg.github.com/[AUTHOR]/index.json" />
</packageSources>
<packageSourceCredentials>
<github>
<add key="Username" value="[USER_NAME]" />
<add key="ClearTextPassword" value="[GITHUB_TOKEN]" />
</github>
</packageSourceCredentials>
</configuration>
AUTHOR
: 조직의 이름을 작성합니다. (e.g.musma
)USER_NAME
: 조직의 이름을 작성합니다.GITHUB_TOKEN
: 발급받은 토큰을 붙여넣습니다.
CLI를 이용하는 방법
> nuget sources add \
-name github \
-source https://nuget.pkg.github.com/[AUTHOR]/index.json \
-username [USER_NAME] \
-password [GITHUB_TOKEN] \
-StorePasswordInClearText \
-configfile %appdata%\NuGet\NuGet.Config
AUTHOR
: 조직의 이름을 작성합니다. (e.g.musma
)USER_NAME
: 조직의 이름을 작성합니다.GITHUB_TOKEN
: 발급받은 토큰을 붙여넣습니다.
패키지 게시
.csproj 수정
게시할 패키지의 *.csproj 파일에 아래와 같이 프로퍼티를 추가합니다.
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>[PACKAGE_NANE]</PackageId>
<Version>1.0.0</Version>
<Authors>[AUTHOR]</Authors>
<Company>[COMPANY]</Company>
<RepositoryUrl>https://github.com/[OWNER]/[REPOSITORY]</RepositoryUrl>
</PropertyGroup>
PACKAGE_NAME
: 배포할 패키지의 이름을 작성합니다.AUTHOR
: 작성자를 작성합니다.COMPANY
: 조직의 이름을 작성합니다.OWNER
: 조직의 이름을 작성합니다.REPOSITORY
: 게시하려는 패키지가 포함 된 저장소의 이름을 작성합니다.
프로젝트 패키징
$ dotnet pack --configuration Release
패키지 게시
$ dotnet nuget push "bin/Release/[PACKAGE_NANE].1.0.0.nupkg" --source "github"
PACKAGE_NAME
: 배포할 패키지의 이름을 작성합니다.
패키지 설치
프로젝트에 포함된 공통 모듈을 제거하고 GitHub Package 를 통해 설치하는 방법을 알아보겠습니다.
단순히 패키지를 받아올 목적이라면 아래 단계를 건너 뛰고 패키지 추가 부터 참고하세요.
솔루션에서 모듈 제거
삭제할 모듈이 참조하는 다른 모듈이 있는지 확인 후 존재하면 참조 관계를 삭제합니다.
$ cd [MODULE_NAME]
$ dotnet list reference
$ dotnet remove reference [REFERENCE_MODULE_NAME]
참조 관계를 삭제 후 솔루션에서 제거합니다.
$ dotnet sln remove [MODULE_NAME]
$ dotnet sln remove [REFERENCE_MODULE_NAME]
MODULE_NAME
: 삭제할 모듈의 이름을 작성합니다.REFERENCE_MODULE_NAME
: 삭제할 모듈이 참조하고 있는 모듈의 이름을 작성합니다.
모듈 제거
솔루션에서 제거를 완료하였다면 모듈 제거를 진행합니다.
$ rm -rf [MODULE_NAME]
MODULE_NAME
: 삭제할 모듈의 이름을 작성합니다.
패키지 추가
패키지 추가는 VS Code 환경에서 진행하였습니다.
-
패키지 우클릭 → NuGet 패키지 관리 선택
-
모든 소스 → github 선택
-
추가하고자 하는 패키지 선택 → 패키지 추가
-
패키지 추가에 성공한 것을 확인할 수 있습니다.
-
packages.config 확인
<package id="CAutoManagerSdk" version="1.0.0" targetFramework="net471" />
-
*.csproj 확인
<Reference Include="CAutoManagerSdk"> <HintPath>..\packages\CAutoManagerSdk.1.0.0\lib\netstandard2.0\CAutoManagerSdk.dll</HintPath> </Reference>
마치며
프로젝트에 필요한 패키지를 매번 복사-붙여넣기 하는 것은 프로젝트 구성을 복잡하게 만들 뿐만 아니라 생성시에도 매우 귀찮은데요.
사설 저장소를 이용하자니 돈도 들고 관리도 어려운데, 오픈소스는 물론이고 private 프로젝트에서도 무료로 사용가능하다니 정말 혜자스러운 서비스 인 것 같습니다.