首页 > 解决方案 > 如何在 Mac 上设置 Jenkins 从代理以使用 Plastic 检索文件?

问题描述

我有一个在 Ubuntu 上运行的 Jenkins 服务器;资源在 Plastic 上,而且我已经有一个 Windows 从站制作 Android 版本,所以 Plastic 服务器对 Jenkins 的响应很好。

我尝试在 Mac 上为 IOS 构建项目,但是在获取带有 java 异常的源时工作失败

java.io.IOException: error=2, 没有这样的文件或目录

我试图删除该作业的源代码控制并运行一些命令,例如:

cm status

它失败了,所以我更新了 PATH 环境变量以使其工作。现在手动命令可以了,但自动塑料拉力仍然不行。

我使用选择器将作业配置为使用PlasticSCM 插件从中提取

repository "MyRepo"
  path "/"
    smartbranch "/My/Branch"

这是完整的错误:

[test-mac] $ cm find changeset where date between '2019-05-27T11:14:36' and '2019-05-27T11:15:43' and branch='/My/Branch' on repositories 'MyRepo' --xml --dateformat=yyyy'-'MM'-'dd'T'HH':'mm':'ss
java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
Also:   hudson.remoting.Channel$CallSiteStackTrace: Remote call to JNLP4-connect connection from 192.168.1.46/192.168.1.46:49336
        at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1743)
        at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:357)
        at hudson.remoting.Channel.call(Channel.java:957)
        at hudson.Launcher$RemoteLauncher.launch(Launcher.java:1059)
        at hudson.Launcher$ProcStarter.start(Launcher.java:455)
        at com.codicesoftware.plugins.hudson.PlasticTool.tryExecute(PlasticTool.java:97)
        at com.codicesoftware.plugins.hudson.PlasticTool.execute(PlasticTool.java:57)
        at com.codicesoftware.plugins.hudson.commands.CommandRunner.execute(CommandRunner.java:20)
        at com.codicesoftware.plugins.hudson.commands.CommandRunner.executeAndRead(CommandRunner.java:36)
        at com.codicesoftware.plugins.hudson.commands.CommandRunner.executeAndRead(CommandRunner.java:25)
        at com.codicesoftware.plugins.hudson.commands.ChangesetsRetriever.getChangesets(ChangesetsRetriever.java:27)
        at com.codicesoftware.plugins.hudson.commands.ChangesetsRetriever.getDetailedHistory(ChangesetsRetriever.java:36)
        at com.codicesoftware.plugins.hudson.PlasticSCM.FindCsets(PlasticSCM.java:363)
        at com.codicesoftware.plugins.hudson.PlasticSCM.SetUpWorkspace(PlasticSCM.java:175)
        at com.codicesoftware.plugins.hudson.PlasticSCM.checkout(PlasticSCM.java:141)
        at hudson.scm.SCM.checkout(SCM.java:504)
        at hudson.model.AbstractProject.checkout(AbstractProject.java:1208)
        at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574)
        at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
        at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499)
        at hudson.model.Run.execute(Run.java:1816)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
        at hudson.model.ResourceController.execute(ResourceController.java:97)
        at hudson.model.Executor.run(Executor.java:429)
Caused: java.io.IOException: Cannot run program "cm" (in directory "/Users/MyUser/Jenkins/workspace/test-mac"): error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at hudson.Proc$LocalProc.<init>(Proc.java:249)
    at hudson.Proc$LocalProc.<init>(Proc.java:218)
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:936)
    at hudson.Launcher$ProcStarter.start(Launcher.java:455)
    at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1313)
    at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1266)
    at hudson.remoting.UserRequest.perform(UserRequest.java:212)
    at hudson.remoting.UserRequest.perform(UserRequest.java:54)
    at hudson.remoting.Request$2.run(Request.java:369)
    at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:93)
    at java.lang.Thread.run(Thread.java:748)

标签: macosjenkinsplasticscm

解决方案


我认为问题可能与以下 Jenkins 错误有关: https ://issues.jenkins-ci.org/browse/JENKINS-17157 (环境变量未使用 cygwin 在 ssh 中加载)

如果您的从服务器通过 SSH 连接到您的 Jenkins 服务器,则环境变量会丢失,因此您无法运行“cm”命令。以下链接可能有用:(https://support.cloudbees.com/hc/en-us/articles/229724088-How-to-set-up-a-Jenkins-agent-to-have-the-same-通过远程桌面连接时作为用户的路径

过去,我们尝试通过“Java Web Start”(而不是通过 SSH)连接从站,但我们无法通过丢失的 PATH 变量重现此问题(仅在通过 SSH 连接时才会发生)。

在 macOS 上: - 正在运行:例如:

sudo java -jar agent.jar -jnlpUrl http://MySERVER84/computer/macOsJava/slave-agent.jnlp -secret f5dcf86e0ceed3f22c08bc27fa07d680aff3e11c25452677af4fee218bcfb1aa -workDir "/tmp"

推荐阅读