如何在 Octopus Deploy 中从监听触手切换到轮询触手?

How can I switch from listening tentacles to polling tentacles in Octopus Deploy?

建立混合云似乎是许多公司正在采用的方式。一个常见的配置是 Octopus Deploy 运行 在本地 VM 上。 Octopus Deploy 部署到本地 VM 以及 Azure 中的 VM 运行。 Octopus Deploy 实例将迁移到 Azure 中的 VM 运行。这是我们将更多本地 VM 迁移到 Azure 的整体战略的一部分。

更重要的是,企业防火墙已配置为仅允许连接到 Azure。本地 VM 连接到 Azure 没有问题。但是 Azure VM 无法连接到本地 VM。所有本地虚拟机都在使用 listening tentacles. Is it possible to switch over to polling tentacles。可以自动化吗?

一旦创建了触手实例,就无法更改通信模式(侦听或轮询)。您需要做的是创建一个新实例。这是新 Runbooks 功能派上用场的一个用例。

请注意:这假设您已经将 Octopus Deploy 实例移动到 Azure。

您将有两本 运行 书。第 运行本书将:

  1. 在现有触手上使用 运行 脚本步骤创建新的轮询触手实例。

第二本 运行书将:

  1. 在新的轮询触手上使用 运行 脚本步骤来禁用旧监听触手的注册。
  2. 在测试对新触手实例的一些部署时暂停以进行手动干预。
  3. 在新的轮询触手上使用 运行 脚本步骤删除旧的侦听触手实例。

首先,让我们使用脚本控制台创建轮询触手。一些注意事项: - 当您使用 Octopus Deploy 注册新触手时,您需要提供一个名称。我建议你使用一些容易记住的东西。如果你当前的监听触手注册为[MachineName],那么使用[MachineName]-Polling.
- 除了提供您的部署角色外,还添加 "PollingTentacle" 作为角色,以便将来 运行 可以轻松使用脚本控制台。

$OldMachineName = $OctopusParameters["Octopus.Machine.Name"]
$Environment = $OctopusParameters["Octopus.Environment.Name"]
$Roles = $OctopusParameters["Octopus.Machine.Roles"]
$APIKey = #Your API Key
$Server = #Your Server
$NewMachineName = "$OldMachineName-Polling"

Set-Location "C:\Program Files\Octopus Deploy\Tentacle"

$baseArgs = @("register-with","--instance=Polling","--Name=$NewMachineName","--server=$Server","--apiKey=$octopusApiKey","--comms-style=TentacleActive","--server-comms-port=10943","--environment=$Environment")

$roleList = $roles -split ","
foreach ($role in $roleList) {
    $baseArgs += "--role=$role"
}

$baseArgs += "--console"

& .\Tentacle.exe create-instance --instance "Polling" --config "C:\Octopus\Tentacle.config" --console
& .\Tentacle.exe new-certificate --instance "Polling" --if-blank --console
& .\Tentacle.exe configure --instance "Polling" --reset-trust --console
& .\Tentacle.exe configure --instance "Polling" --home "C:\Octopus\Polling" --app "C:\Octopus\Applications\Polling" --noListen "True" --console
& .\Tentacle.exe $baseArgs 
& .\Tentacle.exe service --instance "Polling" --install --start --console

接下来,使用 API,禁用旧机器。这是将角色 "PollingTentacles" 和机器注册设置为 [MachineName]-Polling 使之变得容易的地方。此脚本将禁用旧目标。

###CONFIG###
$OctopusURL = #Octopus Server root URL
$APIKey = #Octopus API Key
$NewMachineName = $OctopusParameters["Octopus.Machine.Name"]

$machineName = $NewMachineName -replace "-Polling", ""

###PROCESS###
$header = @{ "X-Octopus-ApiKey" = $APIKey }

#Getting all machines
$allmachines = Invoke-RestMethod $OctopusURL/api/machines/all -Headers $header

#Filtering machine by name
$machine = $allmachines | ?{$_.name -eq $machineName}

#Setting the "IsDisabled" property
$machine.IsDisabled = $true #Set to $false to disable the machine

#Converting $machine into a JSON blob to PUT is back to the server
$body = $machine | ConvertTo-Json -Depth 4

#Pushing the modified machine to the userver
Invoke-RestMethod ($OctopusURL + $machine.Links.Self) -Method Put -Body $body -Headers $header

既然轮询触手 运行ning 和旧触手被禁用,运行 一些测试部署。一切都应该继续按原样工作。

最后,您需要利用脚本控制台取消注册并删除旧触手。

cd "C:\Program Files\Octopus Deploy\Tentacle"

Tentacle.exe deregister-from --instance "Tentacle" --server "http://YOUR_OCTOPUS" --apiKey "API-YOUR_API_KEY" --multiple
Tentacle.exe delete-instance --instance "Tentacle"

关于命令行的更多信息,请参考our documentation

如果这使您超出许可限制,请联系支持人员@octopus.com,说明您要做什么,我们将为您提供临时许可。