如何在 Mac 上设置 Jenkins 从属代理以使用 Plastic 检索文件?

How to setup a Jenkins slave agent on a Mac to retrieve files using Plastic?

我在 Ubuntu 上有一个 Jenkins 服务器 运行;资源在 Plastic 上,我已经有一个 Windows slave making Android 构建,所以 Plastic 服务器对 Jenkins 的响应很好。

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

java.io.IOException: error=2, No such file or directory

我试图删除作业的源代码管理,只是 运行 一些命令,如 :

cm status

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

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

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.run(Request.java:369)
    at hudson.remoting.InterceptingExecutorService.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.lambda$newThread[=12=](Engine.java:93)
    at java.lang.Thread.run(Thread.java:748)

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

如果您的从站通过 SSH 连接到您的 Jenkins 服务器,环境变量将丢失,因此您无法 运行 "cm" 命令。 以下 link 可能有用:(https://support.cloudbees.com/hc/en-us/articles/229724088-How-to-set-up-a-Jenkins-agent-to-have-the-same-path-as-the-user-when-connected-via-Remote-Desktop-)

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

在 macOS 上: - 运行: 例如:

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