TravisCI를 사용하여 NuGet 패키지를 지속적으로 제공

· 4분 읽기

최근에 Travis CI를 방금 푸시했거나 master 브랜치에 푸시하려고 하는 코드를 자동으로 테스트하는 도구로 사용하는 방법에 대한 튜토리얼을 작성했습니다. 컴파일하고 테스트하여 최종적으로 변경 상태를 보고합니다.

Gyazo의 이미지

하지만 계속 더 좋게 만들 수 있습니다. 예를 들어 지난 튜토리얼에서 만든 핵심 라이브러리를 NuGet 피드를 사용하여 공개하여 모든 사람이 라이브러리에서 쉽게 작업할 수 있도록 하고 싶습니다!

하지만 어떻게요? 모든 사람이 자신의 프로젝트에서 다운로드할 수 있도록 해당 패키지를 어떻게 컴파일하고 테스트한 다음 피드에 게시할까요?

자, 이것이 😁에 대한 튜토리얼입니다!

새로운 소식은 무엇인가요?

코드와 관련된 변경 사항은 거의 없습니다. 변경해야 할 사항은 패킹, 게시 및 자동화 방법입니다.

.NET 코어 CLI

.NET Core CLI를 사용할 예정이며, 이전 자습서에서 dotnet restore, dotnet builddotnet test와 같은 명령과 함께 사용했습니다.

이제 우리는 새로운 명령 세트를 사용할 것입니다!

dotnet nuget

이 도구 세트에 대한 문서는 바로 여기에서 확인할 수 있지만 간략한 설명은 다음과 같습니다.

dotnet nuget는 패키지 설치, 복원, 제거 및 게시를 포함하는 필수 도구 세트입니다.

NuGet 피드

NuGet은 .NET용 패키지 관리자입니다. NuGet 클라이언트 도구는 패키지를 생성하고 사용하는 기능을 제공합니다. NuGet 갤러리는 모든 패키지 작성자와 소비자가 사용하는 중앙 패키지 저장소입니다.

NuGet은 무료이므로 가입하고 API 키를 받아 패키지 업로드를 시작할 수 있습니다. 모든 사람에게 업로드되고 확인된 후 나열됩니다.

API 키를 가져옵니다

패키지를 업로드하려면 가입 후 API 키를 받아야 하므로 API 키 페이지로 이동하여 새 API 키를 만드세요.

Gyazo의 이미지

API 키의 만료 기간은 365일입니다.

그런 다음 페이지에 설명된 대로 키를 복사하여 어딘가에 저장하면 다시 볼 수 없으며, 저장하지 않으면 다시 생성해야 합니다.

Gyazo의 이미지

NuGet 패키지 생성

이제 API 키가 있으므로 다음 단계는 솔루션에서 해당 NuGet 패키지를 생성하는 것입니다. 따라서 클래스 라이브러리가 있는 솔루션을 엽니다.

저는 CalculatorCLI.Core라는 .NET Core 라이브러리 클래스가 있는 마지막 자습서의 솔루션을 사용할 것입니다.

이제 프로젝트 속성으로 이동한 다음 패키지로 이동하면 패키지 버전, 작성자, 설명 등과 같은 패키지에 관한 많은 정보를 볼 수 있습니다.

다음은 이것을 채우는 것입니다. 실제로 모든 것을 채울 필요는 없지만 중요하고 필수 사항은 Package id, Package version, AuthorsDescription입니다. 또한 직접 파일을 업로드하려고 하면 License를 요청하게 되므로 해당 파일도 추가해야 합니다.Gyazo의 이미지

그런 다음 저장하고 프로젝트를 마우스 오른쪽 버튼으로 클릭한 다음 Pack를 선택합니다.

1>------ Build started: Project: CalculatorCLI.Core, Configuration: Debug Any CPU ------
1>CalculatorCLI.Core -> D:\Development\Personal\CalculatorCLI-demo\CalculatorCLI\CalculatorCLI.Core\bin\Debug\netstandard2.1\CalculatorCLI.Core.dll
1>Successfully created package 'D:\Development\Personal\CalculatorCLI-demo\CalculatorCLI\CalculatorCLI.Core\bin\Debug\CalculatorCLI.Core.1.0.0.1.nupkg'.
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

출력에는 모든 것이 정상이면 Successfully created package가 인쇄되는 것으로 표시됩니다.

dotnet 사용

이전 튜토리얼과 마찬가지로 솔루션을 빌드하고 테스트하기 위해 다양한 명령을 사용했습니다. 이제 패키지를 압축하고 게시하는 명령을 더 추가하겠습니다.

해당 명령은 다음과 같습니다.

  1. dotnet pack -c <configuration>
  2. dotnet nuget push <package> <k <apikey> -s <source>

배포 스크립트

빌드 방식을 변경할 예정이므로 환경에 따라 각 파일에 빌드 정의가 포함된 다양한 파일을 갖는 것이 가장 좋은 아이디어라고 생각합니다.

