如何在 Jenkins 中以 root 身份运行脚本?

Posted

技术标签:

【中文标题】如何在 Jenkins 中以 root 身份运行脚本?【英文标题】:How to run a script as root in Jenkins? 【发布时间】:2012-08-06 11:32:45 【问题描述】:

我需要在 Jenkins 中以 root 而不是默认用户身份运行 shell 脚本。我需要改变什么?

我的 sudoers 文件是这样的:

# User privilege specification
root    ALL=(ALL) ALL
igx     ALL=(ALL) ALL
%wheel  ALL=(ALL) ALL

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
%sudo   ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL
root    ALL=(ALL) ALL
jenkins ALL=NOPASSWD: /var/lib/jenkins/workspace/ing00112/trunk/source/
jenkins ALL=(ALL) NOPASSWD:ALL
#Defaults:jenkins !requiretty

【问题讨论】:

how to run jenkins as super user? 的可能重复项 【参考方案1】:

您必须使用sudo 运行脚本:

sudo /path/to/script

但在您必须允许jenkins 运行/etc/sudoers 中的脚本之前。

jenkins    ALL = NOPASSWD: /path/to/script

【讨论】:

@Igore 谢谢……你是 100% 正确的……我用期望命令以超级用户身份运行脚本:) 如果你想执行shell脚本更改为:“jenkins ALL=NOPASSWD: /bin/sh, /path/to/script” 然后你可以运行“sudo sh /path/to/script " 仅用于命令链接atrixnet.com/… 可以提供帮助;在我的情况下,我需要使用的不是脚本,而是命令“scp”;你的提示也很有帮助;谢谢 @nirvanaswap: sudoers.d 是一个目录,其中的文件自动包含在 /etc/sudoers 中 @Igor Chubin 的回答是 100% 正确,但永远不要使用普通编辑器打开 sudoer 文件。始终使用 visudo sudo visudo。这会将您带到 /etc/sudoers 并在保存后确保格式化没有错误。如果您在 sudoer 文件中出错,您将失去 sudo 访问权限,因此请始终使用 visudo【参考方案2】:

@Igor Chubin 的回答是 100% 正确,但永远不要使用普通编辑器打开 sudoer 文件。总是使用 visudo

只需输入

sudo visudo

这会将您带到/etc/sudoers,保存后将确保格式没有错误。

如果您在 sudoer 文件中出错,您将失去 sudo 访问权限,因此请始终使用visudo

【讨论】:

【参考方案3】:

我确实意识到我在这个问题上迟到了,但为了参考起见,我想我会把我的 2c 扔在这里:我使用 Jenkins 的 SSH 插件来完成这个(只需配置一个 localhost 目标)。通过这种方式,我可以将脚本直接包含在 Jenkins 中(就像普通的“执行 shell”步骤一样),而不是使用 sudo 来调用外部脚本。

【讨论】:

【参考方案4】:

尝试将 jenkins 用户添加到 sudo 组

sudo su -
usermod -a -G sudo jenkins

【讨论】:

【参考方案5】:

简单的方法

$ sudo visudo
## Now add the below lines in your sudoers file :
jenkins ALL=(ALL) NOPASSWD: ALL

$service jenkins start

【讨论】:

以上是关于如何在 Jenkins 中以 root 身份运行脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 docker 中以非 root 用户身份写入卷容器?

如何在 Jenkins 中创建用户并将其添加到组中以进行身份​​验证?

在 Docker 中以非 root 用户身份运行应用程序

ADB root 无法在模拟器上运行(无法在生产版本中以 root 身份运行)

Android:adbd 无法在生产版本中以 root 身份运行

如何在初始化脚本中以特定用户身份运行命令?