/
deploy-application.yml
103 lines (86 loc) · 3.98 KB
/
deploy-application.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
parameters:
- name: environment
default: 'dev'
stages:
- stage: ${{ parameters.environment }}
variables:
- name: 'environment'
value: ${{ parameters.environment }}
jobs:
- deployment: terraform_deploy
pool:
vmImage: 'ubuntu-latest'
environment: 'fm-geolocation-${{ parameters.environment }}'
strategy:
runOnce:
deploy:
steps:
- download: current
displayName: 'Download terraform source artifact'
artifact: terraform
- task: TerraformInstaller@0
displayName: 'Install terraform'
inputs:
terraformVersion: '$(TerraformVersion)'
- task: TerraformTaskV2@2
displayName: 'Terraform: azurerm init'
inputs:
workingDirectory: '$(Pipeline.Workspace)/terraform'
backendServiceArm: '$(AzSubscription)'
backendAzureRmResourceGroupName: '$(AzTerraformResourceGroup)'
backendAzureRmStorageAccountName: '$(AzTerraformStorageAccount)'
backendAzureRmContainerName: terraform
backendAzureRmKey: '${{ parameters.environment }}-terraform.tfstate'
- task: TerraformTaskV2@2
displayName: 'Terraform : azurerm plan'
inputs:
command: plan
workingDirectory: '$(Pipeline.Workspace)/terraform'
commandOptions: '-var="environment=$(environment)"'
environmentServiceNameAzureRM: '$(AzSubscription)'
- task: TerraformTaskV2@2
name: terraform_validate_and_apply
displayName: 'Terraform : azurerm validate and apply'
inputs:
command: apply
workingDirectory: '$(Pipeline.Workspace)/terraform'
commandOptions: '-var="environment=$(environment)"'
environmentServiceNameAzureRM: '$(AzSubscription)'
- powershell: |
$terraformOutput = Get-Content "$(terraform_validate_and_apply.jsonOutputVariablesPath)" | ConvertFrom-Json
$terraformOutput | Get-Member -MemberType NoteProperty | % { $o = $terraformOutput.($_.Name); Write-Host "##vso[task.setvariable variable=$($_.Name);isoutput=true;issecret=$($o.sensitive)]$($o.value)" }
name: terraform_output
displayName: 'Read terraform output vars'
- deployment: 'funcapp_deploy'
dependsOn: 'terraform_deploy'
pool:
vmImage: 'windows-latest'
environment: 'fm-geolocation-${{ parameters.environment }}'
variables:
- name: appdata_storage_connection
value: $[ dependencies.terraform_deploy.outputs['terraform_deploy.terraform_output.appdata_storage_connection'] ]
- name: appinsights_instrumentation_key
value: $[ dependencies.terraform_deploy.outputs['terraform_deploy.terraform_output.instrumentation_key'] ]
strategy:
runOnce:
deploy:
steps:
- download: current
displayName: 'Download funcapp artifact'
artifact: funcapp
- task: AzureKeyVault@1
inputs:
azureSubscription: '$(AzSubscription)'
keyVaultName: 'fm-geolocation-${{ parameters.environment }}'
secretsFilter: '*'
- task: AzureFunctionApp@1
displayName: 'Azure Function App Deploy: FM-GeoLocation-FuncApp-$(Environment)'
inputs:
azureSubscription: '$(AzSubscription)'
appType: functionAppLinux
appName: 'geolocation-funcapp-$(environment)'
deployToSlotOrASE: true
resourceGroupName: 'fm-geolocation-$(environment)'
package: '$(Pipeline.Workspace)/funcapp/FM.GeoLocation.FuncApp.zip'
runtimeStack: 'DOCKER|microsoft/azure-functions-dotnet-core2.0:2.0'
AppSettings: '-APPINSIGHTS_INSTRUMENTATIONKEY "$(appinsights_instrumentation_key)" -AppData:StorageConnectionString "$(appdata_storage_connection)" -MaxMind:UserId "$(maxmind-userid)" -MaxMind:ApiKey "$(maxmind-apikey)"'