通过 REST API (PowerShell) 创建八达通机器

Create Octopus machine via REST API (PowerShell)

我正在尝试通过 REST 创建一台机器 API,通过 PowerShell 调用它。

根据documentation,创建机器只需要机器的名称和指纹。但是我尝试的一切都会导致 405 或 500 错误:

$newMachine = @{Name='machineName';Thumbprint='asdvblsafghkvadc';} | ConvertTo-Json
$webClient.UploadString('http://server/octopus/api/machines','POST',$newMachine)

### OR

$newMachine = @{Name='machineName';Thumbprint='asdvblsafghkvadc';Roles='[web-server]';EnvironmentIds='[Environment-12]'; | ConvertTo-Json
$webClient.UploadString('http://server/octopus/api/machines','POST',$newMachine)

创建环境和编辑机器完美运行,我就是不能把这个机器创建下来。

通常 当您将触手代理添加到您的服务器时,您会立即将所述触手注册到所需的八达通服务器。我会向您提供我用来执行此类任务的 PowerShell 代码,但它可能值得一读 the Octopus blog post on how they create their tentacle army。他们提供 PowerShell,这是如何做到这一点的良好开端。

注意:在八达通服务器注册后,我很难让触手连接上。让它工作的秘诀是什么? Stop the tentacle service and start it again.


重新阅读您的 post 后,您似乎正试图在外部 或安装触手后向八达通服务器添加触手。你能澄清一下吗?我认为至少 environmentids 和 squid 也是一个要求。尝试添加鱿鱼。

要从 Octopus REST API 创建机器,需要导入某些库。 Dalmiro Grañas 在 interfacing with Octopus through PowerShell

上的一系列博客文章的第一篇中概述了这一点

虽然他没有涉及创建机器,但这是我必须从 MachineResource class

上的库文档中找出自己的东西

下面是我用来创建机器的代码:

#Adding libraries
Add-Type -Path 'C:\OctopusLibraries\Newtonsoft.Json.dll'
Add-Type -Path 'C:\OctopusLibraries\Octopus.Client.dll'
Add-Type -Path 'C:\OctopusLibraries\Octopus.Platform.dll'

#Setting variables
$apikey = 'API-QBGAAZEUMSUKJVSADFSDFA5Y2FLC'
$OctopusURI = 'http://OctopusServer/octopus/api/'

#Creating a connection
$endpoint = new-object Octopus.Client.OctopusServerEndpoint $OctopusURI,$apikey
$repository = new-object Octopus.Client.OctopusRepository $endpoint

#Set the machine properties
$Properties = @{Name="MachineName";Thumbprint="1AE1B6F81A30C2C5771AC5B234S4FE975";EnvironmentIds="Environments-65";Roles="web-server";URI="https://MyServer:10933/";CommunicationStyle="TentaclePassive"}

$envObj = New-Object Octopus.Client.Model.MachineResource -Property $Properties
$repository.Machines.Create($envObj)

ShaneC提到的post现在有点老了。我建议任何尝试在 Powershell 中执行此操作的人检查我开始为 Octopus Deploy 编写的模块。

模块站点:http://octoposh.net/

使用模块添加机器示例:https://github.com/Dalmirog/OctoPosh/wiki/Creating-Resources#machines

该模块仍在开发中,但最近我收到了很好的反馈。

在社区的一些帮助和反馈下,我相信它最终会变得非常好:)

我这周工作需要这样做,这是您正在寻找的代码示例(您需要 PowerShell v3.0 才能使用 Invoke-RestMethod,下载 Windows 7此处:https://www.microsoft.com/en-us/download/details.aspx?id=34595 [在 MS 成为间谍软件之前]):

$headers = @{"X-Octopus-ApiKey"="<YOUR OCTOPUS API KEY>"} 
$url = "http://<YOUR OCTOPUS SERVER>/api/"

$envname = "<YOUR ENVIRONMENT NAME FROM OCTOPUS>"
$machine = "<YOUR MACHINE NAME>"
$dropPath = "\<DROP MACHINE>\drop"
$appPath = "C:\Application"
$octopusPath = "C:\Octopus"
$roles = {"role1", "role2"}

# Get list of Environments
$environments = Invoke-RestMethod ($url + "environments/all") -Headers $headers -Method Get

# Choose the specific Environment by Name
$environmentId = $environments | ? { $_.Name -eq $envname }

# Fix up slashes
$dropPath = $dropPath.Replace("\","\")
$appPath = $appPath.Replace("\","\")
$octopusPath = $octopusPath.Replace("\","\")

# build request
$body = "{""Endpoint"":{""CommunicationStyle"":""OfflineDrop"",""DropFolderPath"":""" + $dropPath + """,""ApplicationsDirectory"":""" + $appPath + """,""OctopusWorkingDirectory"":""" + $octopusPath + """},""Status"":""Unknown"",""Name"":""" + $machine + """,""EnvironmentIds"":[""" + $environmentId + """],""Roles"":[" + $roles + "]}"

# send request
$added = Invoke-RestMethod ($url + "machines") -Headers $headers -Body $body -Method Post

# show result
echo $added

我在工作中使用了我测试过的类似代码,虽然我家里没有 Octopus 运行(这不是一个很好的产品,我被迫使用它并且考虑到选择,我会使用备用版本控制,意味着 [Team Foundation 和 vNext 构建系统具体],UI 不是很好,API 不是很好,它在表单中添加的值对于已经使用 TeamFoundation 的人来说,发布管理是值得怀疑的,TeamFoundation 以更易于访问的形式为开发人员提供了所需的一切)。

仍然有人喜欢它并且它不会消失。