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

Github Actions中使用Gradle Jib插件推送镜像至GHCR失败求助

Github Actions + Gradle Jib 推送镜像到GHCR 示例及认证问题解决

完整工作流示例(.github/workflows/jib-ghcr.yml)

name: Build and Push to GHCR

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    # 必须配置推送GHCR的权限
    permissions:
      contents: read
      packages: write

    steps:
      - uses: actions/checkout@v4

      - name: 配置JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: 用Jib构建并推送镜像
        env:
          REGISTRY: ghcr.io
          # 自动使用当前仓库路径作为镜像名
          IMAGE_NAME: ${{ github.repository }}
          # Actions自动生成的令牌,无需手动创建
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: ./gradlew jib

Gradle配置示例

Kotlin DSL(build.gradle.kts)

plugins {
    java
    id("com.google.cloud.tools.jib") version "3.4.0"
}

jib {
    from {
        image = "eclipse-temurin:17-jre"
    }
    to {
        // 读取环境变量拼接镜像地址
        image = "${System.getenv("REGISTRY")}/${System.getenv("IMAGE_NAME")}"
        tags = setOf("latest", project.version.toString())
    }
    container {
        ports = listOf("8080/tcp")
        mainClass = "com.example.Main" // 替换为你的主类
    }
    auth {
        // 使用Actions提供的用户名和令牌认证
        username = System.getenv("GITHUB_ACTOR")
        password = System.getenv("GITHUB_TOKEN")
    }
}

Groovy DSL(build.gradle)

plugins {
    id 'java'
    id 'com.google.cloud.tools.jib' version '3.4.0'
}

jib {
    from {
        image = 'eclipse-temurin:17-jre'
    }
    to {
        image = "${System.getenv('REGISTRY')}/${System.getenv('IMAGE_NAME')}"
        tags = ['latest', "${project.version}"]
    }
    container {
        ports = ['8080/tcp']
        mainClass = 'com.example.Main' // 替换为你的主类
    }
    auth {
        username = System.getenv('GITHUB_ACTOR')
        password = System.getenv('GITHUB_TOKEN')
    }
}

关键注意事项(解决认证失败问题)

  • 权限设置:工作流中必须声明packages: write权限,否则GITHUB_TOKEN没有推送镜像到GHCR的权限,这是本地成功但CI失败的常见原因。
  • 认证信息:直接使用Actions自动生成的GITHUB_TOKEN和GITHUB_ACTOR,无需手动创建个人访问令牌(PAT),避免权限范围错误或令牌泄露。
  • 镜像路径:确保镜像名格式为ghcr.io/用户名/仓库名,通过${github.repository}可以自动获取正确路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:55:15