0Pricing
Cloud & IT Cert Prep · Lezione

GitHub Actions su Azure

Replichi il workflow CI/CD usando GitHub Actions con l'azione azure/webapps-deploy e comprenda quando scegliere GitHub Actions invece di Azure Pipelines.

GitHub Actions su Azure è 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.

Che cos'è GitHub Actions?

GitHub Actions è la piattaforma integrata di GitHub per CI/CD e automazione. I workflow sono definiti in file YAML archiviati nella directory .github/workflows/ del repository e vengono attivati dagli eventi di GitHub: push, pull request, release e altri ancora. GitHub Actions è profondamente integrato nell'ecosistema GitHub (issues, PR, pacchetti e analisi della sicurezza) e offre un ricco marketplace di azioni della community per attività come compilazione, test e distribuzione in Azure.

Struttura di un workflow GitHub Actions

Un file di workflow di GitHub Actions contiene tre sezioni di primo livello. on definisce gli eventi di attivazione. env imposta le variabili di ambiente globali. jobs definisce uno o più processi, ciascuno eseguito su un runner (gestito da GitHub o self-hosted). Ogni processo contiene degli steps: run (script della shell) oppure uses (un'azione predefinita). Per impostazione predefinita, i processi vengono eseguiti in parallelo; utilizzi needs per creare dipendenze sequenziali.

# .github/workflows/ci.yml
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  NODE_VERSION: '18.x'

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: ${{ env.NODE_VERSION }}
    - run: npm ci
    - run: npm test

Autenticazione ad Azure da GitHub Actions

Il metodo consigliato per autenticare GitHub Actions ad Azure è OpenID Connect (OIDC): emette token a breve durata senza archiviare segreti a lunga durata in GitHub. Configuri una credenziale di identità federata in una registrazione dell'app Azure o in un'identità gestita, accordandole attendibilità per il repository e il branch GitHub. Utilizzi l'azione azure/login@v2 per scambiare il token OIDC di GitHub con un token di accesso Azure: non sono necessari segreti client in GitHub Secrets.

# Configure OIDC federated credential in Azure
az ad app federated-credential create \
  --id <AppRegistrationObjectId> \
  --parameters '{
    "name": "github-oidc",
    "issuer": "https://token.actions.githubusercontent.com",
    "subject": "repo:myorg/myrepo:ref:refs/heads/main",
    "audiences": ["api://AzureADTokenExchange"]
  }'

# In the workflow: login via OIDC
# permissions:
#   id-token: write
#   contents: read
# - uses: azure/login@v2
#   with:
#     client-id: ${{ vars.AZURE_CLIENT_ID }}
#     tenant-id: ${{ vars.AZURE_TENANT_ID }}
#     subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}

Distribuzione in Azure App Service

L'azione azure/webapps-deploy@v3 distribuisce codice o un'immagine di container in Azure App Service. Gestisce la distribuzione negli slot, la distribuzione basata su pacchetto e la distribuzione di immagini Docker. La abbini a azure/login@v2 per l'autenticazione. Può scegliere come destinazione uno slot di staging, eseguire smoke test e poi effettuare lo scambio con l'azione azure/CLI@v2 che esegue il comando di scambio degli slot, replicando interamente in GitHub Actions il modello di distribuzione blue-green di Azure Pipelines.

# .github/workflows/deploy.yml
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
    - uses: actions/checkout@v4

    - uses: azure/login@v2
      with:
        client-id: ${{ vars.AZURE_CLIENT_ID }}
        tenant-id: ${{ vars.AZURE_TENANT_ID }}
        subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}

    - name: Build and zip app
      run: npm ci && npm run build && zip -r app.zip dist/

    - uses: azure/webapps-deploy@v3
      with:
        app-name: myUniqueWebApp
        slot-name: staging
        package: app.zip

Distribuzione in Azure Kubernetes Service

