我正在创建一个Jenkins主/从群集,我无法找到让新主机自动向主服务器注册的方法。
我目前的设置是运行一些Terraform脚本,这些脚本将创建主服务器和5个从服务器。然后我必须登录主节点和管理Jenkins - >管理节点 - >新节点并手动创建我想要的节点数。
然后我RDP进入我的奴隶并运行命令java -jar agent.jar -jnlpUrl http://yourserver:port/computer/agent-name/slave-agent.jnlp
。这非常好用,但是我想要一种自动扩展/减少代理数量的方法,而不必在每次创建新的代理时手动登录到奴隶。
是否有关于如何动态自注册节点的插件或一些文档?
注意:这仅适用于Windows节点。我正在使用Kubernetes插件自动扩展/缩小linux节点,但Kubernetes没有稳定的Windows节点支持,因此我无法使用它。我必须支持经典的.NET应用程序(不是.NET Core),因此我必须在Windows节点上构建。
答案 0 :(得分:0)
我一直在AWS上测试它。
https://plugins.jenkins.io/swarm
虽然您无法在AWS上使用广播,但您可以添加到java命令并指定jenkins master的LB的主机名或URL。
我还没有检查过它在Windows上是如何工作的,但很快就会这样做,并会告诉你它是怎么回事。
答案 1 :(得分:0)
我正在使用Swarm插件https://plugins.jenkins.io/swarm将Windows客户端连接到Jenkins。 在启动时,我让我的VM运行此Powershell Skript:
function startJenkinsSlave()
{
[CmdletBinding(SupportsShouldProcess=$true)]
param (
[parameter(Position = 1, Mandatory = $true)]
[string]$jkMasterUrl,
[parameter(Position = 2, Mandatory = $true)]
[string]$jkSlaveName,
[parameter(Position = 3, Mandatory = $true)]
[string]$jkSlaveUser,
[parameter(Position = 4, Mandatory = $true)]
[string]$jkSlaveSecret
)
Write-Host "--- start jenkins swarm slave ---"
Write-Host "download new Version of swarm-client.jar"
$jkSwarmJarUrl="$jkMasterUrl/swarm/swarm-client.jar"
$jkJarFilePath="C:\Program Files\Jenkins\swarm-client-$($jkSlaveName).jar"
$javaExePath="C:\ProgramData\Oracle\Java\javapath\java.exe"
Try {
[io.file]::OpenWrite($jkJarFilePath).close()
Get-ItemProperty -Path $jkJarFilePath -ErrorAction SilentlyContinue
$client = new-object System.Net.WebClient
$client.DownloadFile($jkSwarmJarUrl, $jkJarFilePath)
Write-Host "neueste Version vom swarm-client.jar wurde heruntergeladen"
Get-ItemProperty -Path $jkJarFilePath
}
Catch {
Write-Warning "Unable to write to output file $jkJarFilePath"
}
Write-Host "Jenkins slave will start:"
& $javaExePath '-Dfile.encoding=UTF8' -jar $jkJarFilePath -deleteExistingClients -master $jkMasterUrl -username $jkSlaveUser -password $jkSlaveSecret -labels "W10-swarm $jkSlaveName"
}
$jkSlaveUser='JenkinsUserForSwarm'
# Use access-token and not password!
$jkSlaveSecret='1d1a700e0a0981ef74f23efa9a6c90d39d'
$jkMasterUrl='http://jenkins.onmyhost.local:8080'
$vmName=(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters' -name 'VirtualMachineName').VirtualMachineName
Write-Host "Starting Jenkins Swarm"
while($true)
{
try
{
startJenkinsSlave -jkMasterUrl $jkMasterUrl -jkSlaveName $vmName -jkSlaveUser $jkSlaveUser -jkSlaveSecret $jkSlaveSecret
}
finally
{
# ctrl-c will the skript.
Write-Host "Jenkins Slave service ended. Restart in 120 seconds"
Start-Sleep -Seconds 120
}
}
此脚本可稳定运行,并且在需要UI界面时对Windows从属有用。 您还可以将env变量用于不同的参数(詹金斯主数据库,用户,令牌等)。 对于Unix从属服务器,使用k8s ans ssh可能会有更好的解决方案。
问候,埃里克。
答案 2 :(得分:0)
这是我在Linux上使用的bash脚本,可以很容易地将其修改为Windows。
vulnerable?
这有点类似于docker slave映像中包含的代理启动器,但是在运行jnlp之前,它使用jenkins cli在jenkins上创建节点。一些参数显然需要适应Windows。
编辑:要获得该xml,最简单的方法是在Web ui中按所需方式创建一个节点,然后使用jenkins-cli进行检索。