Jenkins在Mac上的从节点目录无法访问。

5

我正在尝试使用以下内容在Mac mini上启动Jenkins从机:/Library/LaunchDaemons/com.jenkins.ci.plist

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.jenkins.ci</string>
        <key>UserName</key>
        <string>jenkins</string>
        <key>SessionCreate</key>
        <true/>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/java</string>
            <string>-Djava.awt.headless=true</string>
            <string>-jar</string>
            <string>/Users/jenkins/agent.jar</string>
            <string>-jnlpUrl</string>
            <string>http://jenkins2.domain.net:8080/computer/jenkins-mac/slave-agent.jnlp</string>
            <string>-secret</string>
            <string>23erft6yhujnhyujnbftyujbvcdrtyhbvcxswedaw</string>
            <string>-workDir</string>
            <string>"/Users/jenkins/jenkins_slave/"</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/Users/jenkins/error.log</string>
        <key>StandardOutPath</key>
        <string>/Users/jenkins/stdout.log</string>
    </dict>
    </plist>

那么,请输入以下内容:sudo launchctl load /Library/LaunchDaemons/com.jenkins.ci.plist

但在/Users/jenkins/error.log中,我看到了

    Exception in thread "main" java.io.IOException: The specified working directory should be fully accessible to the remoting executable (RWX): "/Users/jenkins/jenkins_slave/"
        at org.jenkinsci.remoting.engine.WorkDirManager.verifyDirectory(WorkDirManager.java:249)
        at org.jenkinsci.remoting.engine.WorkDirManager.initializeWorkDir(WorkDirManager.java:202)
        at hudson.remoting.Launcher.run(Launcher.java:300)
        at hudson.remoting.Launcher.main(Launcher.java:283)

我已经以777的权限打开了/Users/jenkins/jenkins_slave/,但仍然出现此错误。
jenkins2-slave3:~ jenkins$ ls -ld /Users/jenkins/jenkins_slave/
drwxrwxrwx  5 jenkins  jenkins  160 Nov 13  2018 /Users/jenkins/jenkins_slave/
jenkins2-slave3:~ jenkins$ ls -ld /Users/jenkins/
drwxr-xr-x+ 44 jenkins  staff  1408 Jun  5 10:12 /Users/jenkins/

如果我在Mac上以jenkins用户身份运行以下命令,则可以正常工作:
/usr/bin/java -Djava.awt.headless=true -jar /Users/jenkins/agent.jar -jnlpUrl http://jenkins2.domain.net:8080/computer/jenkins-mac/slave-agent.jnlp -secret 23erft6yhujnhyujnbftyujbvcdrtyhbvcxswedaw -workDir "/Users/jenkins/jenkins_slave/"
有人知道这里出了什么问题吗?
系统软件概览:
  System Version: macOS 10.14.4 (18E226)
  Kernel Version: Darwin 18.5.0
  Boot Volume: Macintosh HD
  Boot Mode: Normal
  Computer Name: jenkins-slave
  User Name: jenkins (jenkins)
  Secure Virtual Memory: Enabled
  System Integrity Protection: Enabled
  Time since boot: 7 days 23:11

你看过这个吗?https://dev59.com/RVkS5IYBdhLWcg3wemz6... 大多数情况下,这似乎是一个权限问题,只需执行chown命令即可。 - rohit thomas
我尝试了这里提到的所有解决方案,但仍无法解决我遇到的问题。 - roy
2个回答

2
所以,它能为“jenkins”用户工作的原因是Jenkins创建了一个应用程序账户,该账户使用jenkins用户具有运行/访问Jenkins(及其文件夹-在您的情况下为-workDir“/Users/jenkins/jenkins_slave/”)的权限。这就是为什么jenkins可以运行命令,但当您尝试使用sudo运行时会失败。

为什么sudo会失败?

主要是因为树中有一个更高级别的目录,您没有执行权限,因此即使使用777,您仍然无法运行它。
相反,对目录进行chownusermod,将其分配给您希望获得访问权限的用户。
sudo usermod -a -G rohit git

了解更多信息,请访问https://askubuntu.com/questions/812513/permission-denied-in-777-folder


我可以使用777打开/Users/jenkins/,但我认为这里不合适。如果jenkins从jenkins用户开始作为从属进程,那么为什么它不能访问/Users/jenkins/jenkins_slave/ - roy
你不应该给予任何文件夹/目录完全访问权限,而是应该授予拥有上述答案的目录的权限...至于从机问题,你确认使用的是相同的用户吗?还有一个选项“以触发构建的用户身份运行”,更详细的解释请参考https://dev59.com/SlcP5IYBdhLWcg3wa5M3 - rohit thomas
在 Mac Mini 上启动 Jenkins Slave 时,我遇到了上述错误。不是在构建的时候发生的。此外,在 com.jenkins.ci.plist 文件中,我指定了用于启动从机进程的“用户名”。 - roy
你尝试使用这个“UserName”登录服务器并直接运行命令了吗?很可能用户没有权限。 - rohit thomas
是的,我已经在我的原帖中提到了这一点。 - roy

1

我遇到了同样的问题。问题在于目录中的引号:

<string>"/Users/jenkins/jenkins_slave/"</string>

只需要删除它们,它就可以正常工作:
<string>/Users/jenkins/jenkins_slave/</string>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接