Distribuisca in AKS da GitHub Actions utilizzando l'azione azure/k8s-deploy@v5. Questa azione usa kubectl apply per distribuire i manifest, esegue la sostituzione dell'immagine (sostituendo il tag dell'immagine con quello della build corrente) e monitora lo stato del rollout. L'azione azure/aks-set-context@v4 configura le credenziali di kubectl recuperando il kubeconfig del cluster tramite la sessione Azure autenticata.

jobs:
  deploy-aks:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
    - uses: actions/checkout@v4
    - uses: azure/login@v2
      with:
        client-id: ${{ vars.AZURE_CLIENT_ID }}
        tenant-id: ${{ vars.AZURE_TENANT_ID }}
        subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}

    - uses: azure/aks-set-context@v4
      with:
        resource-group: MyRG
        cluster-name: myAKSCluster

    - uses: azure/k8s-deploy@v5
      with:
        namespace: production
        manifests: k8s/
        images: 'mycontainerregistry.azurecr.io/myapp:${{ github.sha }}'

Segreti e variabili di GitHub

Archivi i valori sensibili in GitHub Secrets: valori crittografati accessibili nei workflow come ${{ secrets.SECRET_NAME }}. Inserisca la configurazione non sensibile in GitHub Variables, accessibile come ${{ vars.VARIABLE_NAME }}. Entrambi possono essere associati a un repository, un ambiente o un'organizzazione. Utilizzi gli environments in GitHub Actions per aggiungere regole di protezione (revisori obbligatori, branch di distribuzione) simili agli Environments di Azure DevOps.

# Reference secrets and variables in a workflow
steps:
- name: Configure app settings
  uses: azure/CLI@v2
  with:
    inlineScript: |
      az webapp config appsettings set \
        --name myUniqueWebApp \
        --resource-group MyRG \
        --settings \
          DATABASE_URL='${{ secrets.DATABASE_URL }}' \
          API_VERSION='${{ vars.API_VERSION }}'

Regole di protezione degli ambienti

Gli Environments di GitHub Actions (configurati in Impostazioni del repository → Environments) aggiungono gate di distribuzione simili agli ambienti di Azure DevOps. Può richiedere revisori obbligatori, che devono approvare l'esecuzione di un processo destinato all'ambiente, limitare le distribuzioni a branch specifici (solo main può distribuire in Production) e aggiungere timer di attesa per ritardare le distribuzioni. I processi destinati a un ambiente protetto vengono sospesi finché non sono soddisfatte tutte le regole di protezione.

# Workflow job targeting a protected GitHub environment
jobs:
  deploy-production:
    runs-on: ubuntu-latest
    environment:
      name: Production           # Must have 2 approvers in GitHub settings
      url: https://myapp.contoso.com
    needs: deploy-staging
    steps:
    - uses: azure/login@v2
      with:
        client-id: ${{ vars.AZURE_CLIENT_ID }}
        tenant-id: ${{ vars.AZURE_TENANT_ID }}
        subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
    - uses: azure/webapps-deploy@v3
      with:
        app-name: myUniqueWebApp
        package: app.zip

Workflow riutilizzabili e azioni composite

Eviti di duplicare la logica CI/CD tra i repository utilizzando due funzionalità di GitHub Actions. I workflow riutilizzabili consentono di definire un workflow in un repository e richiamarlo dai workflow di altri repository tramite uses: myorg/shared-workflows/.github/workflows/deploy.yml@main. Le azioni composite raggruppano più passaggi in un'unica azione archiviata in un repository, riutilizzabile con uses: myorg/my-actions/deploy@v1. Entrambe promuovono i principi DRY nelle pipeline CI/CD della Sua organizzazione.

# Call a reusable workflow from another workflow
jobs:
  deploy:
    uses: myorg/shared-workflows/.github/workflows/deploy-appservice.yml@main
    with:
      app-name: myUniqueWebApp
      slot-name: staging
      package-path: dist/
    secrets:
      AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
      AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
      AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

GitHub Actions e Azure Pipelines: quale scegliere

