我最近开始使用Jenkins进行集成。一切都很顺利,直到我在主节点上运行作业时没有使用shell命令,但我不得不在主节点和包含shell命令的从节点上运行作业。我无法以root用户身份运行这些shell命令。我尝试了以下方法:
- 使用SSH密钥。
- 在shell命令中设置用户名。
- 使用sudo。
每次使用上述任何一种方法时,我都会收到“permission denied”错误。
我建议不要将jenkins用户作为root用户运行。这可能会暴露操作系统和jenkins可以构建的所有代码库。
以root身份运行脚本是一个安全风险,但稍微更安全的方法是授予jenkins用户sudo访问权限,只允许运行一个脚本,而无需输入密码。
sudo visudo
并添加以下内容:
jenkins ALL = NOPASSWD: /var/lib/jenkins/jobs/[job name]/workspace/script
当构建脚本失败时,请通过控制台日志仔细检查您的路径。此处显示的是默认路径。
现在,在Jenkins任务中,您可以调用sudo $WORKSPACE/your script
您需要修改 jenkins
用户的权限,以便能够运行 shell 命令。
您可以安装 Jenkins 作为服务(下载 rpm 包),您可能需要更改端口,因为默认情况下它在 8080 端口上运行 http 和在 8009 端口上运行 AJP。
以下过程适用于 CentOS
1. 打开此脚本(使用 VIM 或其他编辑器):
vim /etc/sysconfig/jenkins
2. 找到 $JENKINS_USER
并将其更改为“root”:
$JENKINS_USER="root"
3. 然后更改Jenkins主目录、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
执行。针对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
将 Jenkins 作为服务运行:
service jenkins restart
或
systemctl jenkins restart
您可以在 Linux 上以 UI 的方式执行 Jenkins 进程并禁用无头模式。
/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
或者您可以更改docker.sock
的权限。确保您的Docker容器以root
用户运行。
docker exec <jenkinsContainerID> chmod 777 /var/run/docker.sock
vi user/lib/systemd/system/jenkins.service
中,需要更改文件中的User=root
和Group=root
,因为默认情况下它们将是jenkins
。运行systemctl daemon-reload
。vi /etc/sysconfig/jenkins
中更改JENKINS_USER="root"
。
运行chown -R root:root /var/lib/jenkins
。
运行chown -R root:root /var/cache/jenkins
。
运行chown -R root:root /var/log/jenkins
。除了选定答案中提到的所有步骤外,我还需要执行以下操作:
找出 Jenkins 服务文件所在位置,在 Centos 7/8 上
vim /usr/lib/systemd/system/jenkins.service
将用户从 jenkins
更改为 root
User=root
Group=root
sudo visudo
。相反,我创建了/etc/sudoers.d/jenkins
文件,并在其中添加了这行内容。jenkins ALL=NOPASSWD:/var/lib/jenkins/scripts/script.sh
您只需要在Jenkins上使用Root权限在Linux机器上运行shell命令即可。
步骤:
1)sudo vi /etc/sudoers
2)添加以下行:
jenkins ALL=NOPASSWD:/path of script/
3) 从Jenkins,在远程shell上使用sudo运行脚本。
例如:sudo ps -ef
4) 现在构建Jenkins作业。 此作业使用root权限在Linux机器上运行脚本。
sudo
,这样做真的是正确的方法吗? - Julio Marins