Guida introduttiva: Usare GitHub Actions per connettersi al server flessibile Database di Azure per PostgreSQL

Introduzione a GitHub Actions usando un flusso di lavoro per distribuire gli aggiornamenti del database in Database di Azure per PostgreSQL.

Prerequisiti

È necessario:

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 Tasks
Autenticazione 1. Generare le credenziali per la distribuzione.
Distribuisci 1. Implementare il database.

Generare le credenziali per la distribuzione

Per usare l'azione di accesso di Azure con OIDC, è necessario configurare una credenziale di identità federata in un'applicazione Microsoft Entra o in un'identità gestita assegnata dall'utente.

Opzione 1: applicazione Microsoft Entra

Opzione 2: identità gestita assegnata dall'utente

Copiare la stringa di connessione del Database Azure per PostgreSQL

Nel portale di Azure, vai al tuo server flessibile di Database di Azure per PostgreSQL. Dal menu della risorsa, in Impostazioni, selezionare Connetti. In tale pagina utilizzare la casella combinata Nome database per selezionare il nome del database a cui connettersi. Espandere la sezione Connetti dalla tua app e copiare il stringa di connessione ADO.NET. Sostituire il valore segnaposto {your_password} con la password effettiva. La stringa di connessione è simile a questa.

Server={servername.postgres.database.azure.com};Database={your_database};Port=5432;User Id={adminusername};Password={your_password};Ssl Mode=Require;

Usa la stringa di connessione come segreto di GitHub.

Configurare i segreti GitHub

È necessario specificare l'ID client, l'ID directory (tenant) e l'ID della sottoscrizione della tua applicazione nell'azione di accesso. Questi valori possono essere forniti direttamente nel flusso di lavoro oppure possono essere archiviati nei segreti gitHub e riportati nel flusso di lavoro. Il salvataggio dei valori come segreti GitHub è l'opzione più sicura.

  1. In GitHub, andare al proprio repository.

  2. Selezionare Sicurezza > Segreti e variabili > Azioni.

    Screenshot dell'aggiunta di un segreto

  3. Selezionare Nuovo segreto del repository.

    Annotazioni

    Per migliorare la sicurezza del flusso di lavoro nei repository pubblici, usare i segreti dell'ambiente anziché i segreti del repository. Se l'ambiente richiede l'approvazione, un processo non può accedere ai segreti dell'ambiente finché uno dei revisori necessari non lo approva.

  4. Creare segreti per AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_SUBSCRIPTION_ID. Copiare questi valori dall'applicazione Microsoft Entra o dall'identità gestita assegnata dall'utente per i segreti GitHub:

    Segreto GitHub Applicazione Microsoft Entra o identità gestita assegnata dall'utente
    AZURE_CLIENT_ID ID cliente
    AZURE_SUBSCRIPTION_ID ID sottoscrizione
    AZURE_TENANT_ID ID della directory (tenant)

    Annotazioni

    Per motivi di sicurezza, è consigliabile usare i segreti di GitHub anziché passare i valori direttamente al flusso di lavoro.

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. Ad esempio, il flusso di lavoro rimanente può essere simile al codice seguente.

    name: CI
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
  4. Rinominare il flusso di lavoro PostgreSQL for GitHub Actions e aggiungere le azioni di checkout e accesso. Queste azioni controllano il codice del sito ed eseguono l'autenticazione con Azure usando i segreti GitHub creati in precedenza.

    name: PostgreSQL for GitHub Actions
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
    jobs:
    build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v1
        - uses: azure/login@v2
        with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  5. Usa l'azione Azure PostgreSQL Deploy per connetterti al server flessibile di Database di Azure per PostgreSQL. Sostituire POSTGRESQL_SERVER_NAME con il nome del server. Dovrebbe essere presente un file di dati di Database di Azure per PostgreSQL denominato data.sql a livello radice del repository.

     - uses: azure/postgresql@v1
       with:
        connection-string: ${{ secrets.AZURE_POSTGRESQL_CONNECTION_STRING }}
        server-name: POSTGRESQL_SERVER_NAME
        plsql-file: './data.sql'
    
  6. 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: PostgreSQL for GitHub Actions
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
    
    jobs:
    build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v1
        - uses: azure/login@v2
        with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
    - uses: azure/postgresql@v1
      with:
        server-name: POSTGRESQL_SERVER_NAME
        connection-string: ${{ secrets.AZURE_POSTGRESQL_CONNECTION_STRING }}
        plsql-file: './data.sql'
    
        # 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 e il repository di Database di Azure per PostgreSQL non sono più necessari, pulire le risorse distribuite eliminando il gruppo di risorse e il repository GitHub.