Scelga GitHub Actions quando: il codice è ospitato su GitHub, il team preferisce l'interfaccia di GitHub, desidera una stretta integrazione con i controlli delle PR e l'analisi del codice di GitHub oppure sta sviluppando progetti open source (con un generoso numero di minuti gratuiti). Scelga Azure Pipelines quando: ha bisogno dell'integrazione con Azure Boards, di test avanzati con Azure Test Plans, della gestione dei feed di Azure Artifacts, quando il codice si trova in Azure Repos oppure quando necessita di una gestione complessa dei rilasci multi-stage con gate distribuiti su molti ambienti. Entrambe le soluzioni supportano allo stesso modo le distribuzioni in Azure.

Marketplace di GitHub Actions

Il GitHub Actions Marketplace ospita migliaia di azioni della community e ufficiali per le attività più comuni. Microsoft pubblica azioni Azure ufficiali: azure/login, azure/webapps-deploy, azure/aks-set-context, azure/k8s-deploy, azure/CLI, azure/arm-deploy e molte altre. Blocchi sempre le azioni a uno specifico tag di versione (ad esempio @v3) o a uno SHA di commit, per prevenire attacchi alla supply chain dovuti all'aggiornamento di un'azione compromessa con codice dannoso.

# Pin actions to specific version (recommended)
- uses: actions/checkout@v4         # Pinned to v4 tag
- uses: azure/login@v2               # Pinned to v2
- uses: azure/webapps-deploy@v3      # Pinned to v3

# Extra security: pin to commit SHA
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683

# Avoid unpinned 'latest' or branch references
# - uses: some-action@main           # UNSAFE - could change at any time

Runner self-hosted per reti private

I runner gestiti da GitHub hanno accesso solo a Internet pubblico: non possono raggiungere risorse Azure private (database SQL, API interne) senza esporre pubblicamente tali risorse. Utilizzi runner self-hosted su VM Azure all'interno della Sua VNet per le distribuzioni verso risorse private. Registri un runner scaricando l'agente runner di GitHub Actions, configurandolo con l'URL del repository e il token di registrazione e avviandolo come servizio. Ridimensioni i runner self-hosted con Azure Container Apps per ottenere pool di runner elastici.

# Register a self-hosted runner on an Azure VM
# 1. Download runner (run on the VM)
curl -O -L https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-linux-x64-2.317.0.tar.gz
mkdir actions-runner && tar xzf ./actions-runner-linux-x64-2.317.0.tar.gz -C actions-runner
cd actions-runner

# 2. Configure (use token from GitHub Settings > Actions > Runners)
./config.sh --url https://github.com/myorg/myrepo --token <REGISTRATION_TOKEN>

# 3. Run as a service
sudo ./svc.sh install && sudo ./svc.sh start

# Use in workflow
# runs-on: self-hosted

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 i workflow di GitHub Actions sono file YAML in .github/workflows/, attivati dagli eventi di GitHub ed eseguiti sui runner; le credenziali federate OIDC consentono l'autenticazione ad Azure da GitHub Actions senza segreti; gli Environments di GitHub con regole di protezione aggiungono gate di approvazione alle distribuzioni in produzione. Con questo si conclude il corso su Azure DevOps; ora passeremo ad Azure Monitor e Log Analytics.

Domande Frequenti

La lezione «GitHub Actions su Azure» è gratuita?

Sì — il testo completo di «GitHub Actions su Azure» è 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 «GitHub Actions su Azure»?

Replichi il workflow CI/CD usando GitHub Actions con l'azione azure/webapps-deploy e comprenda quando scegliere GitHub Actions invece di Azure Pipelines. 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 «GitHub Actions su Azure»?

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

  1. Panoramica di Azure DevOps Services
  2. Creazione di una pipeline CI con Azure Pipelines
  3. Distribuzione continua in Azure
  4. GitHub Actions su Azure
← Torna a Cloud & IT Cert Prep