자습서: 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 피드에서 패키지를 업로드하거나 복원합니다.
다음 단계
다음에 시도할 다른 작업은 다음과 같습니다.
vcpkg