Skip to content

Commit dd3267c

Browse files
committed
refactor: update all workflows to use Azure Developer CLI (azd)
- Add new azure-dev.yml workflow for complete provisioning and deployment - Update infrastructure.yml to use azd provision instead of az deployment - Update java-app.yml, js-app.yml, and python-app.yml to use azd deploy - Remove manual Docker builds and Kubernetes manifest updates - Simplify workflows by leveraging azd's built-in capabilities - Add infrastructure preview with azd provision --preview - Improve deployment reliability and consistency across all services
1 parent b9fdcbf commit dd3267c

File tree

5 files changed

+330
-327
lines changed

5 files changed

+330
-327
lines changed

.github/workflows/azure-dev.yml

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
name: Azure Developer CLI Deployment
2+
3+
on:
4+
push:
5+
branches:
6+
- step-6_ci-cd
7+
- main
8+
workflow_dispatch:
9+
inputs:
10+
environment:
11+
description: 'Environment to deploy'
12+
required: true
13+
default: 'dev'
14+
type: choice
15+
options:
16+
- dev
17+
- staging
18+
- prod
19+
20+
permissions:
21+
id-token: write
22+
contents: read
23+
24+
env:
25+
AZURE_ENV_NAME: app-mod-aks-${{ github.event.inputs.environment || 'dev' }}
26+
27+
jobs:
28+
provision-and-deploy:
29+
runs-on: ubuntu-latest
30+
31+
steps:
32+
- name: Checkout code
33+
uses: actions/checkout@v4
34+
35+
- name: Install azd
36+
uses: Azure/setup-azd@v1.0.0
37+
38+
- name: Azure Login
39+
uses: azure/login@v2
40+
with:
41+
creds: ${{ secrets.AZURE_CREDENTIALS }}
42+
43+
- name: Set azd environment
44+
run: |
45+
# Set environment name
46+
azd env new ${{ env.AZURE_ENV_NAME }} --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} || true
47+
azd env select ${{ env.AZURE_ENV_NAME }}
48+
49+
# Set required environment variables
50+
azd env set AZURE_SUBSCRIPTION_ID ${{ secrets.AZURE_SUBSCRIPTION_ID }}
51+
azd env set AZURE_LOCATION swedencentral
52+
azd env set AZURE_ENV_NAME ${{ env.AZURE_ENV_NAME }}
53+
54+
- name: Preview infrastructure changes
55+
run: |
56+
echo "### Infrastructure Preview 🔍" >> $GITHUB_STEP_SUMMARY
57+
azd provision --preview
58+
59+
- name: Provision Azure resources
60+
run: |
61+
azd provision --no-prompt
62+
63+
echo "### Infrastructure Provisioned ✅" >> $GITHUB_STEP_SUMMARY
64+
echo "" >> $GITHUB_STEP_SUMMARY
65+
echo "**Environment:** ${{ env.AZURE_ENV_NAME }}" >> $GITHUB_STEP_SUMMARY
66+
67+
- name: Deploy all applications
68+
run: |
69+
azd deploy --all --no-prompt
70+
71+
echo "### Applications Deployed ✅" >> $GITHUB_STEP_SUMMARY
72+
echo "" >> $GITHUB_STEP_SUMMARY
73+
echo "- Python App (customer-profile-api)" >> $GITHUB_STEP_SUMMARY
74+
echo "- JavaScript App (insurance-quote-api)" >> $GITHUB_STEP_SUMMARY
75+
echo "- Java App (insurance-claims-api)" >> $GITHUB_STEP_SUMMARY
76+
77+
- name: Get deployment outputs
78+
id: outputs
79+
run: |
80+
RESOURCE_GROUP=$(azd env get-value AZURE_RESOURCE_GROUP)
81+
AKS_CLUSTER_NAME=$(azd env get-value AKS_CLUSTER_NAME)
82+
ACR_NAME=$(azd env get-value AZURE_CONTAINER_REGISTRY_NAME)
83+
84+
echo "resource_group=$RESOURCE_GROUP" >> $GITHUB_OUTPUT
85+
echo "aks_cluster_name=$AKS_CLUSTER_NAME" >> $GITHUB_OUTPUT
86+
echo "acr_name=$ACR_NAME" >> $GITHUB_OUTPUT
87+
88+
echo "### Deployment Details 📋" >> $GITHUB_STEP_SUMMARY
89+
echo "" >> $GITHUB_STEP_SUMMARY
90+
echo "**Resource Group:** $RESOURCE_GROUP" >> $GITHUB_STEP_SUMMARY
91+
echo "**AKS Cluster:** $AKS_CLUSTER_NAME" >> $GITHUB_STEP_SUMMARY
92+
echo "**Container Registry:** $ACR_NAME" >> $GITHUB_STEP_SUMMARY
93+
94+
- name: Get AKS credentials
95+
run: |
96+
RESOURCE_GROUP=$(azd env get-value AZURE_RESOURCE_GROUP)
97+
AKS_CLUSTER_NAME=$(azd env get-value AKS_CLUSTER_NAME)
98+
99+
az aks get-credentials \
100+
--resource-group $RESOURCE_GROUP \
101+
--name $AKS_CLUSTER_NAME \
102+
--overwrite-existing
103+
104+
- name: Verify deployments
105+
run: |
106+
echo "### Service Status 🚀" >> $GITHUB_STEP_SUMMARY
107+
echo "" >> $GITHUB_STEP_SUMMARY
108+
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
109+
kubectl get deployments >> $GITHUB_STEP_SUMMARY
110+
echo "" >> $GITHUB_STEP_SUMMARY
111+
kubectl get services >> $GITHUB_STEP_SUMMARY
112+
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
113+
114+
- name: Show service endpoints
115+
run: |
116+
echo "Waiting for external IPs..."
117+
sleep 30
118+
119+
PYTHON_IP=$(kubectl get service customer-profile-api -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "pending")
120+
JS_IP=$(kubectl get service insurance-quote-api -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "pending")
121+
JAVA_IP=$(kubectl get service insurance-claims-api -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "pending")
122+
123+
echo "### Service Endpoints 🌐" >> $GITHUB_STEP_SUMMARY
124+
echo "" >> $GITHUB_STEP_SUMMARY
125+
echo "- **Python API:** http://$PYTHON_IP" >> $GITHUB_STEP_SUMMARY
126+
echo "- **JavaScript API:** http://$JS_IP" >> $GITHUB_STEP_SUMMARY
127+
echo "- **Java API:** http://$JAVA_IP" >> $GITHUB_STEP_SUMMARY
128+
129+
outputs:
130+
resource_group: ${{ steps.outputs.outputs.resource_group }}
131+
aks_cluster_name: ${{ steps.outputs.outputs.aks_cluster_name }}
132+
acr_name: ${{ steps.outputs.outputs.acr_name }}

