【问题标题】:Run shell command in jenkins as root user?以root用户身份在jenkins中运行shell命令?
【发布时间】:2015-07-07 17:42:30
【问题描述】:

我最近开始使用 Jenkins 进行集成。一切都很好,直到我在没有 shell 命令的主节点上运行作业,但我必须在主节点和包含 shell 命令的从节点上运行作业。我无法以 root 用户身份运行这些 shell 命令。我试过了

  1. 使用SSH Keys
  2. 在 shell 命令中设置用户名。
  3. 使用sudo

每次我使用上述任何方法时都会收到permission denied 错误。

【问题讨论】:

    标签: linux shell jenkins root


    【解决方案1】:

    我建议不要以 root 身份运行 jenkins 用户。这可能会暴露操作系统和 jenkins 可以构建的所有 repo。

    以 root 身份运行任何脚本都存在安全风险,但更安全的方法是授予 jenkins 用户 sudo 访问权限以仅运行一个脚本,而无需密码。

    sudo visudo
    

    并添加以下内容:

    jenkins    ALL = NOPASSWD: /var/lib/jenkins/jobs/[job name]/workspace/script
    

    通过失败的构建脚本的控制台日志仔细检查您的路径。此处显示的是默认设置。

    现在你可以在 jenkins 任务中调用sudo $WORKSPACE/your script

    【讨论】:

    • 那么我需要将sudo 附加到我的jenkinsfile 中的每个命令,这真的是正确的方法吗?
    • @JulioMarins 一般不会,如果您能找到替代方法,请采用它。但是,如果您需要使用 root 访问权限,那么这是更安全的方法。请记住,如果您正在运行的脚本受到威胁,那么 Jenkins 服务器也会受到威胁。
    • 在您的第二步中添加正在修改的文件名... sudo vi /etc/sudoers
    【解决方案2】:

    您需要修改jenkins 用户的权限,以便您可以运行shell 命令。 您可以将 jenkins 安装为服务(下载 rpm 包),您可能需要更改端口,因为默认情况下它在 8080 上运行 http,在 8009 端口上运行 AJP。



    以下流程适用于CentOS
    1. 打开这个脚本(使用VIM或其他编辑器):

    vim /etc/sysconfig/jenkins
    

    2。找到这个$JENKINS_USER 并更改为“root”:

    $JENKINS_USER="root"
    

    3。然后更改 Jenkins home、webroot 和日志的所有权:

    chown -R root:root /var/lib/jenkins
    chown -R root:root /var/cache/jenkins
    chown -R root:root /var/log/jenkins
    

    4) 重启 Jenkins 并检查用户是否已更改:

    service jenkins restart
    ps -ef | grep jenkins
    

    现在您应该能够以 root 用户身份运行 Jenkins 作业,并且所有 shell 命令都将以 root 执行。

    【讨论】:

    • 以 root 身份运行公开了允许您运行脚本的 Web 界面的服务是一个非常糟糕的主意。
    • 为@JamesP +1。但是,错误安装 aws cli 和 Jenkins 用户权限可能会导致此问题。
    • 任何想法,我如何在 MacOSX 中做到这一点?
    • dscl 。 -append /Groups/admin GroupMembership jenkins
    • 这看起来很有希望,但后来我恢复了,使用上面的命令,还没有找到更好的解决方案。
    【解决方案3】:

    对于 Linux,请尝试按照以下步骤操作:-

    这对我有用。

    更改 Jenkins 用户:sudo vi /etc/default/jenkins

    更改用户 root 或您用于访问文件的用户: $JENKINS_USER="root"

    使用您之前设置的用户执行:

    sudo chown -R root:root /var/lib/jenkins
    sudo chown -R root:root /var/cache/jenkins
    sudo chown -R root:root /var/log/jenkins
    
    1. 作为服务运行:

      service jenkins restart
      systemctl jenkins restart

    您可以执行 jenkins 有一个进程并禁用带有 UI 的 Linux 的无头模式。

    /etc/alternatives/java -Djava.awt.headless=false -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
    

    验证 Jenkins 当前是否正在运行: ps -ef | grep jenkins

    【讨论】:

      【解决方案4】:

      另一种选择是设置一个 jenkins “从属”,它实际上以 root 身份在主服务器上运行,并将其限制为绑定的作业,然后将您的作业指向该从属服务器。远非理想,但肯定是一个快速的解决方案。

      【讨论】:

        【解决方案5】:

        您只需要使用 Jenkins 的 Root 权限在 Linux 机器上运行 shell 命令。

        步骤:

        1) sudo vi /etc/sudoers

        2) 添加一行:

        jenkins ALL=NOPASSWD:/path of script/
        

        3) 在 Jenkins 中,使用 sudo 在远程 shell 上运行脚本。 例如:sudo ps -ef

        4) 立即构建 Jenkins 作业。 该作业使用 root 权限在 Linux 机器上运行脚本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-14
          • 2021-10-11
          • 1970-01-01
          • 2019-10-09
          • 2019-06-24
          • 1970-01-01
          相关资源
          最近更新 更多