Usare GitHub Actions per connettersi a Database SQL di Azure

Usare un flusso di lavoro GitHub Actions per distribuire aggiornamenti di database a Database SQL di Azure.

Prerequisiti

Prerequisiti:

Panoramica dei file del flusso di lavoro

Un flusso di lavoro GitHub Actions viene definito da un file YAML (con estensione yml) nel percorso /.github/workflows/ del repository. Questa definizione contiene i vari passaggi e i parametri che costituiscono il flusso di lavoro.

Il file è costituito da due sezioni:

Sezione Attività
autenticazione 1.1. Generare le credenziali di distribuzione.
Distribuzione 1. Distribuire il database.

Generare le credenziali per la distribuzione

È possibile creare un'entità servizio con il comando az ad sp create-for-rbac dell'interfaccia della riga di comando di Azure. Eseguire questo comando con Azure Cloud Shell nel portale di Azure oppure selezionando il pulsante Prova.

Sostituire il segnaposto server-name con il nome del server SQL ospitato in Azure. Sostituire subscription-id e resource-group con l'ID sottoscrizione e il gruppo di risorse connessi al server SQL.

   az ad sp create-for-rbac --name {server-name} --role contributor 
                            --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} 
                            --sdk-auth

L'output è un oggetto JSON con le credenziali di assegnazione di ruolo che forniscono l'accesso al database in modo simile a questo esempio. Copiare l'oggetto JSON di output per un uso successivo.

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

Importante

È sempre consigliabile concedere l'accesso minimo. L'ambito dell'esempio precedente è limitato al server specifico e non include l'intero gruppo di risorse.

Copiare la stringa di connessione SQL

Nel portale di Azure passare al database SQL di Azure e aprire Impostazioni>Stringhe di connessione. Copiare la stringa di connessione per ADO.NET. Sostituire i valori segnaposto your_database e your_password. La stringa di connessione avrà un aspetto simile a questo output.

    Server=tcp:my-sql-server.database.windows.net,1433;Initial Catalog={your-database};Persist Security Info=False;User ID={admin-name};Password={your-password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

La stringa di connessione verrà usata come segreto GitHub.

Configurare i segreti GitHub

  1. In GitHub esplorare il repository.

  2. Selezionare Impostazioni > segreti > Nuovo segreto.

  3. Incollare l'intero output JSON del comando dell'interfaccia della riga di comando di Azure nel campo del valore del segreto. Assegnare al segreto il nome AZURE_CREDENTIALS.

    Quando in seguito si configura il file del flusso di lavoro, si usa il segreto come creds di input dell'azione di accesso di Azure. Ad esempio:

    - uses: azure/login@v1
    with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}
    
  4. Selezionare di nuovo New secret (Nuovo segreto).

  5. Incollare il valore della stringa di connessione nel campo del valore del segreto. Assegnare al segreto il nome AZURE_SQL_CONNECTION_STRING.

Aggiungere il flusso di lavoro

  1. Passare ad Actions per il repository GitHub.

  2. Selezionare Set up your workflow yourself (Configurare manualmente il flusso di lavoro).

  3. Eliminare tutti quello che segue la sezione on: del file del flusso di lavoro. Il flusso di lavoro rimanente, ad esempio, potrà essere simile al seguente.

    name: CI
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
  4. Rinominare il flusso di lavoro SQL for GitHub Actions e aggiungere le azioni checkout e login. Queste azioni verificheranno il codice del sito ed eseguiranno l'autenticazione con Azure usando il AZURE_CREDENTIALS segreto GitHub creato in precedenza.

    name: SQL for GitHub Actions
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
    jobs:
    build:
        runs-on: windows-latest
        steps:
        - uses: actions/checkout@v1
        - uses: azure/login@v1
        with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
    

  1. Usare l'azione di distribuzione di Azure SQL per connettersi all'istanza di SQL. Sostituire SQL_SERVER_NAME con il nome del server. È necessario avere un pacchetto dacpac (Database.dacpac) al livello radice del repository.

    - uses: azure/sql-action@v1
      with:
        server-name: SQL_SERVER_NAME
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        dacpac-package: './Database.dacpac'
    
  2. Completare il flusso di lavoro aggiungendo un'azione di disconnessione da Azure. Ecco il flusso di lavoro completato. Il file verrà visualizzato nella cartella .github/workflows del repository.

    name: SQL for GitHub Actions
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
    
    jobs:
    build:
        runs-on: windows-latest
        steps:
        - uses: actions/checkout@v1
        - uses: azure/login@v1
        with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
    
    - uses: azure/sql-action@v1
      with:
        server-name: SQL_SERVER_NAME
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        dacpac-package: './Database.dacpac'
    
        # Azure logout 
    - name: logout
      run: |
         az logout
    

Esaminare la distribuzione

  1. Passare ad Actions per il repository GitHub.

  2. Aprire il primo risultato per visualizzare i log dettagliati dell'esecuzione del flusso di lavoro.

    Log di esecuzione di GitHub Actions

Pulire le risorse

Quando il database SQL di Azure e il repository non sono più necessari, pulire le risorse distribuite eliminando il gruppo di risorse e il repository GitHub.

Passaggi successivi