이제 저장소 루트에 3개의 bash 스크립트가 포함된 scripts라는 폴더를 생성해 보겠습니다.

scripts\compile.sh

#!/bin/sh

echo "Restoring..."
dotnet restore ".\CalculatorCLI\CalculatorCLI.sln"   

echo "Building..."
dotnet build ".\CalculatorCLI\CalculatorCLI.sln" -c Release

scripts\test.sh

#!/bin/sh

echo "Testing..."
dotnet test ".\CalculatorCLI\CalculatorCLI.sln" -c Release -v n

scripts\push.sh

#!/bin/sh

echo "Packing..."
dotnet pack ./CalculatorCLI/CalculatorCLI.Core/CalculatorCLI.Core.csproj -c Release

echo "Pushing..."
dotnet nuget push ./CalculatorCLI/CalculatorCLI.Core/bin/Release/*.nupkg -s "https://nuget.org" -k $NUGET_API_KEY

.travis.yml 파일 개선

이제 소스 코드가 업데이트되었으므로 사용해야 하는 명령을 알았으므로 지속적인 통합과 지속적인 제공을 통합해야 합니다. 이를 통해 우리는 코딩, 테스트, 검토 및 푸시 외에는 아무것도 할 필요가 없습니다.

이제 .travis.yml 파일에 대해 수행할 작업은 다음과 같습니다.

  1. 다른 stages 추가
  2. stage는 지점에 따라 다릅니다.
  3. 빌드가 마스터에 있는 경우 패키지를 업데이트해야 함을 의미하므로 패키지를 NuGet 피드에 푸시합니다.
  4. 빌드가 풀 요청인 경우에도 빌드가 컴파일되고 테스트되는지 확인하지만 게시하지는 않을 것입니다.

스테이지

해당 문서에서:

빌드 구성(.travis.yml 파일)에서 조건을 지정하여 빌드, 단계 및 작업을 필터링하고 거부할 수 있습니다.

문서 페이지에서 TravisCI stages에 관한 자세한 정보를 찾을 수 있습니다.

따라서 파일을 변경하고 스테이지를 추가하면 다음과 같이 됩니다.

language:
    csharp
sudo: required
mono: none 
dotnet: 3.0

os:
  - linux
    
jobs:
  include:
    - stage: compile
      script: bash scripts/compile.sh

    - stage: test
      script: bash scripts/test.sh

    - stage: deploy-prod
      if: branch = master AND type = push
      name: "Deploy to NuGet"
      script: bash scripts/push.sh

보시다시피 compile, testpush 세 가지 단계가 있습니다. 마지막 단계는 branchmaster이고 pull request가 아닌 push일 때만 실행됩니다.

이것에 대해 이해하지 못한다면 문서로 가서 아주 쉽게 설명되어 있습니다.

이를 염두에 두고 모든 pull request는 NuGet 피드에 아무 것도 푸시하지 않습니다.

API 키를 환경 변수로 설정

리포지토리 빌드 설정으로 이동하여 NUGET_API_KEY라는 새 환경 변수를 추가합니다. 값은 NuGet 페이지에서 복사한 API 키입니다.

Gyazo의 이미지

pull request 생성

이제 모든 설정이 완료되었으므로 pull request를 만들고 해당 풀 요청에 대한 컴파일이 마지막 stage를 무시하는지 확인해야 합니다.

빌드 확인

끌어오기 요청을 하는 즉시 TravisCI 대시보드에 빌드가 대기열에 추가되며 보시다시피 거기에는 3개가 아닌 2개의 서로 다른 빌드가 있습니다.Gyazo의 이미지

이제 pull request를 수락하고 빌드를 다시 확인하여 이제 두 개가 아닌 세 개의 작업이 있는지 확인하겠습니다.

Gyazo의 이미지

그리고 대기열에 있는 빌드를 보자마자 마지막에 Deploy-prod를 포함한 세 가지 작업을 볼 수 있습니다.

Gyazo의 이미지

전체 빌드가 완료되자마자 로그에서 패키지가 소스에 푸시되었음을 확인할 수 있습니다.

Gyazo의 이미지

그리고 분명히 NuGet 페이지에서 볼 수 있습니다.

Gyazo의 이미지

Gyazo의 이미지

그게 다야

이 튜토리얼에서는 NuGet 패키지 전달을 자동화하는 방법을 알아냈습니다. 우리는 TravisCI, stagesdotnet nuget와 같은 도구를 사용했습니다.

제 생각에는 제대로 설정하는 데 시간이 걸리고 어떤 경우에는 너무 복잡할 수도 있습니다. 모든 것을 완벽하고 자동화된 상태로 유지하기 위해 이러한 종류의 기술에 시간을 투자합니다.

.travis.yml 파일과 함께 소스 코드를 여기에서 찾을 수 있습니다. 궁금한 점이 있으면 언제든지 내 twitter로 문의하세요!