-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCreateProjectsWithArc.ps1
121 lines (106 loc) · 4.28 KB
/
CreateProjectsWithArc.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Define working variables
$octopusURL = ""
$octopusAPIKey = ""
$header = @{ "X-Octopus-ApiKey" = $octopusAPIKey }
$spaceName = "default"
$projectName = "Project"
$projectDescription = "MyDescription"
$projectGroupName = "Default project group"
$lifecycleName = "Default lifecycle"
$numberOfProjectsToCreate =
$i=1
# Get space
$space = (Invoke-RestMethod -Method Get -Uri "$octopusURL/api/spaces/all" -Headers $header) | Where-Object {$_.Name -eq $spaceName}
# Get project group
$projectGroup = (Invoke-RestMethod -Method Get "$octopusURL/api/$($space.Id)/projectgroups/all" -Headers $header) | Where-Object {$_.Name -eq $projectGroupName}
# Get Lifecycle
$lifeCycle = (Invoke-RestMethod -Method Get "$octopusURL/api/$($space.Id)/lifecycles/all" -Headers $header) | Where-Object {$_.Name -eq $lifecycleName}
for(;$i -le $numberOfProjectsToCreate;$i++)
{
# Create project json payload
$jsonPayloadProject = @{
Name = "$projectName$($i)"
Description = $projectDescription
ProjectGroupId = $projectGroup.Id
LifeCycleId = $lifeCycle.Id
}
# Create project
Invoke-RestMethod -Method Post -Uri "$octopusURL/api/$($space.Id)/projects" -Body ($jsonPayloadProject | ConvertTo-Json -Depth 10) -Headers $header
# Get Project
$project = (Invoke-RestMethod -Method Get -Uri "$octopusURL/api/$($space.Id)/projects/all" -Headers $header) | Where-Object {$_.Name -eq "$projectName$($i)"}
# Write-Host $project.Name $project.Id
# Get Deployment Process
$deploymentProcess = (Invoke-RestMethod -Method Get -Uri "$octopusURL/api/$($space.Id)/projects/$($project.Id)/deploymentprocesses" -Headers $header)
# Write-Host $deploymentProcess
# Create Steps
$steps = @(@{
Name = "Run a script"
PackageRequirement = "LetOctopusDecide"
Properties = @{}
Condition = "Success"
StartTrigger = "StartAfterPrevious"
Actions = @(
@{
Name = "Run a script"
ActionType = "Octopus.Script"
Notes=$null
IsDisabled = $false
CanBeUsedForProjectVersioning = $true
IsRequired = $false
WorkerPoolId = ""
WorkerPoolVariable = ""
Container = @{
"FeedId" = $null
"Image" = $null
}
Environments = @()
ExcludedEnvironments = @()
Channels = @()
TenantTags = @()
Packages = @(@{
Id=$null
PackageId="Hello${i}World"
FeedId="feeds-builtin"
AcquisitionLocation="Server"
Properties=@{
SelectionMode="immediate"
}
})
Properties = @{
'Octopus.Action.RunOnServer' = "true"
'Octopus.Action.EnabledFeatures' = ""
'Octopus.Action.Script.ScriptSource' = "Package"
'Octopus.Action.Script.ScriptFileName' = "SimpleHello.ps1"
'Octopus.Action.Script.Syntax' = $null
'Octopus.Action.Script.ScriptBody' = $null
}
}
)
})
# Update Steps object
$deploymentProcess.Steps = $steps
# Push Steps
Invoke-RestMethod -Method Put -Uri "$octopusURL/api/$($space.Id)/projects/$($project.Id)/deploymentprocesses" -Body ($deploymentProcess | ConvertTo-Json -Depth 10) -Headers $header
# Get Channel
$channels = (Invoke-RestMethod -Method Get -Uri "$octopusURL/api/$($space.Id)/projects/$($project.Id)/channels" -Headers $header)
$defaultChannel = @{}
foreach ($channel in $channels.Items) {
if ($channel.IsDefault = $true) {
$defaultChannel = $channel
break
}
}
# Turn ARC on
$project.AutoCreateRelease = $true
$project.ReleaseCreationStrategy.ReleaseCreationPackage = @{DeploymentAction="Run a script"}
$project.ReleaseCreationStrategy.ChannelId = $defaultChannel.Id
$project.VersioningStrategy = @{
Template = ""
DonorPackage = @{
DeploymentAction = "Run a script"
}
DonorPackageStepId = "Run a script"
}
# Update Project
Invoke-RestMethod -Method Put -Uri "$octopusURL/api/$($space.Id)/projects/$($project.id)" -Body ($project | ConvertTo-Json -Depth 10) -Headers $header
}