1

我有一个特别涉及的 java 应用程序,它需要在构建运行文件挂载时对系统资源进行 root 访问。有没有办法通过 maven2/3 插件使用 jenkins 的“sudo”直接调用 maven?还是插件总是以jenkins运行。?

4

4 回答 4

3

以下是如何以 root 身份运行 Jenkins - 这将导致 maven 插件进程也以 root 身份运行。

方法1)在JENKINS_USER中修改如下行/etc/sysconfig/jenkins

  #JENKINS_USER=jenkins
  JENKINS_USER=root

在基于 Debian 的系统中,该文件位于/etc/default/jenkins

方法二)直接修改/etc/init.d/jenkins

  #daemon --user "$JENKINS_USER" --pidfile "$JENKINS_PID_FILE" $JAVA_CMD $PARAMS > /dev/null
  echo "WARNING: RUNNING AS ROOT"
  daemon --user root --pidfile "$JENKINS_PID_FILE" $JAVA_CMD $PARAMS > /dev/null

然后,当然,您必须运行:

service jenkins restart
于 2013-02-28T19:11:40.437 回答
1

尝试以 root 身份运行 jenkins 进程(尽管在安全方面并不理想),它应该以同一用户的身份生成 maven 进程。

于 2013-02-28T01:13:06.777 回答
1

当您通过 Jenkins maven 插件运行 maven 时,它会在 jenkins 的进程中执行。运行服务器是根是一个坏主意。您可以尝试将插件作为 shell 命令运行:

sudo mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get -DartifactId=...

另请参阅: https ://superuser.com/questions/67765/sudo-with-password-in-one-command-line

于 2013-02-28T06:06:50.513 回答
-2

我对使用 jenkins 运行 root 的建议是在 jenkins 上编译一个二进制文件并给它 suid 位,以便它可以由 jenkins 用户启动但以 root 身份执行。例如,我写了一个 C 文件:

#include <stdio.h>
#include <stdlib.h>

int main(){
    system("whoami");
}

编译它(作为根)

# gcc -c iamroot.c
# gcc -o iamroot iamroot.o

并给它一点

# chmod u+s iamroot

然后您获得(与任何其他用户一样)

$ ./iamroot
root

现在这可以由 jenkins 用户运行,并声明它是 root。在安全性方面,它比给 jenkins 用户 root 或 sudo 权限要好得多。

于 2013-02-28T07:03:09.107 回答