-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathapigee-deployment.yml
More file actions
245 lines (240 loc) · 9.56 KB
/
apigee-deployment.yml
File metadata and controls
245 lines (240 loc) · 9.56 KB
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
parameters:
- name: apigee_deployments
displayName: List of apigee deployments
type: object
default: []
- name: service_name
displayName: Service Name
type: string
- name: short_service_name
displayName: Shortened version of the service name, usually initials
type: string
- name: service_base_path
displayName: Service Base Path
type: string
- name: proxy_path
displayName: Path to proxy directory from /proxies at the project root (set empty to skip proxy deployment)
type: string
default: live
- name: deploy_review_sandbox
displayName: Deploy review sandbox?
type: boolean
default: false
- name: fully_qualified_service_name
displayName: Supply a custom name for your release (only valid for release pipeline)
type: string
default: ''
- name: ping
displayName: Toggle ping endpoint avaliablility
type: boolean
default: true
- name: hosted_target_connection_path_suffix
type: string
default: ''
- name: hosted_target_healthcheck_suffix
type: string
default: '/_status'
- name: jinja_templates
type: object
displayName: Key/values for custom jinja templating
default: []
- name: enable_monitoring
type: boolean
displayName: Whether monitoring is needed
default: true
- name: enable_status_monitoring
type: boolean
displayName: Temporary flag for adding a _status endpoint to service discovery
default: true
- name: secret_file_ids
displayName: List of additional AWS Secrets Manager multiline Secret IDs
type: object
default: []
- name: secret_ids
displayName: List of additional AWS Secrets Manager Secret IDs
type: object
default: []
- name: config_ids
displayName: List of additional AWS SSM Config IDs
type: object
default: []
- name: pre_template
displayName: Steps to run prior to templating
type: stepList
default: []
- name: post_template
displayName: Steps to run after templating
type: stepList
default: []
- name: pre_deploy
displayName: Steps to run prior to templating
type: stepList
default: []
- name: post_deploy
displayName: Steps to run after templating
type: stepList
default: []
- name: prod_requires_approval
displayName: Requires manual approval
type: boolean
default: true
- name: prod_producer_approval
displayName: Requires producer manual approval
type: boolean
default: false
- name: manual_approval_env
displayName: Custom manual approval env overwrite
type: string
default: 'manual-approval'
- name: _scoped_pipeline_vars
type: object
displayName: All the pipeline parameters which support per-environment scoping.
default:
- service_name
- short_service_name
- service_base_path
- hosted_target_connection_path_suffix
- hosted_target_healthcheck_suffix
- product_display_name
- product_description
- fully_qualified_service_name
- jinja_templates
- proxy_path
- enable_monitoring
- enable_status_monitoring
- pre_template
- post_template
- pre_deploy
- post_deploy
- make_spec_visible
- secret_file_ids
- secret_ids
- config_ids
- name: _scoped_step_list_vars
type: object
displayName: Subset of scoped pipeline variables that are of type stepList
default:
- pre_template
- post_template
- pre_deploy
- post_deploy
- name: _pipeline_defaults
type: object
default:
- name_suffix: '-Pull-Request'
deploy_template: pr.yml
environments:
- internal-dev
- internal-dev-sandbox
- name_suffix: '-Release'
deploy_template: release.yml
environments:
- internal-dev
- internal-dev-sandbox
- internal-qa
- internal-qa-sandbox
- ref
- int
- sandbox
- prod
# Deprecated pipeline variables.
- name: product_display_name
default: 'DEPRECATED'
- name: product_description
default: 'DEPRECATED'
- name: portal_api_requires_callback_url
default: 'DEPRECATED'
- name: make_spec_visible
default: 'DEPRECATED'
- name: spec_file
default: 'DEPRECATED'
- name: python_version
type: string
default: "3.9"
- name: agent_pool
type: string
default: "AWS-ECS"
extends:
template: ./deploy-stages.yml
parameters:
${{ each param in parameters }}:
${{ if notIn(param.key, 'apigee_deployments', '_scoped_pipeline_vars', '_scoped_step_list_vars', '_pipeline_defaults') }}:
${{ if not(contains(join(',', parameters._scoped_pipeline_vars), param.key)) }}:
${{ param.key }}: ${{ param.value }}
${{ each pipeline_default in parameters._pipeline_defaults }}:
${{ if endsWith(variables['Build.DefinitionName'], pipeline_default.name_suffix) }}:
deploy_template: ${{ pipeline_default.deploy_template }}
# If apigee_deployments was specified, accept it regardless of which pipeline we are in
${{ if gt(length(parameters.apigee_deployments), 0) }}:
apigee_deployments:
- ${{ each apigee_deployment in parameters.apigee_deployments }}:
- ${{ if and(eq(apigee_deployment.environment, 'prod'), parameters.prod_requires_approval) }}:
- environment: manual-approval
stage_name: manual_approval
depends_on: []
manual_approval_prod: true
producer_approval: ${{ parameters.prod_producer_approval }}
${{ each var in parameters._scoped_pipeline_vars }}:
${{ var }}: ${{ parameters[var] }}
- ${{ each apigee_deployment in parameters.apigee_deployments }}:
- environment: ${{ apigee_deployment.environment }}
stage_name: ${{ replace(coalesce (apigee_deployment.stage_name, apigee_deployment.environment), '-', '_') }}
${{ each var in parameters._scoped_pipeline_vars }}:
${{ if apigee_deployment[var] }}:
${{ if containsValue(parameters._scoped_step_list_vars, var) }}:
${{ var }}:
- ${{ each step in apigee_deployment[var] }}:
${{ each pair in step }}:
# Assume scoped template paths are
# relative to azure/ in @self repo
${{ if and(eq(pair.key, 'template'), not(contains(pair.value, '@'))) }}:
${{ pair.key }}: azure/${{ pair.value }}@self
${{ if not(and(eq(pair.key, 'template'), not(contains(pair.value, '@')))) }}:
${{ pair.key }}: ${{ pair.value }}
${{ if not(containsValue(parameters._scoped_step_list_vars, var)) }}:
${{ var }}: ${{ apigee_deployment[var] }}
${{ if not(apigee_deployment[var]) }}:
${{ var }}: ${{ parameters[var] }}
${{ if not(apigee_deployment.depends_on) }}:
${{ if or(startsWith(apigee_deployment.environment, 'internal-'), eq(apigee_deployment.environment, 'manual-approval')) }}:
depends_on: []
${{ if and(not(startsWith(apigee_deployment.environment, 'internal-')), ne(apigee_deployment.environment, 'manual-approval')) }}:
depends_on:
- internal_qa
- ${{ if and(eq(apigee_deployment.environment, 'prod'), parameters.prod_requires_approval) }}:
- manual_approval
${{ if apigee_deployment.depends_on }}:
depends_on:
- ${{ each depend_on in apigee_deployment.depends_on }}:
- ${{ depend_on }}
- ${{ if and(eq(apigee_deployment.environment, 'prod'), parameters.prod_requires_approval) }}:
- manual_approval
# otherwise set the default parameters for this pipeline
${{ if eq(0, length(parameters.apigee_deployments)) }}:
apigee_deployments:
- ${{ each environment in pipeline_default.environments }}:
- ${{ if notIn(environment, 'internal-dev-sandbox') }}:
- environment: ${{ environment }}
stage_name: ${{ replace(environment, '-', '_') }}
${{ if startsWith(environment, 'internal-') }}:
depends_on: []
${{ if not(startsWith(environment, 'internal-')) }}:
depends_on:
- internal_qa
- internal_qa_sandbox
- ${{ if and(parameters.prod_requires_approval, eq(environment, 'prod')) }}:
- manual_approval
${{ each var in parameters._scoped_pipeline_vars }}:
${{ var }}: ${{ parameters[var] }}
- ${{ if parameters.deploy_review_sandbox }}:
- environment: internal-dev-sandbox
stage_name: internal_dev_sandbox
depends_on: []
${{ each var in parameters._scoped_pipeline_vars }}:
${{ var }}: ${{ parameters[var] }}
- ${{ if and(parameters.prod_requires_approval, containsValue(pipeline_default.environments, 'prod')) }}:
- environment: manual-approval
stage_name: manual_approval
depends_on: []
${{ each var in parameters._scoped_pipeline_vars }}:
${{ var }}: ${{ parameters[var] }}