【发布时间】:2015-07-07 17:42:30
【问题描述】:
我最近开始使用 Jenkins 进行集成。一切都很好,直到我在没有 shell 命令的主节点上运行作业,但我必须在主节点和包含 shell 命令的从节点上运行作业。我无法以 root 用户身份运行这些 shell 命令。我试过了
- 使用
SSH Keys。 - 在 shell 命令中设置用户名。
- 使用
sudo。
每次我使用上述任何方法时都会收到permission denied 错误。
【问题讨论】:
我最近开始使用 Jenkins 进行集成。一切都很好,直到我在没有 shell 命令的主节点上运行作业,但我必须在主节点和包含 shell 命令的从节点上运行作业。我无法以 root 用户身份运行这些 shell 命令。我试过了
SSH Keys。 sudo。每次我使用上述任何方法时都会收到permission denied 错误。
【问题讨论】:
我建议不要以 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 中的每个命令,这真的是正确的方法吗?
您需要修改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 执行。【讨论】:
对于 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
作为服务运行:
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
【讨论】:
另一种选择是设置一个 jenkins “从属”,它实际上以 root 身份在主服务器上运行,并将其限制为绑定的作业,然后将您的作业指向该从属服务器。远非理想,但肯定是一个快速的解决方案。
【讨论】:
您只需要使用 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 机器上运行脚本。
【讨论】: