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

60
我需要在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

可能是重复问题:如何将Jenkins作为超级用户运行? - Mark O'Connor
5个回答

98

您必须使用sudo来运行脚本:

sudo /path/to/script

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

jenkins    ALL = NOPASSWD: /path/to/script

3
如果您想要执行 Shell 脚本,请将以下内容更改为:“jenkins ALL=NOPASSWD: /bin/sh, /path/to/script”,然后您可以运行“sudo sh /path/to/script”。 - TroodoN-Mike
执行一个脚本时使用sudo而不是root,但对于某些情况来说并不相同。 - VicoMan
1
@nirvanaswap:sudoers.d是一个目录,其中的文件会自动包含在/etc/sudoers中。 - Igor Chubin
2
@Igor Chubin的回答是100%正确的,但永远不要使用普通编辑器打开sudoer文件。始终使用visudo sudo visudo。这将带您到/etc/sudoers,并在保存时确保格式没有错误。如果在sudoer文件中出现错误,您将失去sudo访问权限,因此请始终使用visudo。 - Lav Patel
显示剩余3条评论

21

@Igor Chubin的回答完全正确,但永远不要使用普通编辑器打开sudoer文件,始终使用visudo

只需输入

sudo visudo

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

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


8

我知道我晚了,但为了参考,我想在这里提出我的建议:我使用Jenkins的SSH插件来实现此功能(只需配置本地主机目标即可)。这样,我可以直接在Jenkins中包含脚本(就像普通的“执行shell”步骤一样),而不是使用sudo调用外部脚本。


2
尝试将Jenkins用户添加到sudo组。
sudo su -
usermod -a -G sudo jenkins

1
简单的实现方法
enter image description here

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

$service jenkins start

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接