java - Jenkins 无法在 Windows Slave 上启动进程

标签 java jenkins classpath

构建开始时,在 Windows 从机上运行的 Jenkins 构建会引发以下错误:

   Java.io.IOException: Cannot run program "tf" (in directory "c:\Jenkins\workspace\ProjectName-WindowsPhone"): CreateProcess error=87, The parameter is incorrect
    at java.lang.ProcessBuilder.start(Unknown Source)

我尝试过的: 1.指定TF.exe的完整路径 2.在PATH变量中指定TF.exe的路径 3.设置PATH=。在构建过程初始化阶段 4.设置CLASSPATH=。在构建过程初始化阶段 5.设置CLASSPATH=。作为从站上的环境变量。

TF.exe在任意目录下的Jenkins Slave服务用户下解析,因此不是TF.exe路径的问题

感谢有关使用 Windows Slave 和 TFS 配置 Jenkins 的任何帮助或想法。

完整的错误日志如下(是的,它是 Java stack trace ;))

     $ tf workspaces -format:brief -server:https://cloudtfsname.visualstudio.com/DefaultCollection/ ********
    java.io.IOException: Cannot run program "tf" (in directory "c:\Jenkins\workspace\ProjectName-WindowsPhone"): CreateProcess error=87, The parameter is incorrect
        at java.lang.ProcessBuilder.start(Unknown Source)
        at hudson.Proc$LocalProc.<init>(Proc.java:244)
        at hudson.Proc$LocalProc.<init>(Proc.java:216)
        at hudson.Launcher$LocalLauncher.launch(Launcher.java:803)
        at hudson.Launcher$ProcStarter.start(Launcher.java:381)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1136)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1101)
        at hudson.remoting.UserRequest.perform(UserRequest.java:118)
        at hudson.remoting.UserRequest.perform(UserRequest.java:48)
        at hudson.remoting.Request$2.run(Request.java:328)
        at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at hudson.remoting.Engine$1$1.run(Engine.java:63)
        at java.lang.Thread.run(Unknown Source)
        at ......remote call to WindowsSlave(Native Method)
        at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1356)
        at hudson.remoting.UserResponse.retrieve(UserRequest.java:221)
        at hudson.remoting.Channel.call(Channel.java:752)
        at hudson.Launcher$RemoteLauncher.launch(Launcher.java:916)
        at hudson.Launcher$ProcStarter.start(Launcher.java:381)
        at hudson.plugins.tfs.TfTool.execute(TfTool.java:99)
        at hudson.plugins.tfs.model.Server.execute(Server.java:120)
        at hudson.plugins.tfs.model.Workspaces.getListFromServer(Workspaces.java:38)
        at hudson.plugins.tfs.model.Workspaces.populateMapFromServer(Workspaces.java:50)
        at hudson.plugins.tfs.model.Workspaces.exists(Workspaces.java:76)
        at hudson.plugins.tfs.actions.CheckoutAction.checkout(CheckoutAction.java:36)
        at hudson.plugins.tfs.TeamFoundationServerScm.checkout(TeamFoundationServerScm.java:176)
        at hudson.model.AbstractProject.checkout(AbstractProject.java:1270)
        at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:609)
        at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
        at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:531)
        at hudson.model.Run.execute(Run.java:1750)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
        at hudson.model.ResourceController.execute(ResourceController.java:89)
        at hudson.model.Executor.run(Executor.java:240)
    Caused by: java.io.IOException: CreateProcess error=87, The parameter is incorrect
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(Unknown Source)
        at java.lang.ProcessImpl.start(Unknown Source)
        at java.lang.ProcessBuilder.start(Unknown Source)
        at hudson.Proc$LocalProc.<init>(Proc.java:244)
        at hudson.Proc$LocalProc.<init>(Proc.java:216)
        at hudson.Launcher$LocalLauncher.launch(Launcher.java:803)
        at hudson.Launcher$ProcStarter.start(Launcher.java:381)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1136)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1101)
        at hudson.remoting.UserRequest.perform(UserRequest.java:118)
        at hudson.remoting.UserRequest.perform(UserRequest.java:48)
        at hudson.remoting.Request$2.run(Request.java:328)
        at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at hudson.remoting.Engine$1$1.run(Engine.java:63)
        at java.lang.Thread.run(Unknown Source)

最佳答案

“TF.exe在任意目录下的Jenkins Slave服务用户下解析,因此不是TF.exe路径的问题”

您没有完全理解 jenkins 的工作原理。事实上,唯一可以理解的环境变量是全局变量,并且用户变量不被考虑用于干净的构建。

Jenkins 中没有任何魔力,您应该尝试将 PATH 设置为构建阶段,重新启动 Slave,然后运行任务。

关于java - Jenkins 无法在 Windows Slave 上启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29574257/

相关文章:

gradle - build.gradle buildscript 依赖与依赖?

java - 在 linux 中指定类路径 *.jar 时无法添加多个 jar

java - 组合 Java 8 optional

java - x =new int[2]; 是怎么做到的?在这个java代码中工作?

windows - Jenkins 并从 Windows 批处理返回代码

Jenkins Permission Denied 中的 GIT 克隆问题

java - Blackberry Touch 事件检测触摸位置上的对象

java - 删除组内重复的列值

java - 部署后的 WAR 版本

java - java 9下运行时添加jar到classpath