Flusso di lavoro dello sviluppatore end-to-end
Collegare GitHub Actions CI/CD, Azure Container Registry, Container Apps e Application Insights in un ciclo interno completo dello sviluppatore, dal commit alla produzione osservabile.
Flusso di lavoro dello sviluppatore end-to-end è una lezione Cloud & IT Cert Prep gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cloud & IT Cert Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.
Il ciclo di sviluppo moderno in Azure
Un moderno flusso di lavoro di sviluppo in Azure collega il controllo del codice sorgente, la CI/CD, l'infrastruttura dei contenitori e l'osservabilità in un inner loop fluido, dal commit del codice fino alla produzione osservabile. I componenti principali sono: GitHub (sorgente), GitHub Actions (pipeline di compilazione e distribuzione), Azure Container Registry (archivio delle immagini), Azure Container Apps (ambiente di esecuzione) e Application Insights (osservabilità). Ogni modifica passa automaticamente dal computer dello sviluppatore alla produzione in pochi minuti, con controlli di qualità a ogni passaggio.
Passaggio 1: controllo del codice sorgente e strategia di branching
Organizzi il codice in un repository GitHub usando una strategia di sviluppo basata sul trunk oppure GitFlow. Per la maggior parte dei microservizi, lo sviluppo basato sul trunk (branch di funzionalità di breve durata uniti quotidianamente a main) riduce i conflitti di integrazione e mantiene semplice la pipeline. Usi le regole di protezione dei branch su main per richiedere revisioni delle pull request e controlli CI superati prima dell'unione. Un file CODEOWNERS assicura che le modifiche ai servizi critici richiedano l'approvazione degli ingegneri senior del team competente.
# Example .github/CODEOWNERS
# Require payments-team review for any changes under /src/payments/
/src/payments/ @payments-team
/infrastructure/ @platform-teamPassaggio 2: CI con GitHub Actions
La pipeline CI viene eseguita a ogni pull request. Un flusso di lavoro tipico è: estrazione del codice → ripristino delle dipendenze → esecuzione dei test unitari → esecuzione dei test di integrazione → compilazione dell'immagine Docker → push in Azure Container Registry. All'immagine viene assegnato come tag lo SHA del commit git per garantirne la tracciabilità. Usi l'autenticazione basata su OIDC da GitHub Actions ad Azure (tramite identità federata) per evitare di archiviare in GitHub i segreti del service principal di Azure: un equivalente dell'identità gestita per le pipeline CI.
# .github/workflows/ci.yml (abbreviated)
name: CI
on: [pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to ACR
uses: azure/docker-login@v1
with:
login-server: myacr.azurecr.io
username: ${{ secrets.AZURE_CLIENT_ID }}
password: ${{ secrets.AZURE_CLIENT_SECRET }}
- name: Build and push image
run: |
docker build -t myacr.azurecr.io/myapi:${{ github.sha }} .
docker push myacr.azurecr.io/myapi:${{ github.sha }}Passaggio 3: CD nell'ambiente di staging
Dopo il completamento della pipeline CI in seguito a un'unione in main, la pipeline CD distribuisce automaticamente nell'ambiente di staging. La pipeline aggiorna il tag dell'immagine della Container App con lo SHA appena compilato, attende che la nuova revisione diventi integra ed esegue smoke test sull'URL di staging. Gli smoke test verificano che gli endpoint API critici restituiscano le risposte previste. Se gli smoke test hanno esito negativo, la pipeline esegue il rollback reindirizzando il traffico in ingresso alla revisione precedente, senza alcun intervento manuale.
# CD stage: update Container App to new image
- name: Deploy to staging
uses: azure/cli@v2
with:
azcliversion: latest
inlineScript: |
az containerapp update \
--name myapi-staging \
--resource-group myRG \
--image myacr.azurecr.io/myapi:${{ github.sha }}
- name: Run smoke tests
run: |
STAGING_URL=$(az containerapp show --name myapi-staging \
--resource-group myRG \
--query 'properties.configuration.ingress.fqdn' -o tsv)
curl -f https://$STAGING_URL/health || exit 1Passaggio 4: gate di approvazione per la produzione
Dopo la convalida nello staging, la pipeline CD si mette in pausa su un gate di approvazione. Le protezioni degli ambienti di GitHub Actions consentono di configurare revisori obbligatori per l'ambiente production. La pipeline invia una notifica Slack all'ingegnere reperibile, che esamina i risultati dei test di staging, il diff e gli eventuali incidenti aperti prima di approvare. Solo dopo l'approvazione la pipeline procede distribuendo in produzione la stessa immagine identificata dallo SHA. Questo passaggio con supervisione umana è fondamentale per i servizi ad alto traffico o soggetti a normative.
# In GitHub: create 'production' environment with required reviewers
# .github/workflows/cd.yml (abbreviated)
jobs:
deploy-production:
environment:
name: production
url: https://myapi.contoso.com
needs: deploy-staging
steps:
- name: Deploy to production
uses: azure/cli@v2
with:
inlineScript: |
az containerapp update \
--name myapi \
--resource-group myRG \
--image myacr.azurecr.io/myapi:${{ github.sha }}Passaggio 5: osservabilità della produzione
Una volta eseguita la distribuzione in produzione, Application Insights offre visibilità in tempo reale. L'SDK di App Insights (o l'auto-strumentazione per i runtime supportati) tiene traccia di: tassi di richiesta, tassi di errore e latenza (i tre segnali fondamentali), chiamate alle dipendenze (a database, Service Bus e altre API) ed eccezioni con tracce dello stack complete. La Mappa delle applicazioni visualizza il modo in cui i servizi si chiamano tra loro ed evidenzia quali dipendenze contribuiscono maggiormente agli errori o alla latenza.
# Python: Add Application Insights SDK
from opencensus.ext.azure.log_exporter import AzureLogHandler
from opencensus.ext.azure.trace_exporter import AzureExporter
from opencensus.trace.samplers import ProbabilitySampler
from opencensus.trace.tracer import Tracer
tracer = Tracer(
exporter=AzureExporter(connection_string='InstrumentationKey=<key>'),
sampler=ProbabilitySampler(1.0)
)Collegare le distribuzioni alle tracce
Usi le annotazioni di Application Insights per contrassegnare gli eventi di distribuzione nei grafici delle metriche. Quando viene creata un'annotazione di rilascio (tramite l'azione azure/appinsights-annotation di GitHub Actions), questa appare come una linea verticale in tutti i grafici delle metriche di App Insights. In questo modo è immediatamente evidente se un picco di latenza o un aumento del tasso di errore è correlato a una distribuzione recente, riducendo significativamente il tempo medio di diagnosi (MTTD) durante gli incidenti.
# Create a release annotation in Application Insights
- name: Annotate release in App Insights
uses: azure/appinsights-annotation@v1
with:
appInsightsResourceName: myAppInsights
resourceGroupName: myRG
releaseName: '${{ github.run_id }}-${{ github.sha }}'Rollback automatico in caso di picco del tasso di errore
Per le pipeline più resilienti, implementi il rollback automatico. Dopo la distribuzione in produzione, la pipeline attende 10 minuti ed esegue una query in Application Insights per ottenere il tasso di errore. Se il tasso di errore supera una soglia configurabile (ad esempio, >5%), la pipeline esegue automaticamente il rollback aggiornando il traffico in ingresso della Container App in modo da indirizzare il 100% alla revisione precedente. Questo modello di distribuzione progressiva riduce il raggio d'azione di una distribuzione errata e consente ai team di distribuire con maggiore sicurezza anche modifiche complesse o sensibili.
# Query App Insights error rate via REST (abbreviated)
QUERY='requests | where timestamp > ago(10m) | summarize failed = countif(success == false), total = count() | extend errorRate = round(100.0 * failed / total, 2)'
RESULT=$(az monitor app-insights query \
--apps myAppInsights \
--resource-group myRG \
--analytics-query "$QUERY" \
--query 'tables[0].rows[0][2]' -o tsv)
if [ $(echo '$RESULT > 5' | bc -l) -eq 1 ]; then
echo 'Error rate $RESULT% - rolling back!'
az containerapp ingress traffic set --name myapi --resource-group myRG --revision-weight stable=100
fiProduttività degli sviluppatori: sviluppo locale con emulatori
Gli sviluppatori dovrebbero poter eseguire e testare localmente l'intero stack senza connettersi alle risorse Azure di produzione. Usi Azure Storage Emulator (Azurite) per l'archiviazione locale di BLOB e code, Cosmos DB Emulator per i test locali del database e Service Bus Emulator per la messaggistica locale. La variabile di ambiente AZURE_ENVIRONMENT=local può fare in modo che DefaultAzureCredential utilizzi stringhe di connessione che puntano agli emulatori, mentre lo stesso codice usa un'identità gestita in Azure. Docker Compose orchestra tutte le dipendenze locali con un unico comando docker compose up.
# docker-compose.yml for local development
services:
azurite:
image: mcr.microsoft.com/azure-storage/azurite
ports:
- '10000:10000'
- '10001:10001'
cosmos-emulator:
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
ports:
- '8081:8081'Sicurezza nel flusso di lavoro dello sviluppatore
Integra la sicurezza in ogni fase del flusso di lavoro dello sviluppatore: Dependabot analizza le dipendenze vulnerabili nelle pull request; GitHub Advanced Security (scansione del codice con CodeQL) rileva vulnerabilità come l'iniezione SQL e i segreti codificati nel codice; Microsoft Defender for DevOps si integra con GitHub per mostrare le raccomandazioni di sicurezza di Azure insieme alle modifiche al codice; e la scansione delle vulnerabilità di ACR Defender controlla le immagini dei contenitori alla ricerca di CVE a livello di sistema operativo e applicazione dopo ogni push. I risultati relativi alla sicurezza vengono visualizzati come commenti nelle pull request, così possono essere risolti prima dell'unione.
Riportare tutto insieme
Il flusso di lavoro completo per sviluppatori è un ciclo di feedback continuo: uno sviluppatore esegue il commit del codice, la CI compila e testa l'immagine del contenitore, l'immagine viene inserita in ACR con lo SHA del commit come tag, la CD esegue la distribuzione nello staging e gli smoke test, una persona approva la distribuzione in produzione, la pipeline distribuisce in produzione e crea un'annotazione di rilascio, quindi Application Insights monitora i tassi di errore eseguendo un rollback automatico se le soglie vengono superate. L'infrastruttura come codice (Bicep o Terraform) nello stesso repository garantisce che la pipeline, la Container App e la configurazione del monitoraggio siano tutte sottoposte al controllo della versione insieme al codice dell'applicazione.
Verifica rapida
Verifichi la Sua comprensione dei concetti di Microsoft Azure Fundamentals (AZ-900) trattati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che il flusso di lavoro end-to-end per sviluppatori collega il controllo del codice sorgente GitHub, la CI/CD di GitHub Actions, Azure Container Registry, Container Apps e Application Insights; le annotazioni di rilascio correlano le distribuzioni alle variazioni delle metriche per diagnosticare più rapidamente gli incidenti; e il rollback automatico basato sulle query del tasso di errore riduce il raggio d'azione delle distribuzioni errate. Ora passeremo alla preparazione dell'esame con un ripasso completo dei concetti cloud e dell'architettura Azure.
Domande Frequenti
La lezione «Flusso di lavoro dello sviluppatore end-to-end» è gratuita?
Sì — il testo completo di «Flusso di lavoro dello sviluppatore end-to-end» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cloud & IT Cert Prep, passa a CoddyKit PRO. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.
Cosa imparerò in «Flusso di lavoro dello sviluppatore end-to-end»?
Collegare GitHub Actions CI/CD, Azure Container Registry, Container Apps e Application Insights in un ciclo interno completo dello sviluppatore, dal commit alla produzione osservabile. Eserciti Cloud & IT Cert Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cloud & IT Cert Prep?
Non è richiesta alcuna esperienza precedente. Cloud & IT Cert Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Flusso di lavoro dello sviluppatore end-to-end»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cloud & IT Cert Prep?
Sì. Ogni lezione Cloud & IT Cert Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Identità gestita per l'autenticazione senza password
- Azure Service Bus per la messaggistica disaccoppiata
- Azure Container Apps
- Flusso di lavoro dello sviluppatore end-to-end