复制时 Jenkins 从属权限被拒绝 slave.jar
Jenkins Slave Permission Denied while copying slave.jar
我收到权限被拒绝的消息,但不知道为什么。从我的詹金斯大师那里,我能够 运行 使用 ssh-rsa-key
以下命令
scp /var/cache/jenkins/war/WEB-INF/slave.jar jenkins@<my_slave_host>:/var/jenkins/
注意: 我确实在我的从属主机上手动创建了 /var/jenkins/ ,当我看到它不存在并将其归 jenkins 用户所有时。我的 master jenkins 配置为使用 .ssh 密钥使用 jenkins@mySlaveHost。
知道为什么我的权限被拒绝了吗?它想做什么?
这是单击 [Lauch slave agent] 按钮后来自 master jenkins 的日志:
[02/27/15 15:18:01] [SSH] Opening SSH connection to <my_slave_host>:22.
[02/27/15 15:18:02] [SSH] Authentication successful.
[02/27/15 15:18:03] [SSH] The remote users environment is:
BASH=/bin/bash
BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_EXECUTION_STRING=set
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="3" [2]="11" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.3.11(1)-release'
CATALINA_HOME=/opt/tomcat/current
DIRSTACK=()
EUID=107
GROUPS=()
HOME=/var/lib/jenkins
HOSTNAME=*********** REMOVED***********
HOSTTYPE=x86_64
IFS=$' \t\n'
JAVA_HOME=/usr/lib/jvm/java-7-oracle
LANG=en_US.UTF-8
LOGNAME=jenkins
MACHTYPE=x86_64-pc-linux-gnu
MAIL=/var/mail/jenkins
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PIPESTATUS=([0]="0")
PPID=10592
PS4='+ '
PWD=/var/lib/jenkins
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=1
SSH_CLIENT='10.57.13.32 34436 22'
SSH_CONNECTION='10.57.13.32 34436 10.57.6.42 22'
TERM=dumb
UID=107
USER=jenkins
XDG_RUNTIME_DIR=/run/user/107
XDG_SESSION_ID=42
_=']'
[02/27/15 15:18:03] [SSH] Checking java version of java
[02/27/15 15:18:04] [SSH] java -version returned 1.7.0_76.
[02/27/15 15:18:04] [SSH] Starting sftp client.
[02/27/15 15:18:04] [SSH] Copying latest slave.jar...
hudson.util.IOException2: Could not copy slave.jar into '/var/jenkins' on slave
at hudson.plugins.sshslaves.SSHLauncher.copySlaveJar(SSHLauncher.java:1019)
at hudson.plugins.sshslaves.SSHLauncher.access0(SSHLauncher.java:133)
at hudson.plugins.sshslaves.SSHLauncher.call(SSHLauncher.java:709)
at hudson.plugins.sshslaves.SSHLauncher.call(SSHLauncher.java:696)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: hudson.util.IOException2: Could not copy slave.jar to '/var/jenkins/slave.jar' on slave
at hudson.plugins.sshslaves.SSHLauncher.copySlaveJar(SSHLauncher.java:1016)
... 7 more
Caused by: com.trilead.ssh2.SFTPException: Permission denied (SSH_FX_PERMISSION_DENIED: The user does not have sufficient permissions to perform the operation.)
at com.trilead.ssh2.SFTPv3Client.openFile(SFTPv3Client.java:1201)
at com.trilead.ssh2.SFTPv3Client.createFile(SFTPv3Client.java:1074)
at com.trilead.ssh2.SFTPv3Client.createFile(SFTPv3Client.java:1055)
at hudson.plugins.sshslaves.SFTPClient.writeToFile(SFTPClient.java:93)
at hudson.plugins.sshslaves.SSHLauncher.copySlaveJar(SSHLauncher.java:1008)
... 7 more
[02/27/15 15:18:04] Launch failed - cleaning up connection
[02/27/15 15:18:04] [SSH] Connection closed.
编辑:
这是从机上的 /var/jenkins:
$ ls -al
total 436
drwxr-xr-x 2 jenkins jenkins 22 Feb 27 15:17 .
drwxr-xr-x 14 root root 4096 Feb 27 15:12 ..
-rw-r--r-- 1 jenkins jenkins 439584 Feb 27 15:17 slave.jar
至于 SFTP,我认为它没有启用,你能指点我任何文档说 SFTP 是从站的先决条件吗?我见过的所有页面都没有提到 SFTP。
看来问题与您的远程根目录设置有关。这需要是 slave.jar 的位置,因为 Jenkins 会尝试从那里执行它。
至于权限,需要配置远程根目录(无论您将其设置为什么)以允许 Jenkins 访问它。
因此,如果您将远程根目录设置更改为 /var/jenkins/ 在您的情况下,它应该会成功启动 Jenkins 从站。
sudo chmod -R 777 /var/jenkins
对于任何拥有外部驱动器的人,请检查它是否安装正确:
drwxrwxrwx+ 2 App admin 68 Aug 25 19:33 Jenkins_Support
drwxrwxr-x 19 App staff 714 Sep 25 10:46 Jenkins_Support 1
这可能是个问题
授予
sudo chmod -R 777 /var/lib/jenkins
适合我
如果您更改了用户以连接到从站,还请确保从站目标目录为空(不包含 slave.jar 以前用户复制到那里的目录)。
这有点愚蠢,但花了我一些时间。
确保需要复制jar的位置的权限是登录用户(即jenkins)。
检查权限使用:
ls -l directory_name
很可能您会找到另一个所有者,因此更改所有者:
chown -R username:username directory_name
这对我有用!
在ubuntu终端检查
服务 ufw 状态
如果有效
服务 ufw 停止
在redhat终端查看
服务 iptables 状态
如果有效
服务 iptables 停止
服务 ip6tables 状态
如果活跃
服务 ip6tables 停止
然后检查 jenkins-slave-node 状态
我收到权限被拒绝的消息,但不知道为什么。从我的詹金斯大师那里,我能够 运行 使用 ssh-rsa-key
以下命令scp /var/cache/jenkins/war/WEB-INF/slave.jar jenkins@<my_slave_host>:/var/jenkins/
注意: 我确实在我的从属主机上手动创建了 /var/jenkins/ ,当我看到它不存在并将其归 jenkins 用户所有时。我的 master jenkins 配置为使用 .ssh 密钥使用 jenkins@mySlaveHost。
知道为什么我的权限被拒绝了吗?它想做什么?
这是单击 [Lauch slave agent] 按钮后来自 master jenkins 的日志:
[02/27/15 15:18:01] [SSH] Opening SSH connection to <my_slave_host>:22.
[02/27/15 15:18:02] [SSH] Authentication successful.
[02/27/15 15:18:03] [SSH] The remote users environment is:
BASH=/bin/bash
BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_EXECUTION_STRING=set
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="3" [2]="11" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.3.11(1)-release'
CATALINA_HOME=/opt/tomcat/current
DIRSTACK=()
EUID=107
GROUPS=()
HOME=/var/lib/jenkins
HOSTNAME=*********** REMOVED***********
HOSTTYPE=x86_64
IFS=$' \t\n'
JAVA_HOME=/usr/lib/jvm/java-7-oracle
LANG=en_US.UTF-8
LOGNAME=jenkins
MACHTYPE=x86_64-pc-linux-gnu
MAIL=/var/mail/jenkins
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PIPESTATUS=([0]="0")
PPID=10592
PS4='+ '
PWD=/var/lib/jenkins
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=1
SSH_CLIENT='10.57.13.32 34436 22'
SSH_CONNECTION='10.57.13.32 34436 10.57.6.42 22'
TERM=dumb
UID=107
USER=jenkins
XDG_RUNTIME_DIR=/run/user/107
XDG_SESSION_ID=42
_=']'
[02/27/15 15:18:03] [SSH] Checking java version of java
[02/27/15 15:18:04] [SSH] java -version returned 1.7.0_76.
[02/27/15 15:18:04] [SSH] Starting sftp client.
[02/27/15 15:18:04] [SSH] Copying latest slave.jar...
hudson.util.IOException2: Could not copy slave.jar into '/var/jenkins' on slave
at hudson.plugins.sshslaves.SSHLauncher.copySlaveJar(SSHLauncher.java:1019)
at hudson.plugins.sshslaves.SSHLauncher.access0(SSHLauncher.java:133)
at hudson.plugins.sshslaves.SSHLauncher.call(SSHLauncher.java:709)
at hudson.plugins.sshslaves.SSHLauncher.call(SSHLauncher.java:696)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: hudson.util.IOException2: Could not copy slave.jar to '/var/jenkins/slave.jar' on slave
at hudson.plugins.sshslaves.SSHLauncher.copySlaveJar(SSHLauncher.java:1016)
... 7 more
Caused by: com.trilead.ssh2.SFTPException: Permission denied (SSH_FX_PERMISSION_DENIED: The user does not have sufficient permissions to perform the operation.)
at com.trilead.ssh2.SFTPv3Client.openFile(SFTPv3Client.java:1201)
at com.trilead.ssh2.SFTPv3Client.createFile(SFTPv3Client.java:1074)
at com.trilead.ssh2.SFTPv3Client.createFile(SFTPv3Client.java:1055)
at hudson.plugins.sshslaves.SFTPClient.writeToFile(SFTPClient.java:93)
at hudson.plugins.sshslaves.SSHLauncher.copySlaveJar(SSHLauncher.java:1008)
... 7 more
[02/27/15 15:18:04] Launch failed - cleaning up connection
[02/27/15 15:18:04] [SSH] Connection closed.
编辑: 这是从机上的 /var/jenkins:
$ ls -al
total 436
drwxr-xr-x 2 jenkins jenkins 22 Feb 27 15:17 .
drwxr-xr-x 14 root root 4096 Feb 27 15:12 ..
-rw-r--r-- 1 jenkins jenkins 439584 Feb 27 15:17 slave.jar
至于 SFTP,我认为它没有启用,你能指点我任何文档说 SFTP 是从站的先决条件吗?我见过的所有页面都没有提到 SFTP。
看来问题与您的远程根目录设置有关。这需要是 slave.jar 的位置,因为 Jenkins 会尝试从那里执行它。
至于权限,需要配置远程根目录(无论您将其设置为什么)以允许 Jenkins 访问它。
因此,如果您将远程根目录设置更改为 /var/jenkins/ 在您的情况下,它应该会成功启动 Jenkins 从站。
sudo chmod -R 777 /var/jenkins
对于任何拥有外部驱动器的人,请检查它是否安装正确:
drwxrwxrwx+ 2 App admin 68 Aug 25 19:33 Jenkins_Support
drwxrwxr-x 19 App staff 714 Sep 25 10:46 Jenkins_Support 1
这可能是个问题
授予
sudo chmod -R 777 /var/lib/jenkins
适合我
如果您更改了用户以连接到从站,还请确保从站目标目录为空(不包含 slave.jar 以前用户复制到那里的目录)。 这有点愚蠢,但花了我一些时间。
确保需要复制jar的位置的权限是登录用户(即jenkins)。
检查权限使用:
ls -l directory_name
很可能您会找到另一个所有者,因此更改所有者:
chown -R username:username directory_name
这对我有用!
在ubuntu终端检查
服务 ufw 状态
如果有效
服务 ufw 停止
在redhat终端查看
服务 iptables 状态
如果有效
服务 iptables 停止 服务 ip6tables 状态 如果活跃 服务 ip6tables 停止
然后检查 jenkins-slave-node 状态