본문 바로가기
Programming/C#

[C#] C# 라이브러리 패키지를 Github Actions를 이용하여 NuGet에 배포하는 방법

by SpiralMoon 2023. 12. 15.
반응형

C# 라이브러리 패키지를 Git Actions를 이용하여 NuGet에 배포하는 방법

C# 라이브러리를 Github Actions을 이용하여 쉽고 빠르게 NuGet에 배포하는 환경을 구축해보자.

시리즈

2023.12.08 - [Programming/Javascript] - [Javascript] Javascript 라이브러리 패키지를 Github Actions를 이용하여 npm에 배포하는 방법

2024.01.02 - [Programming/Java] - [Java] Java 라이브러리 패키지를 Git Actions를 이용하여 Maven central repository에 배포하는 방법

2024.02.23 - [Programming/Python] - [Python] Python 라이브러리 패키지를 Github Actions를 이용하여 pypi에 배포하는 방법


선행 작업

이 글은 NuGet에 배포하려는 C# 라이브러리 프로젝트가 미리 github repository에 업로드 되어있어야 한다.


작업 순서

  1. .csproj 작성
  2. README.md 작성
  3. NuGet Key 발급
  4. Github Actions Secrets 설정값 등록
  5. Github Actions Worflow 작성
  6. 패키지 배포

.csporj 작성

NuGet에 패키지를 배포하려면 패키지의 요약 정보를 프로젝트의 .csproj에 작성하여야 한다.

 

작성되어야 하는 항목은 다음과 같다.

  • TargetFramework : 프로젝트가 대상으로 하는 .NET 런타임 버전
  • PackageId : 패키지명
  • PackageVersion (option) : 배포할 패키지 버전 (semantic versioning)
  • Description (option) : 패키지 요약 설명
  • PackageTags (option) : 패키지 연관 키워드. NuGet에서 검색 키워드로 활용됨.
  • PackageProjectUrl (option) : 패키지와 관련된 정보를 제공하는 페이지
  • RepositoryUrl (option) : 패키지의 소스코드 repository 주소
  • RepositoryType (option) : 패키지 repository 유형
  • PackageLicenseExpression (option) : 패키지의 사용범위를 제한하는 라이센스 정보
  • Copyright (option) : 패키지 소스코드의 저작권 정보
  • Authors (option) : 패키지 제작자명
  • PackageReadmeFile (option) : 패키지 요약설명 파일

 

예시)

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <PackageId>Sample.Package</PackageId>
    <PackageVersion>1.0.0</PackageVersion>
    <Description>This is sample.</Description>
    <PackageTags>sample;test;example;tutorial</PackageTags>
    <PackageProjectUrl>https://github.com/your-github-name/repository-name</PackageProjectUrl>
    <RepositoryUrl>https://github.com/your-github-name/repository-name</RepositoryUrl>
    <RepositoryType>git</RepositoryType>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
    <Copyright>Copyright © 2023 your name.</Copyright>
    <Authors>your name</Authors>
    <PackageReadmeFile>README.md</PackageReadmeFile>
  </PropertyGroup>

README.md 작성

프로젝트의 root 디렉토리에 README.md 파일을 작성해준다.

 

README.md를 작성하지 않은 상태로 NuGet에 업로드된 패키지

 

README.md 파일이 필수는 아니지만 작성하지 않을 경우 NuGet에 업로드 했을 때 화면이 너무 밋밋해보이기 때문에 완성도가 떨어지는 패키지라는 인식을 심어줄 수 있다. 별 내용이 없어도 작성하는 것을 추천한다.


NuGet Key 발급

NuGet 가입화면

NuGet에 패키지를 업로드하기 위해서는 api key가 필요한데 발급받기 위해서는 NugGet 웹사이트의 계정이 필요하다.

NuGet Gallery에 접속하여 회원가입을 한다.

 

로그인 후 프로필 메뉴를 눌러 API Keys 메뉴로 접속한다.

 

