【问题标题】:How to make "./gradlew" the same as "sudo ./gradlew"?如何使“./gradlew”与“sudo ./gradlew”相同?
【发布时间】:2016-04-21 08:03:49
【问题描述】:

我正在一个辅助机器中设置一个 Jenkins 作业,而且我是 Linux shell 的新手。现在我有一个问题:

以jenkins(为Jenkins作业设置的用户帐户)登录,它执行./gradlew,然后它将开始下载https://downloads.gradle.org/distributions/gradle-2.10-bin.zip,由于网络不好,它会失败,如果执行“sudo ./gradlew”,它将开始正常运行gradle。

谁能帮忙告诉我,如何让“./gradlew”和用户jenkins一样的“sudo ./gradlew”?

shell 脚本全部来自 git,所以我无法通过添加“sudo”来修改它。

在我的真实工作场景中添加日志:

jenkins@reed:/local/jenkins/workspace/SV_TEST_/automation/robot$ id
uid=180(jenkins) gid=0(root) group=0(root)

jenkins@reed:/local/jenkins/workspace/SV_TEST_/automation/robot$ sudo ./gradlew webAPI:compileJava
Starting a new Gradle Daemon for this build (subsequent builds will be faster).
:common:compileJava
warning: [options] bootstrap class path not set in conjunction with -source 1.7
:common:processResources UP-TO-DATE
:common:classes
:common:jar
:webAPI:compileJava
warning: [options] bootstrap class path not set in conjunction with -source 1.7

BUILD SUCCESSFUL

Total time: 10.204 secs
jenkins@reed:/local/jenkins/workspace/SV_TEST_/automation/robot$ /local/jenkins/workspace/SV_TEST/automation/robot/gradlew -g /local/jenkins/.gradle -p /local/jenkins/workspace/SV_TEST/automation/robot clean 
Downloading https://services.gradle.org/distributions/gradle-2.10-bin.zip
...

【问题讨论】:

  • 可能是权限问题。如果对您有帮助,请看这里。stackoverflow.com/questions/33820638/…
  • 如果您发布此错误的控制台日志并附上上下文会有所帮助。
  • 不要将用户 jenkins 添加到 root 组,并且不要使用 sudo 执行 gradlew。两者都是服务器的安全风险。而是尝试修复您的设置,以便正常的 gradlew 工作。即使您真的必须使用 sudo(您很可能不必),也不要将 jenkins 添加到根组,而是添加到 /etc/sudoers 文件中,用户 jenkins 可以使用 sudo 执行此命令而不提供密码。但同样,最好修复您的设置,这样就不需要 sudo。正如 tony19 建议的那样,给我们控制台输出,也许我们能够帮助您解决您的真正的问题。

标签: linux shell jenkins gradle


【解决方案1】:

尝试将gradlew 中的最后一行替换为以下内容:

exec sudo "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH"  org.gradle.wrapper.GradleWrapperMain "$@"

【讨论】:

  • 感谢您的帮助,很抱歉错过了我的问题中的另一个细节 - 代码来自 git,我无法修改,因为它适用于所有人,我必须在本地解决它并处理权限问题。
【解决方案2】:

谢谢大家的热心回答,我找到了解决问题的方法:-)

我切换到root查看~/.gradle,发现文件非常完整,而jenkins的~/.gradle只有一个wrapper文件夹,所以我将~/.gradle for root的所有文件复制到一个jenkins,比,它可以正常运行 gradle 而不用 jenkins 下载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2014-11-21
    • 1970-01-01
    • 2017-11-04
    相关资源
    最近更新 更多