通过 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 以更易于访问的形式为开发人员提供了所需的一切)。
仍然有人喜欢它并且它不会消失。
我正在尝试通过 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 以更易于访问的形式为开发人员提供了所需的一切)。
仍然有人喜欢它并且它不会消失。