Skip to content

Commit 5c46f4b

Browse files
chore: Refactor Azure pipeline configurations to use templates
- Updated multiple Azure pipeline YAML files to utilize a common deployment template for Kubernetes jobs, improving maintainability and consistency across deployments. - Added connection string variables for each environment to streamline secret management. - Removed redundant deployment steps from individual pipeline files, consolidating logic into the template.
1 parent 0735b2b commit 5c46f4b

File tree

8 files changed

+292
-736
lines changed

8 files changed

+292
-736
lines changed

deployments/azure-pipelines/Etablissment-Nizar-azure-pipeline.yml

Lines changed: 11 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -9,106 +9,27 @@ pool:
99

1010
variables:
1111
- group: silkroad-prod
12-
12+
- name: connectionString
13+
value: $(Connection_String_EtablissementNizar)
1314
- name: kubeNamespace
1415
value: silkroad-prod-societe
15-
1616
- name: deploymentApiName
1717
value: silkroad-api-societe
18-
1918
- name: deploymentWebappName
2019
value: silkroad-webapp-societe
21-
2220
- name: manifestPath
2321
value: src/deployments/etablissementNizar-deploy.yaml
2422

2523
stages:
2624
- stage: Deploy
2725
displayName: Deploy Etablissement Nizar
2826
jobs:
29-
- job: DeployJob
30-
displayName: K8s Deployment
31-
steps:
32-
33-
# --------------------------------------------------
34-
# 0️⃣ Check Cluster Access
35-
# --------------------------------------------------
36-
- script: |
37-
echo "🔍 Checking cluster access"
38-
kubectl version --client
39-
kubectl cluster-info
40-
displayName: 'Check Kubernetes Cluster'
41-
42-
# --------------------------------------------------
43-
# 1️⃣ Ensure DB Connection Secret
44-
# --------------------------------------------------
45-
- script: |
46-
echo "🔐 Creating / Updating DB Secret (Etablissement Nizar)"
47-
48-
kubectl create secret generic silkroad-connection-secret \
49-
-n $(kubeNamespace) \
50-
--from-literal=ConnectionStrings__DefaultConnection="$(Connection_String_EtablissementNizar)" \
51-
--dry-run=client -o yaml | kubectl apply -f -
52-
displayName: 'Ensure DB Secret'
53-
54-
# --------------------------------------------------
55-
# 1️⃣ bis – Preflight Kubernetes Access
56-
# --------------------------------------------------
57-
- script: |
58-
echo "👤 User:"
59-
whoami
60-
61-
echo "📂 Kubeconfig:"
62-
ls -la ~/.kube || true
63-
64-
echo "🔍 Nodes:"
65-
kubectl get nodes -o wide
66-
displayName: 'Preflight: Kubernetes Access Check'
67-
68-
# --------------------------------------------------
69-
# 2️⃣ Apply Kubernetes Manifests
70-
# --------------------------------------------------
71-
- script: |
72-
echo "🚀 Applying Kubernetes manifests"
73-
kubectl apply -f $(manifestPath)
74-
displayName: 'Apply Manifests'
75-
76-
# --------------------------------------------------
77-
# 3️⃣ Update Images
78-
# --------------------------------------------------
79-
- script: |
80-
echo "🔄 Updating images"
81-
82-
kubectl set image deployment/$(deploymentApiName) \
83-
api=tunnetcom/silkroad:latest-api \
84-
-n $(kubeNamespace)
85-
86-
kubectl set image deployment/$(deploymentWebappName) \
87-
webapp=tunnetcom/silkroad:latest-webapp \
88-
-n $(kubeNamespace)
89-
displayName: 'Update Images'
90-
91-
# --------------------------------------------------
92-
# 4️⃣ Force Rollout
93-
# --------------------------------------------------
94-
- script: |
95-
echo "🔄 Forcing rollout"
96-
97-
kubectl rollout restart deployment/$(deploymentApiName) -n $(kubeNamespace)
98-
kubectl rollout restart deployment/$(deploymentWebappName) -n $(kubeNamespace)
99-
displayName: 'Force Rollout'
100-
101-
# --------------------------------------------------
102-
# 5️⃣ Wait for Rollout
103-
# --------------------------------------------------
104-
- script: |
105-
kubectl rollout status deployment/$(deploymentApiName) -n $(kubeNamespace) --timeout=300s
106-
kubectl rollout status deployment/$(deploymentWebappName) -n $(kubeNamespace) --timeout=300s
107-
displayName: 'Wait for Rollout'
108-
109-
# --------------------------------------------------
110-
# 6️⃣ Verify
111-
# --------------------------------------------------
112-
- script: |
113-
kubectl get pods -n $(kubeNamespace) -o wide
114-
displayName: 'Verify Deployment'
27+
- template: templates/deploy-k8s-job.yml
28+
parameters:
29+
stageDisplayName: Deploy Etablissement Nizar
30+
kubeNamespace: $(kubeNamespace)
31+
deploymentApiName: $(deploymentApiName)
32+
deploymentWebappName: $(deploymentWebappName)
33+
manifestPath: $(manifestPath)
34+
runPreflightCheck: true
35+
forceImagePullPatch: false

