运行 shell 以 root 用户身份在 jenkins 中执行命令?

Run shell command in jenkins as root user?

我最近开始使用 Jenkins 进行集成。一切都很好,直到我在没有 shell 命令的情况下在主节点上执行 运行 作业,但我必须在主节点和包含 shell 命令的从节点上执行 运行 作业。我无法以 root 用户身份 运行 那些 shell 命令。我试过了

  1. 使用SSH Keys
  2. 在shell命令中设置用户名。
  3. 使用 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
  1. 运行 作为服务:

    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