因为标题已经指出,不赞成使用JNLP连接。Jenkins还向https://en.wikipedia.org/wiki/Java_Web_Start#Deprecation.
那么,现在将Windows代理连接到Jenkins的推荐方法是什么呢?似乎没有真正好的指南https://jenkins.io涵盖该主题。
有两种选择:要么使用Java Web Start的开源替代方案,要么使用Jenkins服务包装器。后者给你最大的控制权。
Java Web Start的开源替代方案
有一个名为OpenWebStart的开源替代品,它是基于IcedTeaWeb的。
更多信息:Java Web Start死了-OpenWebStart万岁!
OpenWebStart是WebStart和JNLP的开源实现标准(JSR-56)。
[…]
在IcedTeaWeb中,我们目前正在绘制JNLP规范和最大限度地支持其功能。此外对于以IcedTeaWeb为核心的OpenWebStart来说,IcedTeaWeb也是在AdoptOpenJDK中使用,以在Java 8中提供最小的WebStartAdoptOpenJDK的发布。然而,与OpenWebStart,因为它们只能使用当前JVM来运行基于JNLP的应用程序。
使用Jenkins服务包装器
通过服务包装器(winsw-*.exe
)安装Jenkins服务时,不再需要JavaWebStart。JNLP协议似乎仍在幕后使用,因此它在未来可能仍有一些被弃用的问题。
- 官方安装指南
步骤(假设您已经在Jenkins master中设置了节点):
-
从下载最新的服务包装http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/(例如"winsw-2.20-net4.exe")
将其放置在Custom WorkDir路径中,并将其重命名为";jenkins-agent.exe"; -
下载";agent.jar":
http://YourJenkinsServer:8080/jnlpJars/agent.jar
将其放置在Custom WorkDir路径中,并将其重命名为";agent.jar"; -
创建";jenkins-agent.xml";在同一目录中:
<service> <id>YourJenkinsAgentServiceId</id> <name>Your Jenkins Agent Service Name</name> <description>This service runs an agent for Jenkins automation server.</description> <executable>C:Program FilesJavabinjava.exe</executable> <arguments>-Xrs -jar "%BASE%agent.jar" -jnlpUrl http://YourJenkinsServer:8080/manage/computer/YourNodeName/jenkins-agent.jnlp -secret YourSecretStringConsistingOfHexadecimalCharacters -workDir=C:YourNodeWorkDir</arguments> <logmode>rotate</logmode> <onfailure action="restart" /> <download from="http://YourJenkinsServer:8080/jnlpJars/agent.jar" to="%BASE%agent.jar"/> <extensions> <extension enabled="true" className="winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension" id="killOnStartup"> <pidfile>%BASE%jenkins_agent.pid</pidfile> <stopTimeout>5000</stopTimeout> <stopParentFirst>false</stopParentFirst> </extension> </extensions> </service>
-
调整";jenkins-agent.xml";根据您的环境。java.exe的版本应该与Jenkins使用的版本相同。确保调整所有前缀为"的字符串;您的";以及通往";java.exe";。您可以在Jenkins master(例如
http://YourJenkinsServer:8080/manage/computer/YourNodeName/
)的节点配置页面上找到秘密字符串和正确的jnlpUrl。
官方文件 -
创建";jenkinsagent.exe.conf";文件,以阻止可执行文件在早期版本的.NET Framework上运行。
<configuration> <startup> <supportedRuntime version="v4.0"/> </startup> </configuration>
-
启动";cmd.exe";作为管理员并导航到"的目录;jenkinsagent.exe";。
-
安装服务:
jenkins-agent.exe install
-
启动服务:
sc start YourJenkinsAgentServiceId
注意:
- 为了简单起见,我只使用了
http
协议。当连接工作时,我建议切换到https
以提高安全性。- 如果您在Jenkins服务器上使用自签名证书(通常在LAN中),则必须将代理上的证书安装到Java证书存储中(因为Java会忽略Windows证书存储)。这可以使用Java的
keytool
来完成(更多信息)
- 如果您在Jenkins服务器上使用自签名证书(通常在LAN中),则必须将代理上的证书安装到Java证书存储中(因为Java会忽略Windows证书存储)。这可以使用Java的
最简单的方法是使用WinSW(Windows Service Wrapper)将Windows代理连接到Jenkins,您可以按照以下步骤操作:从官方网站下载WinSW可执行文件,并将其保存在Windows计算机上的目录中。
在Windows计算机上为Jenkins代理创建一个新目录。该目录将被用作";远程FS根";在Jenkins中配置代理时。
在保存WinSW可执行文件的目录中创建一个新的XML文件,并将其命名为";jenkinsslave.xml";。您可以使用任何文本编辑器来创建此文件。
打开";jenkinsslave.xml";文件并添加以下内容:
<service>
<id>jenkins-slave</id>
<name>Jenkins Slave</name>
<description>This service runs a Jenkins agent on this machine.</description>
<executable>C:Program FilesJavajdk1.8.0_221binjava.exe</executable>
<arguments>-jar C:PathToslave.jar -jnlpUrl http://jenkins-server:port/computer/slave-name/slave-agent.jnlp -secret abcdef1234567890 -workDir C:PathToAgentDirectory</arguments>
<logmode>rotate</logmode>
</service>
替换";詹金斯服务器";以及";端口";带有Jenkins服务器的主机名和端口号;从名称";用你想给你在詹金斯的Windows代理的名字;abcdef1234567890";用Jenkins提供的密钥;C: \路径\收件人\代理\目录"带有您为Jenkins代理创建的目录的路径。
保存";jenkinsslave.xml";文件
以管理员身份打开命令提示符,然后导航到保存WinSW可执行文件的目录。
运行以下命令将Jenkins代理作为Windows服务安装:
winsw.exe install
运行以下命令启动Jenkins代理服务:
net start "Jenkins Slave"
在Jenkins web界面中,转到";管理詹金斯"gt"管理节点和云">quot;新节点";为Windows代理创建一个新节点。
输入节点的名称并选择";"永久代理人";。单击";OK";。
在下一个屏幕上,输入以下信息:
远程根目录:Windows计算机上应该运行代理的目录。标签:要指定给节点的任何标签。发射方法:;通过Java Web Start启动代理";。可用性:";让这个代理尽可能地保持在线";。单击";保存";以创建节点。
在节点配置屏幕中;启动";以启动Windows代理。您应该看到代理连接到詹金斯主机并以联机方式显示。