api key의 이름을 지어주고 유효기간을 커스터마이징 한다. 한 곳에 박아두고 계속 쓸거면 그냥 기간 최대(1년)로 설정하자.

패키지 업로드 권한이 있는 api key가 필요하기 때문에 스코프를 Push new packages and package versions로 설정한다.

 

Select Packages 항목에서는 api key로 관리할 수 있는 패키지 목록을 glob 문자열 패턴으로 지정할 수 있는데, api key를 업로드 하고 싶은 패키지에만 유효하도록 적용할 생각이면 패키지명과 동일하게 작성하면 되고 범용이면 *로 작성하고 Create 버튼을 클릭한다.

 

api key가 생성되었다. api key의 값은 페이지를 이동하면 재확인이 불가하므로 Copy 버튼을 클릭하여 복사해두자.


Github Actions Secrets 설정값 등록

Github Actions에서 배포를 진행할 것이기 때문에 패키지 프로젝트가 미리 github repository에 업로드 되어있어야 한다.

repository에 접속하여 Settings 탭을 클릭하여 Secrets and variables 항목의 Actions를 클릭한다.

 

이 곳에서는 Github Actions Workflow에서 사용할 환경변수를 만들 수 있다. New repository secret 클릭

 

환경변수의 이름(NUGET_UPLOAD_KEY)을 짓고 위에서 복사해둔 api key를 붙여넣은 후 Add secret을 클릭한다.

이제 Github Actions Workflow 파일에서 NUGET_UPLOAD_KEY 라는 이름의 환경변수를 꺼내면 api key 값을 사용할 수 있게 되었다.


Github Actions Workflow 작성

name: Build and Publish C#

on:
  workflow_dispatch:

jobs:
  build_and_publish_csharp:
    runs-on: ubuntu-latest
    env:
      NUGET_TOKEN: ${{ secrets.NUGET_UPLOAD_KEY }}
      PROJECT_NAME: YourProjectName

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: 6.0.100

      - name: Build
        run: |
          echo "Building .NET project"
          dotnet build -c Release "./${{ env.PROJECT_NAME }}"

      - name: Publish to NuGet
        run: |
          echo "Publishing to NuGet"
          dotnet pack -c Release "./${{ env.PROJECT_NAME }}"
          dotnet nuget push ./${{ env.PROJECT_NAME }}/bin/Release/${{ env.PROJECT_NAME }}.*.nupkg --source https://api.nuget.org/v3/index.json --api-key $NUGET_TOKEN

 

 

프로젝트의 /.github/workflows 디렉토리에 deploy.yaml 파일을 작성하고 master 브랜치에 푸시한다.

 

버튼 클릭으로 실행할 것이기 때문에 트리거를 workflow_dispatch로 지정했다. 실행환경을 ubuntu-latest로 설정하고 환경변수 NUGET_TOKEN(api key)를 불러오고 PROJECT_NAME(project directory)을 설정하였다.

 

빌드, 퍼블리싱을 순서대로 실행하도록 dotnet 명령어 구성을 해주면 된다. (테스트 작업을 넣을 경우 빌드와 퍼블리싱 사이에 구성)

 

만약 실행 트리거를 자동으로 바꾸고 싶다면 on 트리거로 workflow_dispatch를 사용하지말고

on:
  push:
    branches:
      - master

 

처럼 대신하면 된다.


패키지 배포

repository에 접속하여 Actions 탭의 좌측 목록에서 위에서 작성한 workflow의 제목을 찾아서 클릭한다.

 

배포를 실행할 브랜치를 선택하고 Run workflow 클릭

 

workflow 실행 결과

모든 step이 정상적으로 종료되었으면 NuGet에 패키지 배포를 성공한 것이다!

배포된 패키지는 NuGet에 검색하면 표시된다. 이제 C# 기반 프로젝트에서 NuGet 저장소로부터 해당 패키지를 설치할 수 있다!

 

(README는 인덱싱이 완료될 때까지 몇분정도 대기 필요)

반응형

댓글