.github/workflows/infrastructure.yml

Lines changed: 40 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Deploy Infrastructure
1+
name: Provision Infrastructure (azd)
22

33
on:
44
push:
@@ -19,97 +19,79 @@ on:
1919
- staging
2020
- prod
2121

22+
permissions:
23+
id-token: write
24+
contents: read
25+
2226
env:
2327
AZURE_LOCATION: swedencentral
28+
AZURE_ENV_NAME: app-mod-aks-${{ github.event.inputs.environment || 'dev' }}
2429

2530
jobs:
26-
deploy-infrastructure:
31+
provision-infrastructure:
2732
runs-on: ubuntu-latest
2833
# environment: ${{ github.event.inputs.environment || 'dev' }} # Uncomment when GitHub environments are configured
2934

3035
steps:
3136
- name: Checkout code
3237
uses: actions/checkout@v4
3338

39+
- name: Install azd
40+
uses: Azure/setup-azd@v1.0.0
41+
3442
- name: Azure Login
3543
uses: azure/login@v2
3644
with:
3745
creds: ${{ secrets.AZURE_CREDENTIALS }}
3846

39-
- name: Set environment name
47+
- name: Set azd environment
4048
id: set-env
4149
run: |
42-
ENV_NAME="${{ github.event.inputs.environment || 'dev' }}"
43-
echo "ENVIRONMENT_NAME=$ENV_NAME" >> $GITHUB_ENV
44-
echo "environment_name=$ENV_NAME" >> $GITHUB_OUTPUT
50+
# Create or select environment
51+
azd env new ${{ env.AZURE_ENV_NAME }} --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} || true
52+
azd env select ${{ env.AZURE_ENV_NAME }}
53+
54+
# Set required environment variables
55+
azd env set AZURE_SUBSCRIPTION_ID ${{ secrets.AZURE_SUBSCRIPTION_ID }}
56+
azd env set AZURE_LOCATION ${{ env.AZURE_LOCATION }}
57+
azd env set AZURE_ENV_NAME ${{ env.AZURE_ENV_NAME }}
58+
59+
echo "environment_name=${{ env.AZURE_ENV_NAME }}" >> $GITHUB_OUTPUT
60+
61+
- name: Preview infrastructure changes
62+
run: |
63+
echo "### Infrastructure Preview 🔍" >> $GITHUB_STEP_SUMMARY
64+
echo "" >> $GITHUB_STEP_SUMMARY
65+
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
66+
azd provision --preview 2>&1 | tee preview.txt || true
67+
cat preview.txt >> $GITHUB_STEP_SUMMARY
68+
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
4569
46-
- name: Deploy Bicep infrastructure
70+
- name: Provision Azure infrastructure
4771
id: deploy
4872
run: |
49-
# Create or get subscription deployment
50-
DEPLOYMENT_NAME="infra-deployment-$(date +%Y%m%d-%H%M%S)"
51-
52-
echo "Deploying infrastructure..."
53-
az deployment sub create \
54-
--name $DEPLOYMENT_NAME \
55-
--location ${{ env.AZURE_LOCATION }} \
56-
--template-file infra/main.bicep \
57-
--parameters environmentName=${{ env.ENVIRONMENT_NAME }} \
58-
--parameters location=${{ env.AZURE_LOCATION }} \
59-
--parameters tags='{"project":"app-mod-aks","environment":"${{ env.ENVIRONMENT_NAME }}"}' \
60-
--output json > deployment-output.json
61-
62-
# Check deployment status
63-
DEPLOYMENT_STATE=$(jq -r '.properties.provisioningState // empty' deployment-output.json)
64-
echo "Deployment state: $DEPLOYMENT_STATE"
65-
66-
if [ "$DEPLOYMENT_STATE" != "Succeeded" ]; then
67-
echo "Deployment failed or did not complete successfully"
68-
echo "Full deployment output:"
69-
cat deployment-output.json
70-
71-
# Try to get detailed error information
72-
echo "Checking deployment operations for errors..."
73-
az deployment sub show \
74-
--name $DEPLOYMENT_NAME \
75-
--query 'properties.error' \
76-
--output json || true
77-
78-
exit 1
79-
fi
80-
81-
# Show deployment output for debugging
82-
echo "Deployment succeeded. Output:"
83-
cat deployment-output.json
84-
85-
# Extract outputs with error checking
86-
RESOURCE_GROUP=$(jq -r '.properties.outputs.AZURE_RESOURCE_GROUP.value // empty' deployment-output.json)
87-
AKS_CLUSTER_NAME=$(jq -r '.properties.outputs.AKS_CLUSTER_NAME.value // empty' deployment-output.json)
88-
ACR_NAME=$(jq -r '.properties.outputs.AZURE_CONTAINER_REGISTRY_NAME.value // empty' deployment-output.json)
89-
ACR_ENDPOINT=$(jq -r '.properties.outputs.AZURE_CONTAINER_REGISTRY_ENDPOINT.value // empty' deployment-output.json)
73+
echo "Provisioning infrastructure..."
74+
azd provision --no-prompt
9075
91-
# Verify outputs are not empty
92-
if [ -z "$RESOURCE_GROUP" ] || [ -z "$AKS_CLUSTER_NAME" ] || [ -z "$ACR_NAME" ]; then
93-
echo "Error: Failed to extract deployment outputs"
94-
echo "RESOURCE_GROUP: $RESOURCE_GROUP"
95-
echo "AKS_CLUSTER_NAME: $AKS_CLUSTER_NAME"
96-
echo "ACR_NAME: $ACR_NAME"
97-
exit 1
98-
fi
76+
# Get deployment outputs
77+
RESOURCE_GROUP=$(azd env get-value AZURE_RESOURCE_GROUP)
78+
AKS_CLUSTER_NAME=$(azd env get-value AKS_CLUSTER_NAME)
79+
ACR_NAME=$(azd env get-value AZURE_CONTAINER_REGISTRY_NAME)
80+
ACR_ENDPOINT=$(azd env get-value AZURE_CONTAINER_REGISTRY_ENDPOINT)
9981
10082
# Set outputs
10183
echo "resource_group=$RESOURCE_GROUP" >> $GITHUB_OUTPUT
10284
echo "aks_cluster_name=$AKS_CLUSTER_NAME" >> $GITHUB_OUTPUT
10385
echo "acr_name=$ACR_NAME" >> $GITHUB_OUTPUT
10486
echo "acr_endpoint=$ACR_ENDPOINT" >> $GITHUB_OUTPUT
10587
106-
# Also set as environment variables for subsequent steps
88+
# Also set as environment variables
10789
echo "RESOURCE_GROUP=$RESOURCE_GROUP" >> $GITHUB_ENV
10890
echo "AKS_CLUSTER_NAME=$AKS_CLUSTER_NAME" >> $GITHUB_ENV
10991
echo "ACR_NAME=$ACR_NAME" >> $GITHUB_ENV
11092
echo "ACR_ENDPOINT=$ACR_ENDPOINT" >> $GITHUB_ENV
11193
112-
echo "### Deployment Complete ✅" >> $GITHUB_STEP_SUMMARY
94+
echo "### Provisioning Complete ✅" >> $GITHUB_STEP_SUMMARY
11395
echo "" >> $GITHUB_STEP_SUMMARY
11496
echo "**Resource Group:** $RESOURCE_GROUP" >> $GITHUB_STEP_SUMMARY
11597
echo "**AKS Cluster:** $AKS_CLUSTER_NAME" >> $GITHUB_STEP_SUMMARY

0 commit comments

Comments
 (0)