如何在Windows 2012 r2 x64上运行jenkins slave?

时间:2014-05-20 08:16:51

标签: windows jenkins slave

我们希望使用jenkins在Windows 2012 R2 x64上构建一些特定的软件。 但是当我尝试运行它时,主节点失败了这个错误:

Connecting to 192.168.1.27
Checking if Java exists
C:\Program Files\Java\jdk1.6.0_30\bin\java.exe -version returned 1.6.0.
Installing the Jenkins slave service
ERROR: Message not found for errorCode: 0xC00000AC
org.jinterop.dcom.common.JIException: Message not found for errorCode: 0xC00000AC
    at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:102)
    at hudson.util.jna.DotNet.isInstalled(DotNet.java:77)
    at hudson.os.windows.ManagedWindowsServiceLauncher.launch(ManagedWindowsServiceLauncher.java:292)
    at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:222)
    at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:701)
Caused by: jcifs.smb.SmbException: All pipe instances are busy.
    at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
    at jcifs.smb.SmbTransport.send(SmbTransport.java:664)
    at jcifs.smb.SmbSession.send(SmbSession.java:238)
    at jcifs.smb.SmbTree.send(SmbTree.java:119)
    at jcifs.smb.SmbFile.send(SmbFile.java:775)
    at jcifs.smb.SmbFile.open0(SmbFile.java:989)
    at jcifs.smb.SmbFile.open(SmbFile.java:1006)
    at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
    at jcifs.smb.TransactNamedPipeOutputStream.<init>(TransactNamedPipeOutputStream.java:32)
    at jcifs.smb.SmbNamedPipe.getNamedPipeOutputStream(SmbNamedPipe.java:187)
    at rpc.ncacn_np.RpcTransport.attach(RpcTransport.java:91)
    at rpc.Stub.attach(Stub.java:104)
    at rpc.Stub.call(Stub.java:109)
    at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:100)

我不知道出了什么问题。

是的,我仔细阅读了this

UPD。好。我从域中删除了服务器。现在詹金斯说:  

Connecting to 192.168.1.27
    Checking if Java exists
    C:\Program Files\Java\jdk1.6.0_30\bin\java.exe -version returned 1.6.0.
    Installing the Jenkins slave service
    Copying jenkins-slave.exe
    Copying slave.jar
    Copying jenkins-slave.xml
    Registering the service
    Starting the service
    Waiting for the service to become ready
    ERROR: The service did not respond. Perhaps it failed to launch? 

在EventViewer中,我看到:

Service cannot be started. System.ComponentModel.Win32Exception: The system cannot find the file specified
       at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
       at winsw.WrapperService.StartProcess(Process process, String arguments, String executable)
       at winsw.WrapperService.OnStart(String[] _)
       at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

6 个答案:

答案 0 :(得分:10)

我在Windows 2012 R2 x64上遇到了同样的问题:

    Installing the Jenkins slave service
ERROR: Message not found for errorCode: 0xC00000AC
org.jinterop.dcom.common.JIException: Message not found for errorCode: 0xC00000AC
    at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:102)
    at hudson.util.jna.DotNet.isInstalled(DotNet.java:77)
    at hudson.os.windows.ManagedWindowsServiceLauncher.launch(ManagedWindowsServiceLauncher.java:292)
    at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:228)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: jcifs.smb.SmbException: All pipe instances are busy.
    at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
    at jcifs.smb.SmbTransport.send(SmbTransport.java:664)
    at jcifs.smb.SmbSession.send(SmbSession.java:238)
    at jcifs.smb.SmbTree.send(SmbTree.java:119)
    at jcifs.smb.SmbFile.send(SmbFile.java:775)
    at jcifs.smb.SmbFile.open0(SmbFile.java:989)
    at jcifs.smb.SmbFile.open(SmbFile.java:1006)
    at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
    at jcifs.smb.TransactNamedPipeOutputStream.<init>(TransactNamedPipeOutputStream.java:32)
    at jcifs.smb.SmbNamedPipe.getNamedPipeOutputStream(SmbNamedPipe.java:187)
    at rpc.ncacn_np.RpcTransport.attach(RpcTransport.java:91)
    at rpc.Stub.attach(Stub.java:104)
    at rpc.Stub.call(Stub.java:109)
    at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:100)
    ... 7 more

并且已经发现,作为服务运行的jenkins slave需要安装.net 3.x(在win2012服务器上默认不是这样)。

安装3.5 .net框架后,jenkins slave服务安装没有问题(服务器仍在域中)。

如果您在安装3.5框架时遇到问题,请不要浪费时间,请参阅此SO答案:Offline installer for .Net 3.5 SP1 not working(禁用WSUS帮助我完成安装)

答案 1 :(得分:4)

我有这个问题:

  

无法启动服务。 System.ComponentModel.Win32Exception:系统找不到指定的文件          在System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)          at winsw.WrapperService.StartProcess(进程进程,字符串参数,字符串可执行文件)          在winsw.WrapperService.OnStart(String [] _)          在System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(对象状态)

当我从以下位置更改Path to java executable时,问题就消失了:

C:\ProgramData\Oracle\Java\javapath\javaw

C:\ProgramData\Oracle\Java\javapath\java

无论如何,我认为'w'是由JENKINS追加的。

答案 2 :(得分:1)

我有一个Windows 8奴隶,它可以工作。 Java路径不正确的可能性很大,我的设置为 C:\ Program Files(x86)\ Java \ jre7 \ bin \ java (是的,没有.exe或其他任何东西,仅调整在Jenkins中,程序(x86)文件部分(如果要使用x64版本)。我也有远程根设置(到 C:\ jenkins ),我有一个环境变量 HOME 设置为 C:\ jenkins \ (是,一个是 \ ,另一个没有),但这只是为了让您在安装后轻松找到文件。

我的奴隶工作,出现在网上,然后一段时间(大部分空转)将出现连接问题。断开连接和重新连接有时会导致所有管道实例忙碌。错误,在这种情况下,我只需要做几次启动奴隶代理。在尝试解决该特定问题时找到了您的问题...

答案 3 :(得分:0)

首先,您可以转到奴隶机器,转到Jenkins - &gt;管理 - &gt;管理节点并选择Slave并通过java web start启动。

通过执行此操作,您将下载.jnlp文件并使用您配置的java启动它。

确保在系统变量“PATH”(版本1.6或更高版本)中配置了javaws.exe的路径。

它将启动一个窗口并显示为“已连接”。 现在您可以单击“文件”并安装为服务。

如果机器没有.NET 3.x,则无法给出异常,因此请确保已安装它然后再次尝试。

这很干净,没有任何问题。 希望这会有所帮助。

答案 4 :(得分:0)

对我来说,通过卸载旧的Java解决了这个问题。

答案 5 :(得分:0)

尝试从主服务器(jenkins)运行从属服务器(代理)时,遇到了类似的问题,如下所示进行了一个配置更改,就可以了,

以下设置需要添加到代理节点->配置中。

JVM选项-Djsse.enableSNIExtension = false

At Jenkins->Agent node, for a windows server 2012 slave configuration