Создайте компьютер 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 снаружи или после самой установки щупальца. Вы можете уточнить? Я думаю, что как минимум, окружающей среды и кальмаров будет требованием. Попробуйте добавить кальмаров.