Skip to content

Commit 7aab7d0

Browse files
andy-krivtsovAndrey Krivtsov
andauthored
Azure DevOps pipeline updates (#1380)
* Deploy: add parameters to CI/CD yaml pipeline (namespace, kv-prefix, etc for dev/prod) * Change pipeline parameters to variables * variables macro syntax fix * fix2 * Pipeline troubleshoot: #1 * Pipeline troubleshoot: #2 * Change pipeline structure: small trigger file = vars file + stages template * typo fix in posh * names fix * Update Helm Chart, some small fixes * Updates to Ingress in Helm Chart (support www.* domain name) Co-authored-by: Andrey Krivtsov <[email protected]>
1 parent d67c77a commit 7aab7d0

File tree

11 files changed

+456
-178
lines changed

11 files changed

+456
-178
lines changed

charts/joinrpg-portal/templates/deployment.yaml

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ spec:
2222
{{- include "portal.selectorLabels" . | nindent 8 }}
2323
spec:
2424
containers:
25-
- name: {{ .Chart.Name }}
26-
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
25+
- name: "{{ .Chart.Name }}"
26+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
27+
2728
env:
2829
- name: ASPNETCORE_ENVIRONMENT
2930
value: {{ .Values.Environment }}
@@ -34,6 +35,30 @@ spec:
3435
name: {{ $fullName }}
3536
key: {{ $key }}
3637
{{- end }}
38+
39+
ports:
40+
- name: http
41+
containerPort: 80
42+
protocol: TCP
43+
44+
livenessProbe:
45+
httpGet:
46+
scheme: HTTP
47+
path: /health/live
48+
port: 80
49+
failureThreshold: 5
50+
periodSeconds: 10
51+
initialDelaySeconds: 30
52+
53+
readinessProbe:
54+
httpGet:
55+
scheme: HTTP
56+
path: /health/ready
57+
port: 80
58+
failureThreshold: 5
59+
periodSeconds: 10
60+
initialDelaySeconds: 30
61+
3762
resources:
3863
{{- toYaml .Values.resources | nindent 12 }}
3964

charts/joinrpg-portal/templates/ingress.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ metadata:
77
{{- include "portal.labels" . | nindent 4 }}
88
annotations:
99
kubernetes.io/ingress.class: nginx
10-
nginx.ingress.kubernetes.io/ssl-redirect: "false"
10+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
1111
nginx.ingress.kubernetes.io/use-regex: "false"
12+
nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
1213
cert-manager.io/cluster-issuer: {{ .Values.ingress.clusterIssuer }}
1314
spec:
1415
tls:
1516
- hosts:
16-
- {{ .Values.ingress.host }}
17+
- "{{ .Values.ingress.host }}"
18+
- "www.{{ .Values.ingress.host }}"
1719
secretName: {{ $fullName }}-tls
1820

1921
rules:
@@ -24,4 +26,4 @@ spec:
2426
backend:
2527
serviceName: {{ $fullName }}
2628
servicePort: 80
27-
29+

charts/joinrpg-portal/templates/service.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ metadata:
77
spec:
88
type: ClusterIP
99
ports:
10-
- port: 80
11-
targetPort: 80
10+
- name: http
11+
targetPort: http
12+
port: 80
1213
protocol: TCP
13-
name: http
14+
1415
selector:
1516
{{- include "portal.selectorLabels" . | nindent 4 }}

charts/joinrpg-portal/values.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ replicaCount: 1
66

77
image:
88
repository: joinrpg.azurecr.io/joinrpg.portal
9-
tag: "1.0.0"
109

1110
secrets: {}
1211

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
trigger:
2+
batch: true
3+
branches:
4+
include:
5+
- 'master'
6+
- 'containers/main'
7+
pr: none
8+
9+
variables:
10+
HELM_EXPERIMENTAL_OCI: 1
11+
12+
rgName: 'joinrpg-k8s'
13+
aksName: 'join-main'
14+
dockerfilePath: 'src/JoinRpg.Portal/Dockerfile'
15+
migrateDockerfilePath: 'src/Joinrpg.Dal.Migrate/Dockerfile'
16+
17+
azureSubscription: 'JoinRPG-subscription-connection'
18+
registryServiceConnection: 'JoinRPG-ACR-connection'
19+
imageRepository: 'joinrpg.portal'
20+
migrateImageRepository: 'joinrpg.migrate'
21+
22+
containerRegistry: 'joinrpg.azurecr.io'
23+
imageFullName: '$(containerRegistry)/$(imageRepository)'
24+
migrateFullName: '$(containerRegistry)/$(migrateImageRepository)'
25+
26+
keyVaultName: "joinrpg-k8s-kv"
27+
28+
buildVmImageName: 'ubuntu-latest'
29+
30+
stages:
31+
##===========================
32+
## Build part
33+
##===========================
34+
- stage: Build
35+
displayName: Build and Push image
36+
jobs:
37+
- job: Build
38+
displayName: Build
39+
pool:
40+
vmImage: $(buildVmImageName)
41+
steps:
42+
##===========================
43+
## Install tools
44+
##===========================
45+
- task: gitversion/setup@0
46+
displayName: Install GitVersion
47+
inputs:
48+
versionSpec: '5.x'
49+
50+
- task: HelmInstaller@1
51+
displayName: Install Helm
52+
inputs:
53+
helmVersionToInstall: latest
54+
55+
##=============================================
56+
## Get version info and create tag for image
57+
##=============================================
58+
- task: gitversion/execute@0
59+
name: version
60+
displayName: Determine Version
61+
inputs:
62+
useConfigFile: true
63+
configFilePath: 'GitVersion.yml'
64+
65+
- pwsh: |
66+
$tag = "$(GitVersion.FullSemVer)" -replace '\+','-'
67+
Write-Host "Container Image tag for this build: $tag"
68+
Write-Host "##vso[task.setvariable variable=safeImageTag;isOutput=true]$tag"
69+
displayName: "Define safe image tag"
70+
name: defineTag
71+
72+
##===============================================================
73+
## Build production version of image (full set of version tags)
74+
##===============================================================
75+
- task: Docker@2
76+
displayName: "Prod: build and push an image"
77+
condition: not(contains(variables['GitVersion.FullSemVer'], '+'))
78+
inputs:
79+
command: buildAndPush
80+
repository: $(imageRepository)
81+
dockerfile: $(dockerfilePath)
82+
containerRegistry: $(registryServiceConnection)
83+
buildContext: .
84+
tags: |
85+
latest
86+
$(GitVersion.Major)
87+
$(GitVersion.Major).$(GitVersion.Minor)
88+
$(defineTag.safeImageTag)
89+
90+
##====================================================================
91+
## Build dev version of image (on safe version tag like '1.0.1-1234')
92+
##====================================================================
93+
- task: Docker@2
94+
displayName: "Stage: build and push an image"
95+
condition: contains(variables['GitVersion.FullSemVer'], '+')
96+
inputs:
97+
command: buildAndPush
98+
repository: $(imageRepository)
99+
dockerfile: $(dockerfilePath)
100+
containerRegistry: $(registryServiceConnection)
101+
buildContext: .
102+
tags: |
103+
$(defineTag.safeImageTag)
104+
105+
##====================================================================
106+
## Build migration tool image (on safe version tag like '1.0.1-1234')
107+
##====================================================================
108+
- task: Docker@2
109+
displayName: "Build and push migration tool image"
110+
inputs:
111+
command: buildAndPush
112+
repository: $(migrateImageRepository)
113+
dockerfile: $(migrateDockerfilePath)
114+
containerRegistry: $(registryServiceConnection)
115+
buildContext: .
116+
tags: |
117+
latest
118+
$(defineTag.safeImageTag)
119+
120+
##===============================================================
121+
## Prepare (inject version) and push to registry Helm Chart
122+
##===============================================================
123+
- bash: |
124+
sed -i 's/^version: 1\.0\.0/version: $(GitVersion.FullSemVer)/g' ./charts/joinrpg-portal/Chart.yaml
125+
sed -i 's/^appVersion: 1\.0\.0/appVersion: $(defineTag.safeImageTag)/g' ./charts/joinrpg-portal/Chart.yaml
126+
127+
sed -i 's/tag: "1\.0\.0"/tag: "$(defineTag.safeImageTag)"/g' ./charts/joinrpg-portal/values.yaml
128+
129+
echo $(acrLoginPassword) | helm registry login $(containerRegistry) --username $(acrLoginName) --password-stdin
130+
helm chart save ./charts/joinrpg-portal $(containerRegistry)/charts/joinrpg-portal:$(defineTag.safeImageTag)
131+
helm chart save ./charts/joinrpg-portal $(containerRegistry)/charts/joinrpg-portal:latest
132+
helm chart push $(containerRegistry)/charts/joinrpg-portal:$(defineTag.safeImageTag)
133+
helm chart push $(containerRegistry)/charts/joinrpg-portal:latest
134+
displayName: "Publish Helm chart (Portal)"
135+
136+
##===============================================================
137+
## Publish scripts and charts as artifacts for deploy stage
138+
##===============================================================
139+
- publish: $(System.DefaultWorkingDirectory)/deployment
140+
artifact: DeployScripts
141+
- publish: $(System.DefaultWorkingDirectory)/charts
142+
artifact: Charts
143+
144+
##=================================================================================
145+
## Deployment part
146+
##=================================================================================
147+
- stage: Deploy_Dev
148+
displayName: Deploy Dev/Stage
149+
dependsOn: Build
150+
jobs:
151+
- template: templates/portal-helm-deploy-tpl.yaml
152+
parameters:
153+
name: 'Deploy_Dev'
154+
displayName: "Dev: deploy to ${{ variables.devNamespace }} namespace"
155+
ingressHostName: "${{ variables.devIngressHostName }}"
156+
keyVaultPrefix: "${{ variables.devKeyVaultPrefix }}"
157+
releaseName: 'joinrpg-portal'
158+
namespace: "${{ variables.devNamespace }}"
159+
environment: "$(devEnvironment)"
160+
161+
- stage: Deploy_Prod
162+
displayName: Deploy Production
163+
dependsOn: Deploy_Dev
164+
condition: and(succeeded(), not(contains(dependencies.Build.outputs['Build.version.GitVersion.FullSemVer'], '+')))
165+
jobs:
166+
- template: templates/portal-helm-deploy-tpl.yaml
167+
parameters:
168+
name: 'Deploy_Prod'
169+
displayName: "Prod: deploy to ${{ variables.prodNamespace }} namespace"
170+
ingressHostName: "${{ variables.prodIngressHostName }}"
171+
keyVaultPrefix: "${{ variables.prodKeyVaultPrefix }}"
172+
releaseName: 'joinrpg-portal'
173+
namespace: "${{ variables.prodNamespace }}"
174+
environment: "$(prodEnvironment)"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
trigger:
2+
batch: true
3+
branches:
4+
include:
5+
- 'master'
6+
- 'containers/main'
7+
pr: none
8+
9+
variables:
10+
- template: "portal-k8s-vars.yaml"
11+
12+
stages:
13+
- template: "templates/portal-pipeline-tpl.yaml"
14+
parameters:
15+
devNamespace: 'dev2'
16+
devIngressHostName: 'dev2.k8s.joinrpg.ru'
17+
devKeyVaultPrefix: 'dev-'
18+
devEnvironment: 'Join-k8s-dev.dev2'
19+
prodNamespace: 'dev3'
20+
prodIngressHostName: 'prod2.k8s.joinrpg.ru'
21+
prodKeyVaultPrefix: 'dev-'
22+
prodEnvironment: 'Join-k8s-dev.dev3'

0 commit comments

Comments
 (0)