为什么 GitLab 运行器作业在多个 gradle 任务中失败?



我正在尝试在我的.gitlab-ci.yml文件中运行buildtest阶段。 截至目前,我的设置非常简单,但这是我第一次使用 gradle。

最初我有以下文件:

非工作 .gitlab-ci.yml

job:
script:
- gradle build

由于我不明白的原因,这失败了,但我假设到达.gradle目录的权限问题。

修复是:

工作 .gitlab-ci.yml

job:
script:
- gradle build - gradle build -g gradle-user-home

添加-g标志解决了问题,并且生成成功。 但是,当我尝试运行另一个阶段(例如test(时,我失败了。

非工作 .gitlab-ci.yml

stages:
- build
- test
gradle-build:
stage: build
script:
- gradle build -g gradle-user-home
gradle-test:
stage: test
script:
- gradle test -g gradle-user-home

如果我删除任何一个阶段,另一个阶段在单独时工作正常。 第一个可以正常运行,第二个甚至没有显示它尝试运行的脚本,我只是收到以下错误:

Running with gitlab-runner 12.4.1 (05161b14)
on my-runner abcdefg
Using Shell executor...
Running on my-runner...
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /home/gitlab-runner/builds/abcdefg/0/user-name/project/.git/
from http://gitlab/user-name/project
70077bc..4xyz master -> origin/master
Checking out 4dbf9934 as master...
warning: failed to remove gradle-user-home/daemon/5.6.2: Directory not empty
warning: failed to remove gradle-user-home/caches/journal-1: Directory not empty
etc... (6 more lines of this)
Removing .gradle/
Removing gradle-user-home/daemon/5.6.2/daemon-19142.out.log
etc... (20 more lines of this)
ERROR: Job failed: exit status 1

就像我说的,这很令人困惑,因为如果我单独运行它们,它们各自工作,但是如果我同时将它们放在文件中,就会发生这种情况,并且另一个作业会跳过。 我假设它与gitlab-runner用户在运行器上的权限有关,但我不确定如何解决这个问题。 似乎gitlab-runner用户将是创建无法删除的gradle-user-home的用户,所以我不确定为什么会这样。 我已经检查过,正如预期的那样,gitlab-runner用户确实拥有builds目录中的所有内容。

构建后,我使用 清理我的 gradle 构建缓存。这可确保目录干净,删除可能保留的缓存。

./gradlew cleanBuildCache

最新更新