Skip to content

Commit d6a39cb

Browse files
pipeline fix v1
1 parent 56ffec8 commit d6a39cb

File tree

1 file changed

+138
-35
lines changed

1 file changed

+138
-35
lines changed

.github/workflows/job-deploy-windows.yml

Lines changed: 138 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -167,63 +167,166 @@ jobs:
167167
}
168168
169169
# Deploy using azd up
170-
azd up --no-prompt
171-
172-
Write-Host "✅ Deployment succeeded."
170+
Write-Host "Starting deployment with azd up..."
171+
try {
172+
azd up --no-prompt
173+
if ($LASTEXITCODE -ne 0) {
174+
Write-Host "❌ Deployment failed with exit code: $LASTEXITCODE"
175+
exit 1
176+
}
177+
Write-Host "✅ Deployment succeeded."
178+
} catch {
179+
Write-Host "❌ Deployment failed with error: $($_.Exception.Message)"
180+
exit 1
181+
}
173182
174183
# Get deployment outputs using azd
175184
Write-Host "Extracting deployment outputs..."
176185
$DEPLOY_OUTPUT = azd env get-values --output json | ConvertFrom-Json
177186
Write-Host "Deployment output: $($DEPLOY_OUTPUT | ConvertTo-Json -Depth 10)"
178187
179188
if (-not $DEPLOY_OUTPUT) {
180-
Write-Host "Error: Deployment output is empty. Please check the deployment logs."
189+
Write-Host "Error: Deployment output is empty. Please check the deployment logs."
181190
exit 1
182191
}
183192
184-
185-
$AI_FOUNDRY_RESOURCE_ID = $DEPLOY_OUTPUT.AI_FOUNDRY_RESOURCE_ID
186-
"AI_FOUNDRY_RESOURCE_ID=$AI_FOUNDRY_RESOURCE_ID" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
187-
188-
$AI_SEARCH_SERVICE_NAME = $DEPLOY_OUTPUT.AI_SEARCH_SERVICE_NAME
189-
"AI_SEARCH_SERVICE_NAME=$AI_SEARCH_SERVICE_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
190-
191-
$AZURE_COSMOSDB_ACCOUNT = $DEPLOY_OUTPUT.AZURE_COSMOSDB_ACCOUNT
192-
"AZURE_COSMOSDB_ACCOUNT=$AZURE_COSMOSDB_ACCOUNT" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
193-
194-
$STORAGE_ACCOUNT_NAME = $DEPLOY_OUTPUT.STORAGE_ACCOUNT_NAME
195-
"STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
196-
197-
$STORAGE_CONTAINER_NAME = $DEPLOY_OUTPUT.STORAGE_CONTAINER_NAME
198-
"STORAGE_CONTAINER_NAME=$STORAGE_CONTAINER_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
199-
200-
$KEY_VAULT_NAME = $DEPLOY_OUTPUT.KEY_VAULT_NAME
201-
"KEY_VAULT_NAME=$KEY_VAULT_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
202-
203-
$RESOURCE_GROUP_NAME = $DEPLOY_OUTPUT.RESOURCE_GROUP_NAME
204-
"RESOURCE_GROUP_NAME=$RESOURCE_GROUP_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
205-
206-
$WEB_APP_URL = $DEPLOY_OUTPUT.WEB_APP_URL
207-
Write-Host "WEB_APP_URL extracted: $WEB_APP_URL"
193+
# Save all deployment outputs to GITHUB_ENV
194+
Write-Host "Saving deployment outputs to environment variables..."
195+
"RESOURCE_GROUP_NAME=$($DEPLOY_OUTPUT.RESOURCE_GROUP_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
196+
"AZURE_RESOURCE_GROUP_ID=$($DEPLOY_OUTPUT.AZURE_RESOURCE_GROUP_ID)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
197+
"STORAGE_ACCOUNT_NAME=$($DEPLOY_OUTPUT.STORAGE_ACCOUNT_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
198+
"AZURE_SEARCH_SERVICE_NAME=$($DEPLOY_OUTPUT.AZURE_SEARCH_SERVICE_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
199+
"AZURE_AKS_NAME=$($DEPLOY_OUTPUT.AZURE_AKS_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
200+
"AZURE_AKS_MI_ID=$($DEPLOY_OUTPUT.AZURE_AKS_MI_ID)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
201+
"AZURE_CONTAINER_REGISTRY_NAME=$($DEPLOY_OUTPUT.AZURE_CONTAINER_REGISTRY_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
202+
"AZURE_COGNITIVE_SERVICE_NAME=$($DEPLOY_OUTPUT.AZURE_COGNITIVE_SERVICE_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
203+
"AZURE_COGNITIVE_SERVICE_ENDPOINT=$($DEPLOY_OUTPUT.AZURE_COGNITIVE_SERVICE_ENDPOINT)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
204+
"AZURE_OPENAI_SERVICE_NAME=$($DEPLOY_OUTPUT.AZURE_OPENAI_SERVICE_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
205+
"AZURE_OPENAI_SERVICE_ENDPOINT=$($DEPLOY_OUTPUT.AZURE_OPENAI_SERVICE_ENDPOINT)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
206+
"AZURE_COSMOSDB_NAME=$($DEPLOY_OUTPUT.AZURE_COSMOSDB_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
207+
"AZ_GPT4O_MODEL_NAME=$($DEPLOY_OUTPUT.AZ_GPT4O_MODEL_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
208+
"AZ_GPT4O_MODEL_ID=$($DEPLOY_OUTPUT.AZ_GPT4O_MODEL_ID)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
209+
"AZ_GPT_EMBEDDING_MODEL_NAME=$($DEPLOY_OUTPUT.AZ_GPT_EMBEDDING_MODEL_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
210+
"AZ_GPT_EMBEDDING_MODEL_ID=$($DEPLOY_OUTPUT.AZ_GPT_EMBEDDING_MODEL_ID)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
211+
"AZURE_APP_CONFIG_ENDPOINT=$($DEPLOY_OUTPUT.AZURE_APP_CONFIG_ENDPOINT)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
212+
"AZURE_APP_CONFIG_NAME=$($DEPLOY_OUTPUT.AZURE_APP_CONFIG_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
213+
214+
# Get AKS managed resource group (node resource group)
215+
Write-Host "Retrieving AKS managed resource group..."
216+
$AKS_NAME = $DEPLOY_OUTPUT.AZURE_AKS_NAME
217+
$RESOURCE_GROUP = $DEPLOY_OUTPUT.RESOURCE_GROUP_NAME
218+
$AKS_NODE_RG = az aks show --name $AKS_NAME --resource-group $RESOURCE_GROUP --query "nodeResourceGroup" -o tsv
219+
Write-Host "AKS node resource group: $AKS_NODE_RG"
220+
"krg_name=$AKS_NODE_RG" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
221+
222+
# Get Web App URL from AKS public IP
223+
Write-Host "Retrieving Web App URL from AKS..."
224+
$PUBLIC_IP_NAME = az network public-ip list --resource-group $AKS_NODE_RG --query "[?contains(name, 'kubernetes-')].name" -o tsv | Select-Object -First 1
225+
226+
if ([string]::IsNullOrWhiteSpace($PUBLIC_IP_NAME)) {
227+
Write-Host "❌ Error: Could not find public IP in resource group $AKS_NODE_RG"
228+
exit 1
229+
}
208230
209-
if ([string]::IsNullOrWhiteSpace($WEB_APP_URL)) {
210-
Write-Host "❌ Error: WEB_APP_URL is empty or not found in deployment output."
211-
Write-Host "Available output keys: $($DEPLOY_OUTPUT.PSObject.Properties.Name -join ', ')"
231+
Write-Host "Found public IP: $PUBLIC_IP_NAME"
232+
$FQDN = az network public-ip show --resource-group $AKS_NODE_RG --name $PUBLIC_IP_NAME --query "dnsSettings.fqdn" -o tsv
233+
234+
if ([string]::IsNullOrWhiteSpace($FQDN)) {
235+
Write-Host "❌ Error: Could not retrieve FQDN for public IP $PUBLIC_IP_NAME"
212236
exit 1
213237
}
214238
239+
$WEB_APP_URL = "https://$FQDN"
240+
Write-Host "Web App URL: $WEB_APP_URL"
241+
215242
"WEB_APPURL=$WEB_APP_URL" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
216243
"WEB_APPURL=$WEB_APP_URL" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
217244
218-
- name: Run Post-Deployment Script
219-
id: post_deploy
245+
- name: Run Deployment Script with Input
246+
shell: pwsh
247+
run: |
248+
cd Deployment
249+
$input = @"
250+
${{ secrets.EMAIL }}
251+
yes
252+
"@
253+
$input | pwsh ./resourcedeployment.ps1
254+
Write-Host "Resource Group Name is ${{ env.RESOURCE_GROUP_NAME }}"
255+
Write-Host "Kubernetes resource group is ${{ env.AZURE_AKS_NAME }}"
256+
env:
257+
# From GitHub secrets (for login)
258+
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
259+
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
260+
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
261+
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
262+
263+
# From deployment outputs step (these come from $GITHUB_ENV)
264+
RESOURCE_GROUP_NAME: ${{ env.RESOURCE_GROUP_NAME }}
265+
AZURE_RESOURCE_GROUP_ID: ${{ env.AZURE_RESOURCE_GROUP_ID }}
266+
STORAGE_ACCOUNT_NAME: ${{ env.STORAGE_ACCOUNT_NAME }}
267+
AZURE_SEARCH_SERVICE_NAME: ${{ env.AZURE_SEARCH_SERVICE_NAME }}
268+
AZURE_AKS_NAME: ${{ env.AZURE_AKS_NAME }}
269+
AZURE_AKS_MI_ID: ${{ env.AZURE_AKS_MI_ID }}
270+
AZURE_CONTAINER_REGISTRY_NAME: ${{ env.AZURE_CONTAINER_REGISTRY_NAME }}
271+
AZURE_COGNITIVE_SERVICE_NAME: ${{ env.AZURE_COGNITIVE_SERVICE_NAME }}
272+
AZURE_COGNITIVE_SERVICE_ENDPOINT: ${{ env.AZURE_COGNITIVE_SERVICE_ENDPOINT }}
273+
AZURE_OPENAI_SERVICE_NAME: ${{ env.AZURE_OPENAI_SERVICE_NAME }}
274+
AZURE_OPENAI_SERVICE_ENDPOINT: ${{ env.AZURE_OPENAI_SERVICE_ENDPOINT }}
275+
AZURE_COSMOSDB_NAME: ${{ env.AZURE_COSMOSDB_NAME }}
276+
AZ_GPT4O_MODEL_NAME: ${{ env.AZ_GPT4O_MODEL_NAME }}
277+
AZ_GPT4O_MODEL_ID: ${{ env.AZ_GPT4O_MODEL_ID }}
278+
AZ_GPT_EMBEDDING_MODEL_NAME: ${{ env.AZ_GPT_EMBEDDING_MODEL_NAME }}
279+
AZ_GPT_EMBEDDING_MODEL_ID: ${{ env.AZ_GPT_EMBEDDING_MODEL_ID }}
280+
AZURE_APP_CONFIG_ENDPOINT: ${{ env.AZURE_APP_CONFIG_ENDPOINT }}
281+
AZURE_APP_CONFIG_NAME: ${{ env.AZURE_APP_CONFIG_NAME }}
282+
283+
- name: Validate Deployment
284+
shell: bash
285+
run: |
286+
webapp_url="${{ env.WEB_APPURL }}"
287+
echo "Validating web app at: $webapp_url"
288+
289+
# Enhanced health check with retry logic
290+
max_attempts=7
291+
attempt=1
292+
success=false
293+
294+
while [ $attempt -le $max_attempts ] && [ "$success" = false ]; do
295+
echo "Attempt $attempt/$max_attempts: Checking web app health..."
296+
297+
# Check if web app responds
298+
http_code=$(curl -s -o /dev/null -w "%{http_code}" "$webapp_url" || echo "000")
299+
300+
if [ "$http_code" -eq 200 ]; then
301+
echo "✅ Web app is healthy (HTTP $http_code)"
302+
success=true
303+
elif [ "$http_code" -eq 404 ]; then
304+
echo "❌ Web app not found (HTTP 404)"
305+
break
306+
elif [ "$http_code" -eq 503 ] || [ "$http_code" -eq 502 ]; then
307+
echo "⚠️ Web app temporarily unavailable (HTTP $http_code), retrying..."
308+
sleep 20
309+
else
310+
echo "⚠️ Web app returned HTTP $http_code, retrying..."
311+
sleep 20
312+
fi
313+
314+
attempt=$((attempt + 1))
315+
done
316+
317+
if [ "$success" = false ]; then
318+
echo "❌ Web app validation failed after $max_attempts attempts"
319+
exit 1
320+
fi
321+
322+
- name: Run Post Deployment Script
220323
shell: pwsh
221324
run: |
222325
Write-Host "Running post deployment script to upload files..."
223-
Write-Host "WEB_APPURL value: $env:WEB_APPURL"
326+
Write-Host "WEB_APPURL: $env:WEB_APPURL"
224327
225328
if ([string]::IsNullOrWhiteSpace($env:WEB_APPURL)) {
226-
Write-Host "❌ Error: WEB_APPURL environment variable is empty."
329+
Write-Host "❌ Error: WEB_APPURL is empty"
227330
exit 1
228331
}
229332

0 commit comments

Comments
 (0)