首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell不识别渐变包装器。

shell不识别渐变包装器。
EN

Stack Overflow用户
提问于 2020-12-24 14:01:26
回答 1查看 148关注 0票数 0

我有shell脚本如下-

因为gradlew位于项目根上,所以它被调用为../gradlew clean,它比backend_test.sh文件高出一个级别-

但是Gitlab ci的工作失败了,有以下错误-

./test-runners/backend_test.sh: line 21: ../gradlew: No such file or directory

如果我也在根级别上移动backend_test.sh并更新shell文件以调用gradlew作为./gradlew clean,那么就没有错误。当backend_test.sh不在根级时,我做错了什么?

更新:

在本地运行shell,即./backend_test.sh会让我遵循以下错误-

代码语言:javascript
复制
Configure project : 
Evaluating root project 'test-runners' using build file 
'/Users/tarunkumar/dev/git/system-test/test-runners/build.gradle'.
All  projects evaluated.

FAILURE: Build failed with an exception.

* What went wrong:
Task 'clean' not found in root project 'test-runners'.

为什么build.gradletest-runner文件夹中查找,即使它与test-runner的级别相同

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-25 01:28:55

所有相对路径相对于当前工作目录进行评估。如果使用的是shell,则通常在shell提示符中显示工作目录。工作目录与当前处理文件的目录之间没有链接。这种行为解释了所有的问题:

,因为gradlew位于项目根上,所以它被调用为../gradlew clean,它比backend_test.sh文件高出一个级别-

在CI服务器上,通常使用根目录作为工作目录调用所有进程(我不确定GitLab CI,但我猜它的行为也是这样的)。现在,../gradlew将相对于根目录进行评估,而根目录不起作用,因为它在gradlew CI作为临时文件夹使用的父目录中搜索GitLab。您可以通过在本地导航一个shell到您的项目目录,然后调用test-runners/backend_test.sh来检查此行为,这将导致相同的错误。

--如果我也在根级移动backend_test.sh并更新shell文件以调用gradlew作为./gradlew clean,那么就没有错误。

当然,只要脚本将从您的项目目录调用,这是CI服务器上的默认设置,正如我们已经注意到的那样,这是可以工作的。在本地,您只需导航到您的项目目录,只需调用backend_test.sh

在本地运行shell,即./backend_test.sh将获得以下错误

现在我们遇到了同样的问题。您的脚本可以找到../gradlew并调用Gradle,但遗憾的是,Gradle将对工作目录进行评估,以找到相关的build.gradle文件。但是现在工作目录在您的test-runners文件夹中,Gradle将在这个文件夹中搜索一个build.gradle文件。如果该文件夹中没有build.gradle文件,Gradle根本不关心,而只是假设存在一个空的build.gradle文件。现在Gradle使用这个(空)项目来运行构建,但是由于(空)项目中没有任务clean,所以Gradle失败了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65439326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档