deployments/azure-pipelines/azure-pipelines-1.yml

Lines changed: 13 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ pool:
1010
- Agent.Name -equals ubuntu-self-hosted-mourouj
1111

1212
variables:
13-
- group: silkroad-mourouj # Contains Connection_String_Mourouj
13+
- group: silkroad-mourouj
14+
- name: connectionString
15+
value: $(Connection_String_Mourouj)
1416
- name: kubeNamespace
1517
value: silkroad-prod
1618
- name: deploymentApiName
@@ -24,122 +26,13 @@ stages:
2426
- stage: Deploy
2527
displayName: Deploy to Mourouj Kubernetes
2628
jobs:
27-
- job: DeployJob
28-
displayName: K8s Deployment
29-
steps:
30-
31-
# --------------------------------------------------
32-
# 0️⃣ Check Cluster Access
33-
# --------------------------------------------------
34-
- script: |
35-
echo "🔍 Checking cluster access"
36-
kubectl version --client
37-
kubectl cluster-info
38-
displayName: 'Check Kubernetes Cluster'
39-
40-
# --------------------------------------------------
41-
# 1️⃣ Ensure DB Connection Secret
42-
# --------------------------------------------------
43-
- script: |
44-
echo "🔐 Ensuring DB secret exists for Mourouj"
45-
kubectl create secret generic silkroad-connection-secret \
46-
-n $(kubeNamespace) \
47-
--from-literal=ConnectionStrings__DefaultConnection="$(Connection_String_Mourouj)" \
48-
--dry-run=client -o yaml | kubectl apply -f -
49-
displayName: 'Ensure DB Secret'
50-
env:
51-
Connection_String_Mourouj: $(Connection_String_Mourouj)
52-
53-
54-
# --------------------------------------------------
55-
# 2️⃣ Apply Kubernetes Manifests
56-
# --------------------------------------------------
57-
- script: |
58-
echo "🚀 Applying Kubernetes manifests"
59-
kubectl apply -f $(manifestPath)
60-
echo "✅ Manifests applied"
61-
displayName: 'Apply Manifests'
62-
63-
# --------------------------------------------------
64-
# 3️⃣ Update Deployment Images to Latest Tags
65-
# --------------------------------------------------
66-
- script: |
67-
echo "🔄 Updating deployment images to latest tags..."
68-
69-
echo "📝 Setting API image to: tunnetcom/silkroad:latest-api"
70-
kubectl set image deployment/$(deploymentApiName) \
71-
api=tunnetcom/silkroad:latest-api \
72-
-n $(kubeNamespace)
73-
74-
echo "📝 Setting WebApp image to: tunnetcom/silkroad:latest-webapp"
75-
kubectl set image deployment/$(deploymentWebappName) \
76-
webapp=tunnetcom/silkroad:latest-webapp \
77-
-n $(kubeNamespace)
78-
79-
echo "✅ Image tags updated"
80-
displayName: 'Update Deployment Images'
81-
82-
# --------------------------------------------------
83-
# 4️⃣ Force Image Refresh (rollout)
84-
# --------------------------------------------------
85-
- script: |
86-
echo "🔄 Forcing rollout to pull latest images"
87-
88-
kubectl rollout restart deployment/$(deploymentApiName) -n $(kubeNamespace)
89-
kubectl rollout restart deployment/$(deploymentWebappName) -n $(kubeNamespace)
90-
91-
TIMESTAMP=$(date +%s)
92-
kubectl patch deployment $(deploymentApiName) \
93-
-n $(kubeNamespace) \
94-
-p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"ci-build\":\"$(Build.BuildId)\",\"force-image-pull\":\"$(Build.BuildId)-$TIMESTAMP\"}}}}}"
95-
96-
kubectl patch deployment $(deploymentWebappName) \
97-
-n $(kubeNamespace) \
98-
-p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"ci-build\":\"$(Build.BuildId)\",\"force-image-pull\":\"$(Build.BuildId)-$TIMESTAMP\"}}}}}"
99-
100-
# Delete existing pods to ensure fresh image pull
101-
kubectl delete pods -n $(kubeNamespace) -l app=$(deploymentApiName) --ignore-not-found=true || true
102-
kubectl delete pods -n $(kubeNamespace) -l app=$(deploymentWebappName) --ignore-not-found=true || true
103-
104-
sleep 10
105-
displayName: 'Force Image Refresh'
106-
107-
# --------------------------------------------------
108-
# 5️⃣ Wait for Rollout Completion
109-
# --------------------------------------------------
110-
- script: |
111-
echo "⏳ Waiting for API rollout to complete..."
112-
kubectl rollout status deployment/$(deploymentApiName) -n $(kubeNamespace) --timeout=300s || exit 1
113-
114-
echo "⏳ Waiting for WebApp rollout to complete..."
115-
kubectl rollout status deployment/$(deploymentWebappName) -n $(kubeNamespace) --timeout=300s || exit 1
116-
117-
sleep 10
118-
displayName: 'Wait for Rollout'
119-
120-
# --------------------------------------------------
121-
# 6️⃣ Check for Image Pull Errors
122-
# --------------------------------------------------
123-
- script: |
124-
echo "🔍 Checking for image pull errors..."
125-
echo "=== Recent Events (last 20) ==="
126-
kubectl get events -n $(kubeNamespace) --sort-by='.lastTimestamp' | tail -20
127-
displayName: 'Check Image Pull Errors'
128-
continueOnError: true
129-
130-
# --------------------------------------------------
131-
# 7️⃣ Verify Deployment
132-
# --------------------------------------------------
133-
- script: |
134-
echo "🔍 Verifying deployed images and pod status"
135-
kubectl get pods -n $(kubeNamespace) -o wide
136-
echo "✅ Deployment verification complete"
137-
displayName: 'Verify Deployment'
138-
139-
# --------------------------------------------------
140-
# 8️⃣ Final Status
141-
# --------------------------------------------------
142-
- script: |
143-
echo "✅ Deployment finished successfully"
144-
kubectl get all -n $(kubeNamespace)
145-
displayName: 'Final Status'
29+
- template: templates/deploy-k8s-job.yml
30+
parameters:
31+
stageDisplayName: Deploy to Mourouj Kubernetes
32+
kubeNamespace: $(kubeNamespace)
33+
deploymentApiName: $(deploymentApiName)
34+
deploymentWebappName: $(deploymentWebappName)
35+
manifestPath: $(manifestPath)
36+
variableGroup: silkroad-mourouj
37+
forceImagePullPatch: true
38+
verboseVerify: true

