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

为何Gradle Publish任务无法获取GitHub Action传递的密钥令牌

解决GitHub Action发布Spring Boot至GitHub Packages的401 Unauthorized问题

问题描述

已实现GitHub Workflow Actions将Spring Boot应用发布至GitHub Packages,但遵循官方Gradle文档操作后出现401 Unauthorized错误。核心问题是GitHub Action无法将环境变量传递给Gradle任务,导致无法通过System.getenv("GIT_CICD_TOKEN")获取令牌。

当前Workflow配置

- name: Publish package
  uses: gradle/gradle-build-action@v2
  with:
      gradle-version: 8.5
      arguments: Publish
    env:
        GIT_CICD_TOKEN: ${{ secrets.GIT_CICD_TOKEN }}

当前Gradle配置

plugins {
    id 'maven-publish'
    id 'java'
    id 'org.springframework.boot' version '3.2.1'
    id 'io.spring.dependency-management' version '1.1.4'
}

publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = "https://maven.pkg.github.com/organization_name/repo_name"
            credentials {
                username = 'myUserName'
                password = System.getenv("GIT_CICD_TOKEN")
            }
        }
    }

    publications {
        maven(MavenPublication) {
            artifact bootJar
            groupId = 'com.xx'
            artifactId = 'appName'
            version = '0.0.1-XXXX-SNAPSHOT'
        }
    }
}

注:直接在password字段填入令牌字符串可正常发布,说明令牌本身有效。

解决建议

  • 修正Workflow的env缩进问题
    你的Workflow配置中env字段缩进错误,它必须与with同级,而非嵌套在with下方。错误的缩进会导致环境变量无法被正确注入Gradle进程。修正后的配置:

    - name: Publish package
      uses: gradle/gradle-build-action@v2
      with:
          gradle-version: 8.5
          arguments: Publish
      env:
          GIT_CICD_TOKEN: ${{ secrets.GIT_CICD_TOKEN }}
    
  • 改用Gradle项目属性传递令牌(更可靠)
    放弃环境变量传递,直接通过Gradle的-P参数传入令牌作为项目属性,避免环境变量传递的潜在问题:

    1. 调整Workflow配置:
      - name: Publish package
        uses: gradle/gradle-build-action@v2
        with:
            gradle-version: 8.5
            arguments: -PgithubToken=${{ secrets.GIT_CICD_TOKEN }} Publish
      
    2. 修改Gradle配置中的credentials部分:
      credentials {
          username = 'myUserName'
          password = project.findProperty("githubToken") ?: System.getenv("GIT_CICD_TOKEN")
      }
      
  • 使用GitHub默认的GITHUB_TOKEN
    无需自定义令牌,GitHub Action提供的GITHUB_TOKEN默认拥有当前仓库的write:packages权限,无需额外配置权限:

    1. 调整Workflow配置:
      - name: Publish package
        uses: gradle/gradle-build-action@v2
        with:
            gradle-version: 8.5
            arguments: -PgithubToken=${{ secrets.GITHUB_TOKEN }} Publish
      
    2. Gradle配置保持上面的修改即可。
  • 验证令牌权限
    若仍使用自定义令牌,确保GIT_CICD_TOKEN已开启write:packages权限,且对于组织仓库,令牌拥有目标仓库的访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:04:59