代码之家  ›  专栏  ›  技术社区  ›  Vít Kotačka

GitLab CI上的Gradle生成:无法创建ScriptPluginFactory类型的服务

  •  1
  • Vít Kotačka  · 技术社区  · 7 年前

    使用 平行的 格拉德尔 乔布斯 GitLab CI :

    Parallel Gradle jobs

    我收到以下消息 随机的 格拉德尔 例外情况:

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Could not create service of type ScriptPluginFactory using BuildScopeServices.createScriptPluginFactory().
    > Could not create service of type ResourceSnapshotterCacheService using GradleUserHomeScopeServices.createResourceSnapshotterCacheService().
    

    我用 docker 遗嘱执行人 gitlab-runner 没有 GitLab CI 缓存。我用 码头工人 用音量代替 格拉德尔 指向该卷的缓存:

    before_script:
      - export GRADLE_USER_HOME=/pipelines/.gradle
    

    访问该网站的权限没有问题 /pipelines 目录(所以它不是 this question ).

    对于这个问题,简单但烦人的解决方法就是手动重新触发失败的作业,然后它就可以顺利通过了。另一种解决方法是通过 retry 指令。

    所以,我的问题是: 工作失败的原因是什么?如何解决 (无需重新触发作业) ?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Vít Kotačka    7 年前

    根本原因:

    经过一些调试(开关) --stacktrace --info )很明显,根本原因是 码头工人 集装箱共享一个 格拉德尔 主机上的缓存。

    Caused by: org.gradle.cache.LockTimeoutException: Timeout waiting to lock file hash cache (/pipelines/.gradle/caches/4.10.2/fileHashes). It is currently in use by another Gradle instance.
    Owner PID: 158
    Our PID: 160
    Owner Operation: 
    Our operation: 
    Lock file: /pipelines/.gradle/caches/4.10.2/fileHashes/fileHashes.lock
    

    解决方案:

    还有很多问题没有解决 格拉德尔 缺陷/功能: Let multiple containers share downloaded dependencies .因此我(重新)实施了适当的 格拉德尔 缓存每个涉及的 GitLab CI 作业(因此,没有共享缓存):

    before_script:
      - export GRADLE_USER_HOME=`pwd`/.gradle
    
    rpmClient:
      stage: buildRpm
      script:
      - gradle clientRpm
      cache:
        paths:
        - .gradle/caches
    
    推荐文章