JNLP连接在Jenkins中被弃用,这是将windows从机连接到Jenkins的新推荐方式



因为标题已经指出,不赞成使用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中设置了节点):

  1. 从下载最新的服务包装http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/(例如"winsw-2.20-net4.exe")
    将其放置在Custom WorkDir路径中,并将其重命名为";jenkins-agent.exe";

  2. 下载";agent.jar":http://YourJenkinsServer:8080/jnlpJars/agent.jar
    将其放置在Custom WorkDir路径中,并将其重命名为";agent.jar";

  3. 创建";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>
    
  4. 调整";jenkins-agent.xml";根据您的环境。java.exe的版本应该与Jenkins使用的版本相同。确保调整所有前缀为"的字符串;您的";以及通往";java.exe";。您可以在Jenkins master(例如http://YourJenkinsServer:8080/manage/computer/YourNodeName/)的节点配置页面上找到秘密字符串和正确的jnlpUrl。
    官方文件

  5. 创建";jenkinsagent.exe.conf";文件,以阻止可执行文件在早期版本的.NET Framework上运行。

    <configuration>
    <startup>
    <supportedRuntime version="v4.0"/>
    </startup>
    </configuration>
    
  6. 启动";cmd.exe";作为管理员并导航到"的目录;jenkinsagent.exe";。

  7. 安装服务:
    jenkins-agent.exe install

  8. 启动服务:
    sc start YourJenkinsAgentServiceId

注意:

  • 为了简单起见,我只使用了http协议。当连接工作时,我建议切换到https以提高安全性。
    • 如果您在Jenkins服务器上使用自签名证书(通常在LAN中),则必须将代理上的证书安装到Java证书存储中(因为Java会忽略Windows证书存储)。这可以使用Java的keytool来完成(更多信息)

最简单的方法是使用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代理。您应该看到代理连接到詹金斯主机并以联机方式显示。

最新更新