다음을 통해 공유


자습서: GitHub Actions 워크플로에서 GitHub 패키지를 사용하여 vcpkg 이진 캐시 설정

참고 항목

이 자습서에서는 GitHub 패키지에서 호스트되는 NuGet 피드를 사용하지만, 최소한의 변경으로 다른 NuGet 피드 공급자(예: Azure Artifacts)에 동일한 지침을 사용할 수 있습니다.

GitHub 패키지는 vcpkg에서 생성된 NuGet 이진 패키지에 편리한 리포지토리를 제공합니다. 이 자습서에서는 GitHub 패키지를 원격 스토리지로 사용하는 GitHub Actions 워크플로에서 이진 캐시를 설정하는 방법을 보여 줍니다.

이 자습서에서는 다음 작업을 수행하는 방법을 알아봅니다.

필수 조건

  • 코드 편집기
  • GitHub Actions를 사용하는 GitHub 리포지토리
  • vcpkg를 사용하는 프로젝트

1 - GitHub 개인용 액세스 토큰 제공

GitHub의 지침에 따라 리포지토리에 대한 클래식 PAT(개인용 액세스 토큰)를 생성하고 해당 토큰과 packages:read 권한을 부여 packages:write 해야 합니다.

그런 다음, 리포지토리의 GitHub Action 워크플로에서 사용할 수 있는 비밀로 GitHub PAT를 추가합니다. 이 자습서에서는 비밀 이름을 .로 GH_PACKAGES_TOKEN가정합니다.

제공된 GITHUB_TOKEN 기본 제공 PAT에는 packages:read 사용 권한만 있으므로 워크플로에 읽기 전용 이진 캐시를 사용하려는 경우 사용할 수 있습니다.

2 - 부트스트랩 vcpkg

vcpkg는 이진 캐싱 작업 중에 사용하는 실행 파일의 nuget.exe 자체 복사본을 획득합니다. 이 자습서에서는 vcpkg 획득을 nuget.exe사용합니다.

워크플로에서 vcpkg를 부트스트랩하는 단계를 추가합니다.

- name: Bootstrap vcpkg
  shell: pwsh
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Bootstrap vcpkg
  shell: bash
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh

vcpkg 부트스트랩 스크립트의 위치를 워크플로의 올바른 위치로 바꿔야 할 수 있습니다. 이 자습서에서는 vcpkg가 리포지토리의 루트에 있는 폴더에 vcpkg 있다고 가정합니다.

3 - 필요한 환경 변수 설정

워크플로 파일에 다음 환경 변수를 추가합니다(GitHub의 사용자 이름 또는 조직의 이름으로 대체 <OWNER> ).

env: 
  USERNAME: <OWNER>
  VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
  FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
  VCPKG_BINARY_SOURCES: "clear;nuget,https://nuget.pkg.github.com/<OWNER>/index.json,readwrite"

값을 VCPKG_EXE 부트스트랩 vcpkg 단계에서 생성된 vcpkg 실행 파일의 위치로 바꿔야 할 수 있습니다.

이 단계에서는 GitHub 패키지 피드를 이진 캐싱 원본으로 사용하도록 구성 VCPKG_BINARY_SOURCES 하고 이진 캐싱 참조를 읽어 자세히 알아봅니다.

4 - GitHub 패키지를 NuGet 원본으로 추가

vcpkg fetch nuget 명령은 vcpkg에서 획득한 nuget.exe위치를 출력하여 필요한 경우 실행 파일을 다운로드합니다.

GitHub Actions 워크플로 파일에 다음 단계를 추가합니다.

- name: Add NuGet sources
  shell: pwsh
  run: |
    .$(${{ env.VCPKG_EXE }} fetch nuget) `
      sources add `
      -Source "${{ env.FEED_URL }}" `
      -StorePasswordInClearText `
      -Name GitHubPackages `
      -UserName "${{ env.USERNAME }}" `
      -Password "${{ secrets.GH_PACKAGES_TOKEN }}"
    .$(${{ env.VCPKG_EXE }} fetch nuget) `
      setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" `
      -Source "${{ env.FEED_URL }}"

Linux에서 실행nuget.exe해야 합니다mono. Ubuntu를 사용하는 GitHub Actions 실행기는 미리 설치된 상태로 mono 제공됩니다. 그렇지 않으면 배포판의 시스템 패키지 관리자를 사용하여 설치 mono 할 수 있습니다.

- name: Add NuGet sources
  shell: bash
  env: 
    VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
    USERNAME: <OWNER>
    FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
  run: |
    mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
      sources add \
      -Source "${{ env.FEED_URL }}" \
      -StorePasswordInClearText \
      -Name GitHubPackages \
      -UserName "${{ env.USERNAME }}" \
      -Password "${{ secrets.GH_PACKAGES_TOKEN }}"
    mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
      setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
      -Source "${{ env.FEED_URL }}"

GitHub 개인용 액세스 토큰 제공 단계에서 생성된 PAT에 지정한 올바른 비밀 이름으로 바꿔 GH_PACKAGES_TOKEN 야 할 수 있습니다.

정말 간단하죠! 이제 vcpkg는 GitHub Actions 워크플로 내의 GitHub 패키지에 호스트된 NuGet 피드에서 패키지를 업로드하거나 복원합니다.

다음 단계

다음에 시도할 다른 작업은 다음과 같습니다.