trigger: - main pool: vmImage: 'ubuntu-latest' variables: - group: MyVariableGroup stages: - stage: DeployInfrastructure displayName: 'Deploy Infrastructure' jobs: - job: Deploy displayName: 'Deploy Resources' steps: - task: AzureCLI@2 inputs: azureSubscription: $(azureServiceConnection) scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | # Create resource group az group create --name $(resourceGroupName) --location $(location) # Create storage account az storage account create --name $(storageAccountName) --location $(location) --resource-group $(resourceGroupName) --sku Standard_LRS # Create App Service Plan az appservice plan create --name $(appServicePlanName) --resource-group $(resourceGroupName) --location $(location) --sku Y1 --is-linux # Create Function App az functionapp create --name $(functionAppName) --storage-account $(storageAccountName) --resource-group $(resourceGroupName) --plan $(appServicePlanName) --runtime python --runtime-version 3.9 --functions-version 3 # Create Application Insights az monitor app-insights component create --app $(appInsightsName) --location $(location) --resource-group $(resourceGroupName) # Configure Application Insights for Function App appInsightsKey=$(az monitor app-insights component show --app $(appInsightsName) --resource-group $(resourceGroupName) --query "instrumentationKey" --output tsv) az functionapp config appsettings set --name $(functionAppName) --resource-group $(resourceGroupName) --settings "APPINSIGHTS_INSTRUMENTATIONKEY=$appInsightsKey" - stage: DeployCode displayName: 'Deploy Code' dependsOn: DeployInfrastructure jobs: - job: Deploy displayName: 'Deploy Function App Code' steps: - checkout: self - task: UsePythonVersion@0 inputs: versionSpec: '3.x' addToPath: true - script: | python -m venv .venv source .venv/bin/activate pip install -r requirements.txt displayName: 'Install dependencies' - task: ArchiveFiles@2 inputs: rootFolderOrFile: '$(System.DefaultWorkingDirectory)' includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' replaceExistingArchive: true - task: AzureWebApp@1 inputs: azureSubscription: $(azureServiceConnection) appType: 'functionapp' appName: $(functionAppName) package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'