我添加了一个在Windows上运行的Jenkins代理-它无法启动

8fsztsew  于 11个月前  发布在  Jenkins
关注(0)|答案(2)|浏览(122)

我有一个运行在Linux上的Jenkins控制器,我想添加一个Windows代理。目前我无法启动代理:

  1. Java Web Start
    -> Java Web Start在JDK 11中被删除(并且从来都不是OpenJDK的一部分),所以当我们想将Jenkins切换到使用openjdk 11运行时,这将不再起作用,所以我甚至没有尝试过。
  2. Windows从属插件
    ->我遵循Troubleshootings并确保端口135,139和445可以从我的Jenkins master访问。可悲的是,我仍然收到错误:
2019-06-12 14:54:28] [windows-slaves] Connecting to 1.2.3.4
ERROR: Message not found for errorCode: 0xC0000001
org.jinterop.dcom.common.JIException: Message not found for errorCode: 0xC0000001
    at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKCR(JIWinRegStub.java:121)
    at org.jinterop.dcom.core.JIComServer.initialise(JIComServer.java:479)
    at org.jinterop.dcom.core.JIComServer.<init>(JIComServer.java:427)
    at org.jvnet.hudson.wmi.WMI.connect(WMI.java:59)
    at hudson.os.windows.ManagedWindowsServiceLauncher.launch(ManagedWindowsServiceLauncher.java:208)
    at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
    at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
    at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
    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 java.lang.Thread.run(Thread.java:748)
Caused by: jcifs.smb.SmbException: Failed to connect: 0.0.0.0<00>/1.2.3.4
jcifs.util.transport.TransportException
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at jcifs.util.transport.Transport.readn(Transport.java:29)
    at jcifs.smb.SmbTransport.peekKey(SmbTransport.java:388)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:288)
    at jcifs.smb.SmbTransport.doConnect(SmbTransport.java:319)
    at jcifs.util.transport.Transport.run(Transport.java:241)
    at java.lang.Thread.run(Thread.java:748)

    at jcifs.util.transport.Transport.run(Transport.java:258)
    at java.lang.Thread.run(Thread.java:748)

    at jcifs.smb.SmbTransport.connect(SmbTransport.java:309)
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:156)
    at jcifs.smb.SmbFile.doConnect(SmbFile.java:911)
    at jcifs.smb.SmbFile.connect(SmbFile.java:954)
    at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:77)
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:66)
    at jcifs.smb.SmbFile.getInputStream(SmbFile.java:2844)
    at rpc.ncacn_np.RpcTransport.attach(RpcTransport.java:90)
    at rpc.Stub.attach(Stub.java:104)
    at rpc.Stub.call(Stub.java:109)
    at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKCR(JIWinRegStub.java:119)
    ... 11 more

字符串
有没有人有一个建议?或者是对上述两种方法的替代方案?
编辑:
我必须提到的是,控制器是在本地运行的,代理是Azure VM。有一个路由器,正如我所说,端口(135,139,445)是开放的(从控制器到代理的telnet对于这些端口是成功的)。

7qhs6swi

7qhs6swi1#

我放弃了使用Windows Slave Plugin。相反,我成功地通过SSH连接到了Slave!
SSH守护程序默认情况下未安装在我的Windows 2019 Server上,因此我必须运行这些命令:

# install openSSH server
Add-WindowsCapability -Online -Name $(Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Server*' | Select -ExpandProperty Name)

# start sshd
Start-Service sshd

# enable sshd as a service
Set-Service -Name sshd -StartupType 'Automatic'

# check if firewall rule was automatically created
Get-NetFirewallRule -Name *ssh*

字符串
提示:Java >= 8必须安装在Slave上(并添加到PATH中)。

w8ntj3qf

w8ntj3qf2#

您需要启用SMB 1(请参阅JENKINS-46255):

Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Set-SmbServerConfiguration -EnableSMB1Protocol $true

字符串
但你会面临更多的问题。请参阅下面的简短摘要.
您需要授予对“<$em Scripting Scripting”的访问权限(请参阅JENKINS-4859):

$user = [System.Security.Principal.NTAccount]"$env:userdomain\$env:username"
$key = [Microsoft.Win32.Registry]::ClassesRoot.OpenSubKey(
  "CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}", "ReadWriteSubTree", "TakeOwnership")
$acl=$key.GetAccessControl()
$acl.SetOwner($user)
$key.SetAccessControl($acl)
$rule = New-Object System.Security.AccessControl.RegistryAccessRule(
    [System.Security.Principal.NTAccount]"Administrators",
    "FullControl", "ContainerInherit", "None", "Allow")
$acl.AddAccessRule($rule)
$key.SetAccessControl($acl)


然后将网络配置文件切换为Private:

Get-NetConnectionProfile
Set-NetConnectionProfile -InterfaceIndex <idx> -NetworkCategory private


禁用防火墙(无法找出需要添加以启用DCOM访问的规则)。
安装OpenJDK 1.8+,确保java.exe在系统路径上。
同时安装.NET 3.5非HTTP远程激活功能(通过服务器管理器->添加功能)。
最终结果:
x1c 0d1x的数据
有关更多细节,请参阅Windows agents fail to start via DCOM页面,它有大量有用的提示。

相关问题