Skip to content

Commit f9b9415

Browse files
committed
EES-5896 Create pipeline for Search infrastructure deployment
1 parent f939664 commit f9b9415

13 files changed

+280
-0
lines changed

infrastructure/infrastructure-pipeline.yml

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ trigger:
1111
exclude:
1212
- README.md
1313
- infrastructure/templates/public-api/*
14+
- infrastructure/templates/search/*
1415
pr: none
1516

1617
pool:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// Originally sourced from https://github.com/Azure-Samples/todo-csharp-sql/blob/main/infra/abbreviations.json.
2+
@export()
3+
var abbreviations = {
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"experimentalFeaturesEnabled": {
3+
"userDefinedTypes": true
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
name: 'Search CI pipeline'
2+
3+
trigger: none
4+
5+
parameters:
6+
- name: deployAlerts
7+
displayName: Do the Azure Monitor alerts need creating or updating?
8+
type: string
9+
values:
10+
- Yes
11+
- No
12+
default: No
13+
- name: deploySearchService
14+
displayName: Does the Search Service need creating or updating?
15+
type: string
16+
values:
17+
- Yes
18+
- No
19+
default: No
20+
- name: forceDeployToEnvironment
21+
displayName: Set to either dev, test or preprod to force a deploy to that environment from the chosen branch.
22+
type: string
23+
values:
24+
- none
25+
- dev
26+
- test
27+
- preprod
28+
default: none
29+
30+
resources:
31+
pipelines:
32+
- pipeline: MainBuild
33+
source: Explore Education Statistics
34+
trigger:
35+
branches:
36+
- dev
37+
- test
38+
- master
39+
40+
variables:
41+
- group: Search Infrastructure - Common
42+
- name: forceDeployToEnvironment
43+
value: ${{parameters.forceDeployToEnvironment}}
44+
- name: isDev
45+
value: $[or(eq(variables['forceDeployToEnvironment'], 'dev'), eq(variables['Build.SourceBranch'], 'refs/heads/dev'))]
46+
- name: isTest
47+
value: $[or(eq(variables['forceDeployToEnvironment'], 'test'), eq(variables['Build.SourceBranch'], 'refs/heads/test'))]
48+
- name: isPreProd
49+
value: $[or(eq(variables['forceDeployToEnvironment'], 'preprod'), eq(variables['Build.SourceBranch'], 'refs/heads/master'))]
50+
- name: isMaster
51+
value: $[eq(variables['Build.SourceBranch'], 'refs/heads/master')]
52+
- name: vmImageName
53+
value: ubuntu-latest
54+
- name: deployAlerts
55+
value: ${{ iif(eq(parameters.deployAlerts, 'Yes'), true, false) }}
56+
- name: deploySearchService
57+
value: ${{ iif(eq(parameters.deploySearchService, 'Yes'), true, false) }}
58+
59+
pool:
60+
vmImage: $(vmImageName)
61+
62+
stages:
63+
- template: stages/deploy.yml
64+
parameters:
65+
stageName: DeployDev
66+
condition: eq(variables.isDev, true)
67+
environment: Dev
68+
serviceConnection: $(serviceConnectionDev)
69+
bicepParamFile: dev
70+
71+
- template: stages/deploy.yml
72+
parameters:
73+
stageName: DeployTest
74+
condition: eq(variables.isTest, true)
75+
environment: Test
76+
serviceConnection: $(serviceConnectionTest)
77+
bicepParamFile: test
78+
79+
- template: stages/deploy.yml
80+
parameters:
81+
stageName: DeployPreProd
82+
condition: eq(variables.isPreProd, true)
83+
environment: Pre-Prod
84+
serviceConnection: $(serviceConnectionPreProd)
85+
bicepParamFile: preprod
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
parameters:
2+
- name: serviceConnection
3+
type: string
4+
- name: environment
5+
type: string
6+
- name: bicepParamFile
7+
type: string
8+
9+
jobs:
10+
- deployment: DeploySearchInfrastructure
11+
displayName: Deploy search infrastructure
12+
environment: ${{ parameters.environment }}
13+
variables:
14+
templateDirectory: $(Build.SourcesDirectory)/infrastructure/templates/search
15+
templateFile: $(templateDirectory)/main.bicep
16+
paramDirectory: $(templateDirectory)/parameters
17+
paramFile: $(paramDirectory)/main-${{ parameters.bicepParamFile }}.bicepparam
18+
strategy:
19+
runOnce:
20+
deploy:
21+
steps:
22+
- checkout: self
23+
24+
- task: AzureCLI@2
25+
displayName: Install Bicep
26+
inputs:
27+
azureSubscription: ${{ parameters.serviceConnection }}
28+
scriptType: bash
29+
scriptLocation: inlineScript
30+
inlineScript: az bicep install
31+
32+
- template: ../tasks/deploy-bicep.yml
33+
parameters:
34+
displayName: Validate Bicep template
35+
action: validate
36+
serviceConnection: ${{ parameters.serviceConnection }}
37+
parameterFile: $(paramFile)
38+
deploySearchService: false
39+
40+
- template: ../tasks/deploy-bicep.yml
41+
parameters:
42+
displayName: Deploy Bicep template
43+
action: create
44+
serviceConnection: ${{ parameters.serviceConnection }}
45+
parameterFile: $(paramFile)
46+
deploySearchService: $(deploySearchService)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
parameters:
2+
- name: stageName
3+
type: string
4+
- name: environment
5+
type: string
6+
- name: serviceConnection
7+
type: string
8+
- name: bicepParamFile
9+
type: string
10+
values:
11+
- dev
12+
- test
13+
- preprod
14+
- prod
15+
- name: condition
16+
type: string
17+
- name: dependsOn
18+
type: object
19+
default: []
20+
- name: trigger
21+
type: string
22+
default: automatic
23+
values:
24+
- automatic
25+
- manual
26+
27+
stages:
28+
- stage: ${{ parameters.stageName }}
29+
displayName: Deploy ${{ parameters.environment }}
30+
dependsOn: ${{ parameters.dependsOn }}
31+
trigger: ${{ parameters.trigger }}
32+
# Prevent this stage from running in parallel with the same deploy stage in other
33+
# ongoing runs of this pipeline. Instead, multiple executions of this stage will
34+
# be queued and run sequentially in the order that their pipelines were triggered.
35+
lockBehavior: sequential
36+
condition: ${{ parameters.condition }}
37+
variables:
38+
- group: Search Infrastructure - ${{ parameters.environment }}
39+
- name: infraDeployName
40+
value: SearchInfrastructure$(Build.BuildNumber)
41+
jobs:
42+
- template: ../jobs/deploy-infrastructure.yml
43+
parameters:
44+
serviceConnection: ${{ parameters.serviceConnection }}
45+
environment: ${{ parameters.environment }}
46+
bicepParamFile: ${{ parameters.bicepParamFile }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
parameters:
2+
- name: action
3+
type: string
4+
default: create
5+
values:
6+
- create
7+
- validate
8+
- name: displayName
9+
type: string
10+
- name: serviceConnection
11+
type: string
12+
- name: parameterFile
13+
type: string
14+
- name: deploySearchService
15+
type: string
16+
17+
steps:
18+
- task: AzureCLI@2
19+
displayName: ${{ parameters.displayName }}
20+
inputs:
21+
azureSubscription: ${{ parameters.serviceConnection }}
22+
scriptType: bash
23+
scriptLocation: inlineScript
24+
addSpnToEnvironment: true
25+
inlineScript: |
26+
set -e
27+
28+
az deployment group ${{ parameters.action }} \
29+
--name $(infraDeployName) \
30+
--resource-group $(resourceGroupName) \
31+
--template-file $(templateFile) \
32+
--parameters ${{ parameters.parameterFile }} \
33+
--parameters \
34+
subscription='$(subscription)' \
35+
resourceTags='$(resourceTags)' \
36+
deploySearchService=${{ parameters.deploySearchService }}
+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { abbreviations } from 'abbreviations.bicep'
2+
3+
@description('Environment : Subscription name e.g. s101d01. Used as a prefix for created resources.')
4+
param subscription string = ''
5+
6+
@description('Environment : Specifies the location in which the Azure resources should be deployed.')
7+
param location string = resourceGroup().location
8+
9+
@description('Tagging : Environment name e.g. Development. Used for tagging resources created by this infrastructure pipeline.')
10+
param environmentName string
11+
12+
@description('Tagging : Used for tagging resources created by this infrastructure pipeline.')
13+
param resourceTags {
14+
CostCentre: string
15+
Department: string
16+
Solution: string
17+
ServiceOwner: string
18+
CreatedBy: string
19+
DeploymentRepoUrl: string
20+
}?
21+
22+
@description('Tagging : Date Provisioned. Used for tagging resources created by this infrastructure pipeline.')
23+
param dateProvisioned string = utcNow('u')
24+
25+
@description('Do Azure Monitor alerts need creating or updating?')
26+
param deployAlerts bool = false
27+
28+
@description('Does the Search Service need creating or updating?')
29+
param deploySearchService bool = false
30+
31+
var tagValues = union(resourceTags ?? {}, {
32+
Environment: environmentName
33+
DateProvisioned: dateProvisioned
34+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
using '../main.bicep'
2+
3+
// Environment Params
4+
param environmentName = 'Development'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
using '../main.bicep'
2+
3+
// Environment Params
4+
param environmentName = 'Pre-Production'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
using '../main.bicep'
2+
3+
// Environment Params
4+
param environmentName = 'Production'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
using '../main.bicep'
2+
3+
// Environment Params
4+
param environmentName = 'Test'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@export()
2+
type ResourceNames = {
3+
existingResources: {
4+
}
5+
search: {
6+
}
7+
}

0 commit comments

Comments
 (0)