.NET 恢复/构建在使用组织包在 Github Action 工作流程中调用时得到 401

问题描述 投票:0回答:1

我有一个 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,但都返回了相同的错误。

.net github nuget github-actions github-pages
1个回答
0
投票

检查工作流程中使用的

secrets.ACTION_TOKEN
是否具有正确的权限并且有效。它至少应具有
read:packages
范围

修改您的工作流程以正确使用 GitHub Packages 进行身份验证。这涉及设置 NuGet CLI 以使用 GitHub 令牌进行身份验证。

source-url
步骤中删除
actions/setup-dotnet@v3
参数。该步骤之前尝试配置 NuGet 源,但可能未正确设置身份验证。

不要依赖

actions/setup-dotnet
操作来配置 NuGet 源,而是尝试添加显式步骤来设置用于访问 GitHub 包注册表的 NuGet 凭据,方法是:

  • 初始化新 NuGet 配置的新步骤 (
    dotnet new nugetconfig
    )。这可确保重置任何可能与您的身份验证设置冲突的现有 NuGet 配置。
  • 另一个新步骤,将 GitHub 包注册表添加为 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
© www.soinside.com 2019 - 2024. All rights reserved.