Gradle抱怨仅在CI工作期间缺少jar

时间:2020-05-08 18:39:39

标签: gradle continuous-integration gitlab git-submodules

我正在gitlab作业上运行gradle assemble

image: gradle:alpine

variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  GIT_SUBMODULE_STRATEGY: normal

before_script:
  - export GRADLE_USER_HOME=`pwd`/.gradle

build:
  stage: build
  script:
    - gradle assemble
  artifacts:
    paths:
      - build/libs/*.jar

after_script:
    - ls -R

gradle assemble没有显示任何问题,并且在我的物理机上运行良好,但是在运行程序上我得到以下信息:

Execution failed for task ':jar'.
> Failed to create MD5 hash for file '/builds/project/subproject/build/libs/subproject.jar' as it does not exist.

其中子项目是git子模块。

我希望该项目像在本地一样进行构建,有什么想法吗?

修改

添加我的.gitmodules文件:

[submodule "submodule"]
    path = submodule
    url = https://github.com/thechubbypanda/submodule.git

在gradle脚本运行之前,子模块的所有文件都已存在

2 个答案:

答案 0 :(得分:0)

您忘记运行命令来拉出所有子模块:

在您的before_script中也这样做:

git submodule sync --recursive
git submodule update --init --recursive

还要确保已在.gitmodules文件中声明了子模块。

请参见https://docs.gitlab.com/ee/ci/yaml/README.html#git-submodule-strategy

答案 1 :(得分:0)

如果使用的是GitLab 8.12+,并且子模块位于同一GitLab服务器上,则必须更新.gitmodules文件以使用相对URL。由于Git允许在.gitmodules配置中使用相对URL,因此可以轻松地使用HTTP(S)克隆所有CI作业,并使用SSH进行所有本地签出。 .gitmodules看起来像:

[submodule "project"]
  path = project
  url = ../../group/project.git

完整的解释在这里:https://docs.gitlab.com/ee/ci/git_submodules.html

尝试像下面的示例一样将GIT_SUBMODULE_STRATEGY更改为递归

  GIT_SUBMODULE_STRATEGY: recursive