运行 shell 以 root 用户身份在 jenkins 中执行命令?
Run shell command in jenkins as root user?
我最近开始使用 Jenkins 进行集成。一切都很好,直到我在没有 shell 命令的情况下在主节点上执行 运行 作业,但我必须在主节点和包含 shell 命令的从节点上执行 运行 作业。我无法以 root 用户身份 运行 那些 shell 命令。我试过了
- 使用
SSH Keys
。
- 在shell命令中设置用户名。
- 使用
sudo
.
每次使用上述任何方法时,我都会收到 permission denied
错误。
您需要修改 jenkins
用户的权限,以便您可以 运行 shell 命令。
您可以将 jenkins 安装为服务(下载 rpm 包),您可能需要更改端口,因为默认情况下它 运行s http on 8080 和 AJP on 8009 port.
以下过程适用于 CentOS
1. 打开这个脚本(使用 VIM 或其他编辑器):
vim /etc/sysconfig/jenkins
2。找到这个 $JENKINS_USER
并更改为“root”:
$JENKINS_USER="root"
3。然后更改 Jenkins home、webroot 和 logs 的所有权:
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
现在您应该能够 运行 Jenkins 作业作为 root 用户并且所有 shell 命令将作为 root
.
执行
我建议不要 运行将 jenkins 用户设置为 root。这可能会暴露操作系统和 jenkins 可以构建的所有 repo。
运行 作为 root 的任何脚本都存在安全风险,但一种稍微安全的方法是授予 jenkins 用户 sudo 仅 运行 一个脚本的访问权限,而无需密码。
sudo visudo
并添加以下内容:
jenkins ALL = NOPASSWD: /var/lib/jenkins/jobs/[job name]/workspace/script
通过失败构建脚本的控制台日志仔细检查您的路径。这里显示的是默认值。
现在您可以在 jenkins 任务中调用 sudo $WORKSPACE/your script
另一种选择是设置一个 jenkins "Slave",它实际上是 运行 作为 master 的 root 并将其限制为绑定作业,然后将您的作业指向该从属。远非理想,但肯定是一个快速的解决方案。
您只需要使用 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 作业。
此作业 运行 是 Linux 计算机上使用 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 has a process 并使用 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 进行集成。一切都很好,直到我在没有 shell 命令的情况下在主节点上执行 运行 作业,但我必须在主节点和包含 shell 命令的从节点上执行 运行 作业。我无法以 root 用户身份 运行 那些 shell 命令。我试过了
- 使用
SSH Keys
。 - 在shell命令中设置用户名。
- 使用
sudo
.
每次使用上述任何方法时,我都会收到 permission denied
错误。
您需要修改 jenkins
用户的权限,以便您可以 运行 shell 命令。
您可以将 jenkins 安装为服务(下载 rpm 包),您可能需要更改端口,因为默认情况下它 运行s http on 8080 和 AJP on 8009 port.
以下过程适用于 CentOS
1. 打开这个脚本(使用 VIM 或其他编辑器):
vim /etc/sysconfig/jenkins
2。找到这个 $JENKINS_USER
并更改为“root”:
$JENKINS_USER="root"
3。然后更改 Jenkins home、webroot 和 logs 的所有权:
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
现在您应该能够 运行 Jenkins 作业作为 root 用户并且所有 shell 命令将作为 root
.
执行
我建议不要 运行将 jenkins 用户设置为 root。这可能会暴露操作系统和 jenkins 可以构建的所有 repo。
运行 作为 root 的任何脚本都存在安全风险,但一种稍微安全的方法是授予 jenkins 用户 sudo 仅 运行 一个脚本的访问权限,而无需密码。
sudo visudo
并添加以下内容:
jenkins ALL = NOPASSWD: /var/lib/jenkins/jobs/[job name]/workspace/script
通过失败构建脚本的控制台日志仔细检查您的路径。这里显示的是默认值。
现在您可以在 jenkins 任务中调用 sudo $WORKSPACE/your script
另一种选择是设置一个 jenkins "Slave",它实际上是 运行 作为 master 的 root 并将其限制为绑定作业,然后将您的作业指向该从属。远非理想,但肯定是一个快速的解决方案。
您只需要使用 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 作业。 此作业 运行 是 Linux 计算机上使用 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 has a process 并使用 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