deployments/azure-pipelines/azure-pipelines-2.yml

Lines changed: 11 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ pool:
1010
- Agent.Name -equals nizar-server
1111

1212
variables:
13-
- group: silkroad-prod # contains Connection_String_SteNizar
13+
- group: silkroad-prod
14+
- name: connectionString
15+
value: $(Connection_String_SteNizar)
1416
- name: kubeNamespace
1517
value: silkroad-prod-societe
1618
- name: deploymentApiName
@@ -24,76 +26,11 @@ stages:
2426
- stage: Deploy
2527
displayName: Deploy to Societe Nizar Kubernetes
2628
jobs:
27-
- job: DeployJob
28-
displayName: K8s Deployment
29-
steps:
30-
31-
# --------------------------------------------------
32-
# 0️⃣ Check Cluster Access
33-
# --------------------------------------------------
34-
- script: |
35-
echo "🔍 Checking cluster access"
36-
kubectl version --client
37-
kubectl cluster-info
38-
displayName: 'Check Kubernetes Cluster'
39-
40-
# --------------------------------------------------
41-
# 1️⃣ Ensure DB Connection Secret
42-
# --------------------------------------------------
43-
- script: |
44-
echo "🔐 Ensuring DB secret exists for Societe Nizar"
45-
kubectl create secret generic silkroad-connection-secret \
46-
-n $(kubeNamespace) \
47-
--from-literal=ConnectionStrings__DefaultConnection="$(Connection_String_SteNizar)" \
48-
--dry-run=client -o yaml | kubectl apply -f -
49-
displayName: 'Ensure DB Secret'
50-
env:
51-
Connection_String_SteNizar: $(Connection_String_SteNizar)
52-
53-
# --------------------------------------------------
54-
# 2️⃣ Apply Kubernetes Manifests
55-
# --------------------------------------------------
56-
- script: |
57-
echo "🚀 Applying Kubernetes manifests"
58-
kubectl apply -f $(manifestPath)
59-
displayName: 'Apply Manifests'
60-
61-
# --------------------------------------------------
62-
# 3️⃣ Update Images
63-
# --------------------------------------------------
64-
- script: |
65-
echo "🔄 Updating deployment images"
66-
67-
kubectl set image deployment/$(deploymentApiName) \
68-
api=tunnetcom/silkroad:latest-api \
69-
-n $(kubeNamespace)
70-
71-
kubectl set image deployment/$(deploymentWebappName) \
72-
webapp=tunnetcom/silkroad:latest-webapp \
73-
-n $(kubeNamespace)
74-
displayName: 'Update Images'
75-
76-
# --------------------------------------------------
77-
# 4️⃣ Force Rollout
78-
# --------------------------------------------------
79-
- script: |
80-
echo "🔄 Forcing rollout"
81-
82-
kubectl rollout restart deployment/$(deploymentApiName) -n $(kubeNamespace)
83-
kubectl rollout restart deployment/$(deploymentWebappName) -n $(kubeNamespace)
84-
displayName: 'Force Rollout'
85-
86-
# --------------------------------------------------
87-
# 5️⃣ Wait for Rollout
88-
# --------------------------------------------------
89-
- script: |
90-
kubectl rollout status deployment/$(deploymentApiName) -n $(kubeNamespace) --timeout=300s
91-
kubectl rollout status deployment/$(deploymentWebappName) -n $(kubeNamespace) --timeout=300s
92-
displayName: 'Wait for Rollout'
93-
94-
# --------------------------------------------------
95-
# 6️⃣ Verify Deployment
96-
# --------------------------------------------------
97-
- script: |
98-
kubectl get pods -n $(kubeNamespace) -o wide
99-
displayName: 'Verify Deployment'
29+
- template: templates/deploy-k8s-job.yml
30+
parameters:
31+
kubeNamespace: $(kubeNamespace)
32+
deploymentApiName: $(deploymentApiName)
33+
deploymentWebappName: $(deploymentWebappName)
34+
manifestPath: $(manifestPath)
35+
stageDisplayName: Deploy to Societe Nizar Kubernetes
36+
forceImagePullPatch: false

0 commit comments

Comments
 (0)