使用GitHub应用安装令牌在GitHub Packages发布NuGet包遇阻
使用GitHub App安装令牌通过dotnet publish发布NuGet包到跨组织GitHub Packages
这个场景是支持的,但不能直接将GitHub App安装令牌作为--api-key参数传给dotnet publish,问题出在NuGet客户端与GitHub Packages的认证逻辑差异上。
问题根源
GitHub Packages的NuGet源依赖**基本认证(用户名+密码)**完成推送,而dotnet publish的--api-key参数是针对NuGet.org这类使用API密钥认证的源设计的。虽然你的安装令牌可以直接通过Bearer认证调用Packages API,但NuGet客户端的推送流程不支持这种方式,必须走基本认证流程。
正确实现步骤
方式1:提前配置NuGet源
在工作流中先添加目标组织的NuGet源并配置凭据,再执行发布:
# 添加目标组织的NuGet源,用户名固定为x-access-token,密码为GitHub App安装令牌 dotnet nuget add source --name github-cross-org https://nuget.pkg.github.com/目标组织名/index.json --username x-access-token --password ${{ secrets.GITHUB_APP_INSTALL_TOKEN }} --store-password-in-clear-text # 执行发布,指定已配置的源名称 dotnet publish -c Release -p:PublishNuGet=true -p:NuGetSource=github-cross-org
方式2:发布时直接指定凭据参数
无需提前配置源,直接在dotnet publish命令中传入认证信息:
dotnet publish -c Release -p:PublishNuGet=true \ -p:NuGetSource=https://nuget.pkg.github.com/目标组织名/index.json \ -p:NuGetUsername=x-access-token \ -p:NuGetPassword=${{ secrets.GITHUB_APP_INSTALL_TOKEN }}
注意事项
- 确保GitHub App安装令牌已被授予目标组织的
packages:write权限,且令牌在工作流执行时处于有效期内(默认有效期1小时,可在生成时调整)。 --store-password-in-clear-text参数是必要的,因为GitHub Actions环境中无法使用加密存储的凭据。
内容的提问来源于stack exchange,提问作者Pablo Cibraro
相关产品推荐
相关产品推荐

