我有一个 GitHub 组织,推送了一些包。它们可以通过 https://github.com/orgs/[REDACTED]/packages 访问,因此它们不仅仅是存储库。在我的一个存储库中,我尝试使用其他存储库(微服务)的合同创建包,但该存储库使用我之前提到的包之一。
这是我当前用于构建此合同包的 YAML:
name: Publish [REDACTED].Domain.Shared package
on:
push:
branches:
- release/shared/*
paths:
- "src/[REDACTED]/[REDACTED].Domain.Shared/**"
jobs:
Publish-Package:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- uses: actions/checkout@v3
- uses: actions/setup-dotnet@v3
with:
dotnet-version: "8.x"
source-url: https://nuget.pkg.github.com/[REDACTED]/index.json
env:
NUGET_AUTH_TOKEN: ${{secrets.ACTION_TOKEN}}
- run: dotnet restore src/[REDACTED]/[REDACTED].Domain.Shared
- run: dotnet build src/[REDACTED]/[REDACTED].Domain.Shared --no-restore
- run: dotnet pack --configuration Release src/[REDACTED]/[REDACTED].Domain.Shared
- run: dotnet nuget push src/[REDACTED]/[REDACTED].Domain.Shared/bin/Release/*.nupkg
当谈到
dotnet restore
时,我得到:
/usr/share/dotnet/sdk/8.0.100/NuGet.targets(156,5):警告:GitHub Packages 服务无法对您的请求进行身份验证。请确保您的访问令牌有效并且配置了适当的范围。 [/home/runner/work/[已编辑].Domain.Shared/[已编辑].Domain.Shared.csproj] 正在重试源“https://nuget.pkg.github.com/[REDACTED]/download/[REDACTED]/index.json”的“FindPackagesByIdAsync”。 响应状态码并不表示成功:401(未经授权)。
我的 GitHub 令牌已设置
repo:all
、read:packages
和 write:packages
权限。
我不知道这是否重要,但这是包含此合约库的 sln 中的 NuGet.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="[REDACTED]" value="https://nuget.pkg.github.com/[REDACTED]/index.json" />
</packageSources>
<packageSourceMapping>
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
<packageSource key="[REDACTED]">
<package pattern="[REDACTED].*" />
</packageSource>
</packageSourceMapping>
</configuration>
Token 和 NuGet.Config 对于所有存储库都是相同的,并且它们都可以生成包 - 直到从我的组织下载另一个包的依赖项。
我尝试将令牌的权限更改为所有可能的权限,但没有成功。我还尝试从工作流程中的
actions/setup-dotnet@v3
中删除 dotnet auth,但都返回了相同的错误。
检查工作流程中使用的
secrets.ACTION_TOKEN
是否具有正确的权限并且有效。它至少应具有 read:packages
范围。
修改您的工作流程以正确使用 GitHub Packages 进行身份验证。这涉及设置 NuGet CLI 以使用 GitHub 令牌进行身份验证。
从
source-url
步骤中删除 actions/setup-dotnet@v3
参数。该步骤之前尝试配置 NuGet 源,但可能未正确设置身份验证。
不要依赖
actions/setup-dotnet
操作来配置 NuGet 源,而是尝试添加显式步骤来设置用于访问 GitHub 包注册表的 NuGet 凭据,方法是:
dotnet new nugetconfig
)。这可确保重置任何可能与您的身份验证设置冲突的现有 NuGet 配置。dotnet nuget add source
命令添加 GitHub 包注册表 URL,以及 GitHub 用户名和存储在 secrets.ACTION_TOKEN
中的个人访问令牌 (PAT)。该命令将 NuGet 配置为在从 GitHub 包注册表访问包时使用这些凭据。name: Publish [REDACTED].Domain.Shared package
on:
push:
branches:
- release/shared/*
paths:
- "src/[REDACTED]/[REDACTED].Domain.Shared/**"
jobs:
Publish-Package:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- uses: actions/checkout@v3
- uses: actions/setup-dotnet@v3
with:
dotnet-version: "8.x"
- name: Set up NuGet Credential Provider
run: dotnet new nugetconfig
- name: Add GitHub Package Registry to NuGet
run: dotnet nuget add source https://nuget.pkg.github.com/[REDACTED]/index.json --name GPR --username [REDACTED] --password ${{secrets.ACTION_TOKEN}} --store-password-in-clear-text
- run: dotnet restore src/[REDACTED]/[REDACTED].Domain.Shared
- run: dotnet build src/[REDACTED]/[REDACTED].Domain.Shared --no-restore
- run: dotnet pack --configuration Release src/[REDACTED]/[REDACTED].Domain.Shared
- run: dotnet nuget push src/[REDACTED]/[REDACTED].Domain.Shared/bin/Release/*.nupkg