注: GitHub Packages 目前正在测试用于 GitHub Enterprise Server 2.22。 要加入 您的 GitHub Enterprise Server 实例 的测试版,请使用注册表单。
注:安装或发布 Docker 映像时,GitHub Packages 当前不支持外部图层,如 Windows 映像。
向 GitHub Packages 验证
您需要访问令牌才能发布、安装和删除 GitHub Packages 中的包。
您可以使用个人访问令牌 (PAT) 向 GitHub Packages 或 GitHub API 验证。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。 有关 PAT 与包相关的域的更多信息,请参阅“关于 GitHub Packages 的权限”。
要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:
GITHUB_TOKEN
来发布与工作流程仓库相关联的包。- PAT 来安装与其他私有仓库(
GITHUB_TOKEN
无法访问)相关联的包。
在 GitHub Actions 中使用 GITHUB_TOKEN
进行身份验证
在 GitHub Actions 工作流程中通过以下命令使用 GITHUB_TOKEN
向 GitHub Packages 验证,而不是对仓库的 nuget.config 文件中的令牌进行硬编码。
dotnet nuget add source --username USERNAME --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.HOSTNAME/OWNER/index.json"
有关 GitHub Actions 工作流程中使用的 GITHUB_TOKEN
的更多信息,请参阅“工作流程中的身份验证”。
使用个人访问令牌进行身份验证
您必须使用具有适当范围的个人访问令牌才可在 GitHub Packages 中发布和安装。 更多信息请参阅“关于 GitHub Packages”。
要使用 dotnet
命令行接口 (CLI) 向 GitHub Packages 验证,请在项目目录中创建一个 nuget.config 文件,将 GitHub Packages 指定为 dotnet
CLI 客户端的 packageSources
下的源。
必须:
- 将
USERNAME
替换为您在 GitHub 上的用户帐户的名称。 - 将
TOKEN
替换为您的个人访问令牌。 - 将
OWNER
替换为拥有项目所在仓库的用户或组织帐户的名称。 - 将
HOSTNAME
替换为 您的 GitHub Enterprise Server 实例 的主机名。
如果您的实例启用了子域隔离:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="github" value="https://nuget.HOSTNAME/OWNER/index.json" />
</packageSources>
<packageSourceCredentials>
<github>
<add key="Username" value="USERNAME" />
<add key="ClearTextPassword" value="TOKEN" />
</github>
</packageSourceCredentials>
</configuration>
例如,OctodogApp 和 OctocatApp 项目将发布到同一个仓库:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PackageId>OctodogApp</PackageId>
<Version>1.0.0</Version>
<Authors>Octodog</Authors>
<Company>GitHub</Company>
<PackageDescription>This package adds an Octodog!</PackageDescription>
<RepositoryUrl>https://github.com/octo-org/octo-cats-and-dogs</RepositoryUrl>
</PropertyGroup>
</Project>
发布包
您可以通过使用 nuget.config 文件进行身份验证。
使用 nuget.config 文件发布包
发布时,您需要将 csproj 文件中的 OWNER
值用于您的 nuget.config 身份验证文件。 在 .csproj 文件中指定或增加版本号,然后使用 dotnet pack
命令创建该版本的 .nuspec 文件。 有关创建包的更多信息,请参阅 Microsoft 文档中的“创建和发布包”。
-
向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。
-
创建一个新项目。
dotnet new console --name OctocatApp
-
将项目的特定信息添加到以 .csproj 结尾的项目文件中。 必须:
- 将
OWNER
替换为拥有项目所在仓库的用户或组织帐户的名称。 - 将
REPOSITORY
替换为要发布的包所在仓库的名称。 1.0.0
替换为包的版本号。- 将
HOSTNAME
替换为 您的 GitHub Enterprise Server 实例 的主机名。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <PackageId>OctocatApp</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> </Project>
- 将
-
打包项目。
dotnet pack --configuration Release
-
使用您在 nuget.config 文件中指定的
key
发布包。dotnet nuget push "bin/Release/OctocatApp.1.0.0.nupkg" --source "github"
在发布包后,您可以在 GitHub 上查看该包。 更多信息请参阅“查看包”。
将多个包发布到同一个仓库
要将多个包发布到同一个仓库,您可以在所有 .csproj 项目文件的 RepositoryURL
字段中包含相同的 GitHub 仓库 URL。 GitHub 根据该字段匹配仓库。
例如,OctodogApp 和 OctocatApp 项目将发布到同一个仓库:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PackageId>OctodogApp</PackageId>
<Version>1.0.0</Version>
<Authors>Octodog</Authors>
<Company>GitHub</Company>
<PackageDescription>This package adds an Octodog!</PackageDescription>
<RepositoryUrl>https://HOSTNAME/octo-org/octo-cats-and-dogs</RepositoryUrl>
</PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PackageId>OctocatApp</PackageId>
<Version>1.0.0</Version>
<Authors>Octocat</Authors>
<Company>GitHub</Company>
<PackageDescription>This package adds an Octocat!</PackageDescription>
<RepositoryUrl>https://HOSTNAME/octo-org/octo-cats-and-dogs</RepositoryUrl>
</PropertyGroup>
</Project>
安装包
在项目中使用来自 GitHub 的包类似于使用来自 nuget.org 的包。 将包依赖项添加到 .csproj 文件以指定包名称和版本。 有关在项目中使用 .csproj 文件的更多信息,请参阅 Microsoft 文档中的“使用 NuGet 包”。
-
向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。
-
要使用包,请添加
ItemGroup
并配置 .csproj 项目文件中的PackageReference
字段,将OctokittenApp
包替换为您的包依赖项,将1.0.0
替换为您要使用的版本:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <PackageId>OctocatApp</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="OctokittenApp" Version="12.0.2" /> </ItemGroup> </Project>
-
使用
restore
命令安装包。dotnet restore
疑难解答
如果 .csproj 中的 RepositoryUrl
未设置为预期的仓库,则 NuGet 包可能无法推送。
延伸阅读
- "删除包"