You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GitHub Actions双YAML文件CI/CD推送包至GitHub Packages遇阻

问题背景

在CI流程(ci.yml)中完成NuGet包打包并上传工件后,尝试在CD流程(cd.yml)中下载工件并推送至GitHub Packages时,遇到认证错误:

warn : Your request could not be authenticated by the GitHub Packages service. Please ensure your access token is valid and has the appropriate scopes configured.

已尝试使用默认GITHUB_TOKEN及具备包读写删权限的PAT,均未解决。

CI配置(ci.yml)

- name: Create Client Package
  run: dotnet pack ${{ env.CLIENT_NAME }} --no-build --configuration ${{ env.BUILD_CONFIGURATION }} --output ${{ env.PUBLISH_PATH }}

- name: Create Model Package
  run: dotnet pack ${{ env.MODEL_NAME }} --no-build --configuration ${{ env.BUILD_CONFIGURATION }} --output ${{ env.PUBLISH_PATH }}

- name: Create NBS Package
  run: dotnet pack ${{ env.NBS_NAME }} --no-build --configuration ${{ env.BUILD_CONFIGURATION }} --output ${{ env.PUBLISH_PATH }}

- name: Upload NuGet Packages
  uses: actions/upload-artifact@v3
  if: ${{ matrix.language == 'csharp' && (github.event.pull_request.merged || github.event_name == 'workflow_dispatch') }}
  with:
    name: ${{ github.event.repository.name }}-nuget
    path: ${{ env.NUGET_PATH }}/*.nupkg

CD配置(cd.yml)

- name: Download NuGet Packages from GitHub
  uses: dawidd6/action-download-artifact@v2.13.0
  with:
    workflow: ci.yml
    workflow_conclusion: success
    name: ${{ github.event.repository.name }}-nuget
    path: ${{ env.NUGET_PATH }}/output
    search_artifacts: true

- name: Push NuGet Packages to GitHub Packages
  run: dotnet nuget push ${{ env.PUBLISH_PATH }}/*.nupkg --source github --skip-duplicate --api-key ${{ secrets.ACTIONS_PAT }}
排查与解决建议
  • 修正路径匹配问题
    CD流程中包被下载到${{ env.NUGET_PATH }}/output,但推送命令引用的是${{ env.PUBLISH_PATH }}/*.nupkg,路径不匹配会导致找不到包或推送无效文件。将推送命令的路径改为:

    dotnet nuget push ${{ env.NUGET_PATH }}/output/*.nupkg --source https://nuget.pkg.github.com/OWNER/index.json --skip-duplicate --api-key ${{ secrets.ACTIONS_PAT }}
    

    替换OWNER为你的GitHub用户名或组织名。

  • 确认PAT的权限范围
    确保创建PAT时勾选了以下权限:

    • write:packages:允许推送包
    • read:packages:允许拉取包
    • delete:packages(可选):允许删除包
      同时确认PAT未过期,且是针对当前仓库或所在组织创建的。
  • 显式配置GITHUB_TOKEN权限
    如果使用默认GITHUB_TOKEN,需在cd.yml开头添加权限声明,授予包写入权限:

    permissions:
      packages: write
      contents: read
    

    默认GITHUB_TOKEN权限受限,必须显式声明才能操作GitHub Packages。

  • 检查NuGet包ID格式
    GitHub Packages要求NuGet包ID必须以你的GitHub用户名或组织名为前缀(例如MyOrg.MyPackage),如果包ID不符合该格式,会导致推送失败。

  • 添加调试步骤验证环境
    在推送步骤前添加调试命令,确认包存在且密钥有效:

    - name: Debug Environment
      run: |
        echo "Download path: ${{ env.NUGET_PATH }}/output"
        ls -la ${{ env.NUGET_PATH }}/output
        echo "API key is set: ${{ secrets.ACTIONS_PAT != '' }}"
    

内容的提问来源于stack exchange,提问作者Demet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:13:13