참고
사이트 관리자가 지원되는 각 패키지 유형을 사용하거나 사용하지 않도록 설정할 수 있으므로 이 패키지 유형을 인스턴스에 사용할 수 없습니다. 자세한 내용은 엔터프라이즈에 대한 패키지 에코시스템 지원 구성을(를) 참조하세요.
인증 진행 중 GitHub Packages
참고
GitHub Packages은(는) personal access token (classic)을(를) 사용하는 인증만 지원합니다. 자세한 내용은 개인용 액세스 토큰 관리을(를) 참조하세요.
프라이빗, 내부, 퍼블릭 패키지를 게시, 설치, 삭제하려면 액세스 토큰이 필요합니다.
personal access token (classic)을 사용하여 GitHub Packages 또는 GitHub API에 인증할 수 있습니다. personal access token (classic)을(를) 만들 때 필요에 따라 토큰의 범위를 다르게 할당할 수 있습니다. personal access token (classic)의 패키지 관련 범위에 대한 자세한 내용은 GitHub 패키지에 대한 사용 권한 정보를 참조하세요.
GitHub Packages 워크플로 내에서 GitHub Actions 레지스트리에 인증하려면 다음을 사용할 수 있습니다.
- 워크플로 리포지토리와 연결된 패키지를 게시하려면
GITHUB_TOKEN을 사용합니다. - 다른 프라이빗 리포지토리와 연결된 패키지를 설치하기 위한 최소한
read:packages범위가 있는 personal access token (classic)(리포지토리에 패키지에 대한 읽기 액세스 권한이 부여된 경우GITHUB_TOKEN을 사용할 수 있습니다. 패키지의 액세스 제어 및 표시 여부 구성을(를) 참조하세요).
GitHub Actions 워크플로에서 인증하기
다음 명령을 사용하여 리포지토리의 nuget.config 파일에 GitHub Packages를 하드코딩하는 것 대신 GitHub Actions 워크플로에서 GITHUB_TOKEN를 사용해 personal access token에 인증합니다.
dotnet nuget add source --username USERNAME --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.HOSTNAME/NAMESPACE/index.json"
NAMESPACE을(를) 패키지 범위가 지정된 개인 계정 또는 조직 를 소유해야 합니다.
USERNAME을(를) 인증된 소스에 연결할 때 사용할 사용자 이름으로 바꿉니다.
GitHub Actions 워크플로에서 사용되는 GITHUB_TOKEN에 대한 자세한 내용은 워크플로에서 인증에 GITHUB_TOKEN 사용을(를) 참조하세요.
personal access token를 사용하여 인증하기
참고
GitHub Packages은(는) personal access token (classic)을(를) 사용하는 인증만 지원합니다. 자세한 내용은 개인용 액세스 토큰 관리을(를) 참조하세요.
프라이빗, 내부, 퍼블릭 패키지를 게시, 설치, 삭제하려면 액세스 토큰이 필요합니다.
personal access token (classic)을 사용하여 GitHub Packages 또는 GitHub API에 인증할 수 있습니다. personal access token (classic)을(를) 만들 때 필요에 따라 토큰의 범위를 다르게 할당할 수 있습니다. personal access token (classic)의 패키지 관련 범위에 대한 자세한 내용은 GitHub 패키지에 대한 사용 권한 정보를 참조하세요.
GitHub Packages 워크플로 내에서 GitHub Actions 레지스트리에 인증하려면 다음을 사용할 수 있습니다.
- 워크플로 리포지토리와 연결된 패키지를 게시하려면
GITHUB_TOKEN을 사용합니다. - 다른 프라이빗 리포지토리와 연결된 패키지를 설치하기 위한 최소한
read:packages범위가 있는 personal access token (classic)(리포지토리에 패키지에 대한 읽기 액세스 권한이 부여된 경우GITHUB_TOKEN을 사용할 수 있습니다. 패키지의 액세스 제어 및 표시 여부 구성을(를) 참조하세요).
적절한 범위의personal access token (classic)으로 GitHub Packages에서 패키지를 게시하고 설치해야 합니다. 자세한 내용은 GitHub 패키지 소개을(를) 참조하세요.
dotnet 명령줄 인터페이스(CLI)를 사용하여 GitHub Packages에 인증하려면, 프로젝트 디렉터리에 dotnet CLI 클라이언트의 packageSources 아래에 GitHub Packages를 소스로 지정하는 nuget.config 파일을 생성합니다.
다음과 같이 반드시 교체하십시오.
USERNAME에 개인 계정의 이름을 입력합니다 GitHub.TOKEN을 입력합니다 personal access token (classic).NAMESPACE패키지가 속한 범위의 개인 계정 또는 조직해당 계정 또는 조직의 이름입니다.HOSTNAME에 대한 호스트 이름을 사용합니다 GitHub Enterprise Server 인스턴스.
인스턴스에 하위 도메인 격리가 사용하도록 설정된 경우:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="github" value="https://nuget.HOSTNAME/NAMESPACE/index.json" />
</packageSources>
<packageSourceCredentials>
<github>
<add key="Username" value="USERNAME" />
<add key="ClearTextPassword" value="TOKEN" />
</github>
</packageSourceCredentials>
</configuration>
인스턴스에 하위 도메인 격리가 사용되지 않는 경우:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="github" value="https://HOSTNAME/_registry/nuget/NAMESPACE/index.json" />
</packageSources>
<packageSourceCredentials>
<github>
<add key="Username" value="USERNAME" />
<add key="ClearTextPassword" value="TOKEN" />
</github>
</packageSourceCredentials>
</configuration>
패키지 게시
GitHub Packages에 패키지를 게시하려면 nuget.config 파일로 인증하거나, GitHubpersonal access token (classic)와 함께 --api-key 명령줄 옵션을 사용하거나, dotnet 명령줄 인터페이스(CLI)를 사용해 명령줄에서 직접 실행할 수 있는 명령을 사용할 수 있습니다.
OWNER를 사용자 이름 또는 회사 이름으로 바꾸고, YOUR_GITHUB_PAT를 personal access token(으)로 바꾸세요.
dotnet nuget add source --username OWNER --password YOUR_GITHUB_PAT --store-password-in-clear-text --name github "https://nuget.HOSTNAME/OWNER/index.json"
GitHub personal access token 사용하여 패키지를 API 키로 게시
personal access token에서 계정에 사용할 GitHub가 아직 없는 경우 개인용 액세스 토큰 관리을 참조하세요.
-
새 project 만듭니다.
PROJECT_NAME을 프로젝트에 지정하고자 하는 이름으로 바꾸십시오.dotnet new console --name PROJECT_NAME -
프로젝트를 패키징합니다.
dotnet pack --configuration Release -
personal access token를 API 키로 사용하여 패키지를 게시하세요.
PROJECT_NAME를 프로젝트 이름으로,1.0.0를 패키지 버전 번호로,YOUR_GITHUB_PAT를 사용자의 personal access token(으)로 바꾸세요.dotnet nuget push "bin/Release/PROJECT_NAME.1.0.0.nupkg" --api-key YOUR_GITHUB_PAT --source "github"
패키지를 게시한 후 GitHub에서 패키지를 볼 수 있습니다. 자세한 내용은 패키지 보기을(를) 참조하세요.
nuget.config 파일을 사용하여 패키지 게시
게시OWNER 토리에 연결하는 경우 .csproj 파일에 지정된 리포지토리가 NAMESPACE 인증 파일에서 사용하는 리포지토리와 일치 __ 해야 합니다.
.csproj 파일에 버전 번호를 지정하거나 증분한 다음 dotnet pack 명령을 사용하여 해당 버전에 맞는 .nuspec 파일을 만듭니다. 패키지를 만드는 방법에 대한 자세한 내용은 Microsoft 설명서의 패키지 만들기 및 게시를 참조하세요.
-
GitHub Packages에 인증합니다. 자세한 내용은 GitHub Packages에 인증을 참조하세요.
-
새 project 만듭니다.
PROJECT_NAME을 프로젝트에 지정하고자 하는 이름으로 바꾸십시오.dotnet new console --name PROJECT_NAME -
프로젝트의 특정 정보를 프로젝트 파일에 추가하는데, 파일은 _.csproj_로 끝납니다. 반드시 다음과 같이 교체하십시오.
1.0.0을 패키지의 버전 번호로 바꿉니다.OWNER패키지를 연결하려는 게시합니다.REPOSITORY패키지를 연결하려는 리포지토리의 이름을 사용합니다.HOSTNAME에 대한 호스트 이름을 사용합니다 GitHub Enterprise Server 인스턴스.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <PackageId>PROJECT_NAME</PackageId> <Version>1.0.0</Version> <Authors>AUTHORS</Authors> <Company>COMPANY_NAME</Company> <PackageDescription>PACKAGE_DESCRIPTION</PackageDescription> <RepositoryUrl>https://HOSTNAME/OWNER/REPOSITORY</RepositoryUrl> </PropertyGroup> </Project> -
프로젝트를 패키징합니다.
dotnet pack --configuration Release -
key를 사용해 nuget.config 파일에 지정한 패키지를 게시합니다.PROJECT_NAMEproject 이름으로 바꾸고1.0.0패키지의 버전 번호로 바꿉다.dotnet nuget push "bin/Release/PROJECT_NAME.1.0.0.nupkg" --source "github"
패키지를 게시한 후 GitHub에서 패키지를 볼 수 있습니다. 자세한 내용은 패키지 보기을(를) 참조하세요.
동일한 리포지토리에 여러 패키지 게시
여러 패키지를 동일한 리포지토리에 연결하려면 모든 GitHub 프로젝트 파일의 RepositoryURL 필드에 동일한 __ 리포지토리 URL을 사용합니다.
GitHub 는 해당 필드를 기반으로 리포지토리와 일치합니다.
다음 예시에서는 MY_APP 및 MY_OTHER_APP 프로젝트를 동일한 리포지토리에 게시합니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PackageId>MY_APP</PackageId>
<Version>1.0.0</Version>
<Authors>Octocat</Authors>
<Company>GitHub</Company>
<PackageDescription>This package adds a singing Octocat!</PackageDescription>
<RepositoryUrl>https://HOSTNAME/my-org/my-repo</RepositoryUrl>
</PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PackageId>MY_OTHER_APP</PackageId>
<Version>1.0.0</Version>
<Authors>Octocat</Authors>
<Company>GitHub</Company>
<PackageDescription>This package adds a dancing Octocat!</PackageDescription>
<RepositoryUrl>https://HOSTNAME/my-org/my-repo</RepositoryUrl>
</PropertyGroup>
</Project>
패키지 설치
프로젝트에서 패키지를 GitHub 사용하는 것은 nuget.org 패키지를 사용하는 것과 비슷합니다. 패키지 이름 및 버전을 지정하여 .csproj 파일에 패키지 종속성을 추가합니다. project .csproj 파일을 사용하는 방법에 대한 자세한 내용은 Microsoft 설명서의 NuGet 패키지 작업을 참조하세요.
-
GitHub Packages에 인증합니다. 자세한 내용은 GitHub Packages에 인증을 참조하세요.
-
패키지를 사용하려면
ItemGroup을 추가하고,PackageReference프로젝트 파일에서 __ 필드를 구성합니다.PACKAGE_NAME의Include="PACKAGE_NAME"값을 패키지 종속성으로 바꾸고X.X.X의Version="X.X.X"값을 사용하려는 패키지의 버전으로 바꿉니다.<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <PackageId>My-app</PackageId> <Version>1.0.0</Version> <Authors>Octocat</Authors> <Company>GitHub</Company> <PackageDescription>This package adds an Octocat!</PackageDescription> <RepositoryUrl>https://HOSTNAME/OWNER/REPOSITORY</RepositoryUrl> </PropertyGroup> <ItemGroup> <PackageReference Include="PACKAGE_NAME" Version="X.X.X" /> </ItemGroup> </Project> -
restore명령으로 패키지를 설치합니다.dotnet restore
문제 해결
RepositoryUrl가 예상 리포지토리로 설정되지 않은 경우 __ NuGet 패키지가 푸시되지 않을 수 있습니다.
nuspec 파일을 사용하는 경우 필수 repository 및 type 특성이 있는 url 요소가 있는지 확인합니다.
GitHub Packages 워크플로 내에서 GITHUB_TOKEN를 사용해 GitHub Actions 레지스트리에 인증하는 경우, 해당 토큰은 워크플로가 실행 중인 리포지토리가 아닌 다른 리포지토리의 비공개 리포지토리 기반 패키지에 액세스할 수 없습니다. 다른 리포지토리와 연결된 패키지에 액세스하려면 대신 범위를 사용하여 personal access token (classic)read:packages 생성하고 이 토큰을 비밀로 전달합니다.
공용 패키지를 복원할 때 일시적인 403 오류
GitHub Packages를 _nuget.org_와 함께 사용하면서 일반적인 공개 패키지(예: Microsoft.Extensions.*)를 복원할 때 간헐적으로 403 Forbidden 오류가 발생하는 경우, 이는 NuGet이 각 패키지에 대해 구성된 모든 패키지 원본을 쿼리하기 때문에 발생할 수 있습니다. 인증이 일시적으로 실패하면 GitHub Packages 존재하지 않는 GitHub Packages패키지에 대해서도 전체 복원을 차단할 수 있습니다.
이를 방지하려면 NuGet 패키지 원본 매핑 을 사용하여 패키지를 특정 원본으로 라우팅합니다.
교체:
NAMESPACEGitHub Packages NuGet 피드를 소유한 개인 계정 또는 조직의 이름으로PACKAGE-ID-PREFIXGitHub Packages에 호스팅된 패키지에 사용하는 NuGet 패키지 ID 접두사와 함께 여러 접두사를 사용하는 경우 각 접두사에 대한 추가<package>항목을 추가합니다.HOSTNAME에 대한 호스트 이름을 사용합니다 GitHub Enterprise Server 인스턴스.
인스턴스에 하위 도메인 격리가 사용하도록 설정된 경우:
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="github" value="https://nuget.HOSTNAME/NAMESPACE/index.json" />
</packageSources>
<packageSourceMapping>
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
<packageSource key="github">
<package pattern="PACKAGE-ID-PREFIX.*" />
</packageSource>
</packageSourceMapping>
</configuration>
인스턴스에 하위 도메인 격리가 사용되지 않는 경우:
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="github" value="https://HOSTNAME/_registry/nuget/NAMESPACE/index.json" />
</packageSources>
<packageSourceMapping>
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
<packageSource key="github">
<package pattern="PACKAGE-ID-PREFIX.*" />
</packageSource>
</packageSourceMapping>
</configuration>
NuGet은 가장 구체적으로 일치하는 패턴을 사용하므로 PACKAGE-ID-PREFIX.*에 일치하는 패키지는 GitHub Packages에서만 가져오고, 그 밖의 모든 패키지는 _nuget.org_에서 가져옵니다. 또한 프라이빗 패키지가 사용자의 GitHub Packages 피드에서만 오도록 보장하여 종속성 혼동 공격을 방지하는 데도 도움이 됩니다.