Создайте компьютер Octopus через REST API (PowerShell)

Я пытаюсь создать машину через REST API, вызывая ее через PowerShell.

Согласно документации, только имя и отпечаток машины необходимы для создания машины. Но все, что я пробую, приводит к 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)

Создание окружения и редактирование машин работают отлично, я просто не могу оторваться от создания этого компьютера.

4 ответа

Решение

Чтобы создать машину из Octopus REST API, необходимо импортировать определенные библиотеки. Дальмиро Граньяс об этом рассказывает в первой серии постов о взаимодействии с Octopus через PowerShell.

Он не охватывает создание машин, но это то, что мне пришлось выяснить самостоятельно из документации библиотеки класса MachineResource.

Ниже приведен код, который я использовал для создания машин:

#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, уже немного устарело. Я рекомендую всем, кто пытается сделать это в Powershell, проверить модуль, который я начал писать для Octopus Deploy.

Модуль сайта: http://octoposh.net/

Пример добавления машины с помощью модуля: https://github.com/Dalmirog/OctoPosh/wiki/Creating-Resources

Модуль все еще находится в стадии разработки, но в последнее время я получаю довольно хорошие отзывы об этом.

С некоторой помощью и обратной связью от сообщества, я уверен, что это будет действительно хорошо:)

Мне нужно было сделать это на работе на этой неделе, вот пример кода, который вы ищете (вам понадобится 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 в частности], пользовательский интерфейс не великолепен, API не велик, и ценность, которую он добавляет в виде управления выпусками, сомнительна для тех, кто уже работает с TeamFoundation, которая предоставляет все необходимое в более доступная форма для разработчиков).

Тем не менее, люди взяли это, и это не уходит.

Обычно, когда вы добавляете агент щупальца на свой сервер, сразу после этого вы хотите зарегистрировать указанное щупальце на желаемом сервере Octopus. Я хотел бы предоставить вам код PowerShell, который я использовал для выполнения такой задачи, однако, вероятно, стоит прочитать сообщение в блоге Осьминога о том, как они создают свою армию щупальцев. Они поставляют PowerShell, и это было отличное начало, как это сделать.

Примечание. У меня было ужасное время, когда щупальца могли подключиться после регистрации на сервере Octopus. Секрет, как заставить это работать? Остановите службу щупальца и запустите ее снова.


После перечитывания вашего поста создается впечатление, что вы пытаетесь добавить щупальце на сервер Octopus снаружи или после самой установки щупальца. Вы можете уточнить? Я думаю, что как минимум, окружающей среды и кальмаров будет требованием. Попробуйте добавить кальмаров.

Другие вопросы по тегам