This script demonstrates how to programmatically add a simple PowerShell script to a runbook.
Usage
Provide values for the following:
- Octopus URL
- Octopus API Key
- Name of the space to use
- Name of the runbook
- Source PowerShell script
- Optional Target role to run the script against.
Note: The source script provided to Octopus must be properly escaped.
Script
C#
// If using .net Core, be sure to add the NuGet package of System.Security.Permissions
#r "path\to\Octopus.Client.dll"
using Octopus.Client;
using Octopus.Client.Model;
// Declare working variables
var octopusURL = "https://your-octopus-url";
var octopusAPIKey = "API-YOUR-KEY";
var spaceName = "default";
var runbookName = "MyRunbook";
var stepName = "My new step";
var role = "target-role";
var scriptToRun = "Write-Host \"Hello World\" ";
// Create repository object
var endpoint = new OctopusServerEndpoint(octopusURL, octopusAPIKey);
var repository = new OctopusRepository(endpoint);
var client = new OctopusClient(endpoint);
try
{
// Get space
var space = repository.Spaces.FindByName(spaceName);
var repositoryForSpace = client.ForSpace(space);
// Get runbook
var runbook = repositoryForSpace.Runbooks.FindOne(n => n.Name == runbookName);
var processId = runbook.RunbookProcessId;
var runbookProcess = repositoryForSpace.RunbookProcesses.Get(processId);
// Check for existing step.
if (runbookProcess.Steps.Any(s => s.Name == stepName))
{
Console.WriteLine("Existing step present with same name, please check and try again");
return;
}
// Create PowerShell script step
var step = new Octopus.Client.Model.DeploymentStepResource
{
Name = stepName,
Condition = DeploymentStepCondition.Success,
PackageRequirement = DeploymentStepPackageRequirement.LetOctopusDecide,
StartTrigger = DeploymentStepStartTrigger.StartAfterPrevious
};
var stepAction = new DeploymentActionResource
{
ActionType = "Octopus.Script",
Condition = DeploymentActionCondition.Success,
Name = stepName
};
var runOnServer = false;
if(!string.IsNullOrWhiteSpace(role)) {
runOnServer = true;
}
// Add step action properties
stepAction.Properties.Add("Octopus.Action.RunOnServer", new Octopus.Client.Model.PropertyValueResource(runOnServer.ToString()));
stepAction.Properties.Add("Octopus.Action.Script.ScriptSource", new Octopus.Client.Model.PropertyValueResource("Inline"));
stepAction.Properties.Add("Octopus.Action.Script.ScriptBody", new Octopus.Client.Model.PropertyValueResource(scriptToRun));
stepAction.Properties.Add("Octopus.Action.Script.Syntax", new Octopus.Client.Model.PropertyValueResource("PowerShell"));
// optional target role
if(!string.IsNullOrWhiteSpace(role)) {
step.Properties.Add("Octopus.Action.TargetRoles", new Octopus.Client.Model.PropertyValueResource(role));
}
// Add step to Actions
step.Actions.Add(stepAction);
// Add PowerShell script step to process
runbookProcess.Steps.Add(step);
// Update runbook process
repositoryForSpace.RunbookProcesses.Modify(runbookProcess);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
return;
}
Help us continuously improve
Please let us know if you have any feedback about this page.
Page updated on Sunday, January 1, 2023