참고 항목
이 자습서에서는 GitHub 패키지에서 호스트되는 NuGet 피드를 사용하지만, 최소한의 변경으로 다른 NuGet 피드 공급자(예: Azure Artifacts)에 동일한 지침을 사용할 수 있습니다.
GitHub 패키지는 vcpkg에서 생성된 NuGet 이진 패키지에 편리한 리포지토리를 제공합니다. 이 자습서에서는 GitHub 패키지를 원격 스토리지로 사용하는 GitHub Actions 워크플로에서 이진 캐시를 설정하는 방법을 보여 줍니다.
이 자습서에서는 다음 작업을 수행하는 방법을 알아봅니다.
필수 조건
- 코드 편집기
- GitHub Actions를 사용하는 GitHub 리포지토리
- vcpkg를 사용하는 프로젝트
1 - GitHub 패키지에 대한 인증 구성
이 자습서에서는 GitHub Actions에서 GITHUB_TOKEN 제공하는 기본 제공을 사용합니다. GitHub 패키지에 대한 읽기 및 쓰기 액세스를 모두 사용하도록 설정하려면 워크플로에 다음 permissions 블록을 추가합니다.
permissions:
packages: write
이렇게 하면 필요한 GITHUB_TOKEN 권한과 packages:write 사용 권한이 부여 packages:read 됩니다.
사용 GITHUB_TOKEN 은 다음과 같은 몇 가지 장점이 있습니다.
- 추가 비밀을 만들거나 관리할 필요가 없습니다.
- 포크에서 끌어오기 요청에 대해 자동으로 작동합니다(읽기 전용 액세스 사용).
- 특정 리포지토리 및 워크플로 실행 범위 지정
참고 항목
또는 리포지토리 간 액세스 또는 기타 고급 시나리오가 필요한 경우 클래식 PAT(Personal Access Token)를 사용할 수 있습니다. GitHub의 지침에 따라 PAT(클래식 PAT)와 packages:writepackages:read 사용 권한을 생성한 다음, 리포지토리에 비밀로 추가하고 아래 예제 대신 ${{ secrets.YOUR_PAT_NAME }} 사용합니다${{ secrets.GITHUB_TOKEN }}.
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위치를 출력하여 필요한 경우 실행 파일을 다운로드합니다.
워크플로 파일에 다음 단계를 추가하여 다음을 사용하여 NuGet 원본을 구성합니다 GITHUB_TOKEN.
permissions:
packages: write
jobs:
build:
runs-on: windows-latest
steps:
# ... other steps ...
- 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.GITHUB_TOKEN }}"
.$(${{ env.VCPKG_EXE }} fetch nuget) `
setapikey "${{ secrets.GITHUB_TOKEN }}" `
-Source "${{ env.FEED_URL }}"
Linux에서 실행mono해야 합니다nuget.exe. 배포판의 시스템 패키지 관리자를 사용하여 설치 mono 할 수 있습니다.
apt install mono-complete
ubuntu-22.04 GitHub Actions 실행기는 mono 미리 설치되어 있지만(ubuntu-24.04현재 가리키는) ubuntu-latest 시작 mono 은 더 이상 사전 설치되지 않습니다.
permissions:
packages: write
jobs:
build:
runs-on: ubuntu-latest
steps:
# ... other steps ...
- 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.GITHUB_TOKEN }}"
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
setapikey "${{ secrets.GITHUB_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
참고 항목
GitHub Actions에서 제공하는 기본값 GITHUB_TOKEN 에는 캐시된 패키지를 업로드하거나 다운로드하는 데 필요한 권한이 없습니다 .
GitHub 패키지에 패키지 캐싱을 사용하도록 설정하려면 PAT (개인용 액세스 토큰) 를 대신 사용하고 다음 범위가 포함되어 있는지 확인합니다.
packages:readpackages:write
PAT를 리포지토리 비밀(예 VCPKG_PAT_TOKEN: )으로 저장하고 워크플로에서 참조합니다.
-Password: "${{ secrets.VCPKG_PAT_TOKEN }}"
-Source: "${{ env.FEED_URL }}"
정말 간단하죠! 이제 vcpkg는 GitHub Actions 워크플로 내의 GitHub 패키지에 호스트된 NuGet 피드에서 패키지를 업로드하거나 복원합니다.
다음 단계
다음에 시도할 다른 작업은 다음과 같습니다.
vcpkg