-
Notifications
You must be signed in to change notification settings - Fork 3
/
ModuleDeploy-pipeline.yml
115 lines (103 loc) · 5.06 KB
/
ModuleDeploy-pipeline.yml
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
# Dependent modules of this DSC composite must already exist!
# This means that the "Create-AutomationAccount.ps1" must have been run successfully
variables:
storageAccountName: "jeffmpnstorage"
resourcegroupName: "mpn-mgmt" # Used for the storage account where we place the module as blob
automationresourcegroupName: "githubtest-rg"
automationAccountName: "automation-july2020-2"
serviceConnectionName: "DevOps-to-JeffMPN"
azureLocation: "EastUS2"
trigger:
branches:
include:
- master
- dev
paths:
include:
- InfraBuildDSC/*
#exclude:
#- docs/README.md
pool:
vmImage: 'windows-latest'
steps:
# Zip up the file
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: './InfraBuildDSC'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/InfraBuildDSC.zip'
replaceExistingArchive: true
# Copy module to Blob Container
- task: AzureFileCopy@4
displayName: "Upload latest modules"
inputs:
sourcePath: "$(Build.ArtifactStagingDirectory)/InfraBuildDSC.zip"
azureSubscription: $(serviceConnectionName) #This is the devops service connection name
destination: azureBlob
storage: $(storageAccountName)
containerName: "modules"
# Create Automation Account if not exists already
- task: AzurePowerShell@5
displayName: "Create Automation Account"
inputs:
azureSubscription: $(serviceConnectionName) #This is the devops service connection name
ErrorActionPreference: 'Stop'
FailOnStandardError: true
ScriptType: 'inlineScript'
azurePowerShellVersion: 'LatestVersion'
inline: |
# Create resource group just for Azure Automation if not exists
$rgtest = Get-AzResourceGroup $(automationresourcegroupName) -ErrorAction Ignore
if (-not $rgtest) {
New-AzResourceGroup -Name $(automationresourcegroupName) -Location $(azureLocation)
Write-Host "$(automationresourcegroupName) has been created."
Start-Sleep -s 25 # wait 25 seconds so Automation Account can be created
}
else {
Write-Host "$(automationresourcegroupName) exists already."
}
# Create Azure Automation account if not exists
$aatest = Get-AzAutomationAccount -resourceGroupName $(automationresourcegroupName) -Name $(automationAccountName) -ErrorAction Ignore
if (-not $aatest) {
New-AzAutomationAccount -ResourceGroupName $(automationresourcegroupName) -Location $(azureLocation) -Name $(automationAccountName) | out-null
Write-Host "$(automationAccountName) has been created."
}
else {
Write-Host "$(automationAccountName) exists already."
}
# Import the module to Azure Automation
- task: AzurePowerShell@5
displayName: "Upload Module to Automation Account"
inputs:
azureSubscription: $(serviceConnectionName) #This is the devops service connection name
ErrorActionPreference: 'Stop'
FailOnStandardError: true
ScriptType: 'inlineScript'
azurePowerShellVersion: 'LatestVersion'
inline: |
$moduleName = "InfraBuildDSC"
$accountKey = (Get-AzStorageAccountKey -ResourceGroupName $(resourcegroupName) -Name $(storageAccountName))[0].Value
$ctx = New-AzStorageContext -StorageAccountName $(StorageAccountName) -StorageAccountKey $accountKey
Write-Information "Generate URL and SAS Token" -InformationAction Continue
#$moduleUri = "https://$(StorageAccountName).blob.core.windows.net/modules/$($moduleName).zip"
$blob = Get-AzStorageBlob -Container "modules" -Blob "$moduleName.zip" -context $ctx
$moduleUri = $blob.ICloudBlob.Uri.AbsoluteUri
$SASToken = New-AzStorageBlobSASToken -CloudBlob $blob.ICloudBlob -Context $ctx -FullUri -ExpiryTime (Get-Date).AddMinutes(5) -Permission r
Write-Information "$($moduleName) is being imported" -InformationAction Continue
$importmodule = New-AzAutomationModule $(automationresourcegroupName) -AutomationAccountName $(automationAccountName) -Name "$($moduleName)" -ContentLink $SASToken
while (($importmodule.ProvisioningState -eq "Creating") -or ($importmodule.ProvisioningState -eq "ContentValidated") -or ($importmodule.ProvisioningState -eq "ConnectionTypeImported") -or ($importmodule.ProvisioningState -eq "ModuleDataStored")) {
Write-Information "Import check shows it isn't done yet." -InformationAction Continue
$importmodule = Get-AzAutomationModule $(automationresourcegroupName) -AutomationAccountName $(automationAccountName) -Name "$($moduleName)"
Write-Information "Current state of module: $($importmodule.ProvisioningState)" -InformationAction Continue
Start-Sleep -Seconds 25
}
$importmodule
if ($importmodule.ProvisioningState -ne "Succeeded")
{
Write-Information "$($moduleName) module import failed with status: $($importmodule.ProvisioningState)" -InformationAction Continue
Write-Host "##vso[task.complete result=Failed;]DONE"
exit 1
} else {
Write-Information "$($moduleName) module import completed successfully." -InformationAction Continue
}