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

Github Actions上Gradle构建Jetpack Compose MacOS应用卡顿超时

Github Actions构建Jetpack Compose macOS应用时createReleaseDistributable任务卡住问题

问题概述

使用Github Actions构建Jetpack Compose macOS应用时,多数场景下执行./gradlew createReleaseDistributable一段时间后,构建会卡住并无限重复输出Gradle调试日志,最终导致构建超时。仅少数构建能成功完成,耗时约6分钟。

重复输出的日志内容:

2022-11-25T13:29:31.666+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute container callback action' started
2022-11-25T13:29:31.666+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute container callback action'
2022-11-25T13:29:31.667+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute container callback action' started
2022-11-25T13:29:31.667+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute container callback action'
2022-11-25T13:29:31.667+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute container callback action' started
2022-11-25T13:29:31.667+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute container callback action'
2022-11-25T13:29:31.668+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute container callback action' started
2022-11-25T13:29:31.668+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute container callback action'
2022-11-25T13:29:31.668+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute container callback action' started
2022-11-25T13:29:31.668+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute container callback action'
2022-11-25T13:29:31.672+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute container callback action' started
2022-11-25T13:29:31.673+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute container callback action'
2022-11-25T13:29:31.673+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute container callback action' started
2022-11-25T13:29:31.673+0000 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute container callback action'

已尝试的无效方案:

  • 升级Gradle至最新版7.5.1
  • 配置Gradle内存为-Xmx10240m
  • 在项目gradle.properties中禁用Gradle守护进程

可行排查与解决方法

1. 优化Github Actions Runner资源配置

  • 使用更高版本的macOS runner(如macos-12),其默认资源比旧版本更充足,能减少因资源不足导致的死锁
  • 在Workflow中添加环境变量,强制工具进入CI模式,并禁用Gradle并行构建:
    jobs:
      build-macos:
        runs-on: macos-12
        env:
          CI: true
          GRADLE_OPTS: "-Xmx10240m -Dorg.gradle.parallel=false"
        steps:
          - uses: actions/checkout@v4
          - name: Build release distributable
            run: ./gradlew createReleaseDistributable --no-parallel
    

2. 禁用Gradle并行与构建缓存

并行构建在CI环境下容易触发资源竞争或死锁,直接在命令行或配置中禁用:

  • 在项目gradle.properties中添加:
    org.gradle.parallel=false
    org.gradle.caching=false
    
  • 或者执行命令时显式禁用:
    ./gradlew createReleaseDistributable --no-parallel --no-build-cache
    

3. 检查并完善macOS打包签名配置

若打包过程中存在未配置的交互式签名步骤,会导致CI环境下构建卡住。确保在build.gradle.kts中正确配置自动签名,使用Github Secrets存储敏感信息:

plugins {
    id("org.jetbrains.compose") version "1.4.0"
    kotlin("multiplatform")
}

kotlin {
    macosX64 {
        binaries {
            executable {
                entryPoint = "main"
                signing {
                    identity = System.getenv("MACOS_SIGN_IDENTITY")
                    storeFile = file(System.getenv("MACOS_CERTIFICATE_PATH"))
                    storePassword = System.getenv("MACOS_CERTIFICATE_PASSWORD")
                }
            }
        }
    }
}

4. 拆分任务定位卡点

通过拆分构建任务,确定具体卡住的环节:

  1. 先执行编译任务:./gradlew assembleRelease
  2. 再执行打包任务:./gradlew createReleaseDistributable --no-build-cache
    若编译环节正常,问题则聚焦在打包阶段,可进一步添加--info日志级别查看细节:
./gradlew createReleaseDistributable --info

5. 清理Gradle缓存

缓存的旧产物可能导致冲突,在Workflow中添加缓存清理步骤:

- name: Clean Gradle build cache
  run: ./gradlew cleanBuildCache

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:20:30