Guida introduttiva: Creare un flusso di lavoro GitHub per pubblicare un'app

In questa guida introduttiva, si apprenderà come creare un flusso di lavoro GitHub per pubblicare l'app .NET dal codice sorgente. La pubblicazione automatica dell'app .NET da GitHub in una destinazione viene definita distribuzione continua (CD). Esistono diverse destinazioni possibili per pubblicare un'applicazione. Nella presente guida introduttiva si pubblicherà in Azure.

Prerequisiti

  • Un account GitHub.
  • Repository del codice sorgente .NET.
  • Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
  • App Web ASP.NET Core.
  • Risorsa Servizio app di Azure.

Aggiungere il profilo di pubblicazione

Per pubblicare l'app in Azure, aprire il portale di Azure per l'istanza di Servizio app dell'applicazione. Nella panoramica della risorsa, selezionare Recupera profilo di pubblicazione e salvare il file* .PublishSetting localmente.

Azure Portal, App Service resource: Get publish profile

Avviso

Il profilo di pubblicazione contiene informazioni riservate, ad esempio le credenziali per l'accesso alla risorsa del Servizio app di Azure. Queste informazioni dovrebbero essere sempre trattate con molta attenzione.

Nel repository GitHub, passare a Impostazioni e selezionare Segreti dal menu di spostamento a sinistra. Selezionare Nuovo segreto del repository per aggiungere un nuovo segreto.

GitHub / Settings / Secret: Add new repository secret

Immettere AZURE_PUBLISH_PROFILE come Nome e incollare il contenuto XML dal profilo di pubblicazione nell'area testoValore. Selezionare Aggiungi segreto. Per ottenere ulteriori informazioni, vedere la sezione Segreti crittografati.

Creare un file del flusso di lavoro

Nel repository GitHub, aggiungere un nuovo file YAML alla directory .github/workflows. Scegliere un nome di file significativo, qualcosa che indichi chiaramente lo scopo del flusso di lavoro. Per ottenere ulteriori informazioni, vedere la sezione File del flusso di lavoro.

Importante

GitHub richiede che i file di composizione del flusso di lavoro vengano inseriti nella directory .github/workflows.

I file del flusso di lavoro definiscono in genere una composizione di una o più azioni GitHub tramite jobs.<job_id>/steps[*]. Per ottenere ulteriori informazioni, consultare l'articolo Sintassi del flusso di lavoro per GitHub Actions.

Creare un nuovo file denominato publish-app.yml, quindi copiare e incollare i contenuti YML seguenti al suo interno:

name: publish

on:
  push:
    branches: [ production ]

env:
  AZURE_WEBAPP_NAME: DotNetWeb
  AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root:
  DOTNET_VERSION: '6.0.401' # The .NET SDK version to use

jobs:
  publish:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: Install dependencies
      run: dotnet restore
      
    - name: Build
      run: |
        cd DotNet.WebApp
        dotnet build --configuration Release --no-restore
        dotnet publish -c Release -o ../dotnet-webapp -r linux-x64 --self-contained true /p:UseAppHost=true
    - name: Test
      run: |
        cd DotNet.WebApp.Tests
        dotnet test --no-restore --verbosity normal
      
    - uses: azure/webapps-deploy@v2
      name: Deploy
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
        package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/dotnet-webapp'

Nella composizione del flusso di lavoro precedente:

  • name: publish definisce il nome, verrà visualizzato il messaggio "publish" nelle notifiche di stato del flusso di lavoro.

    name: publish
    
  • Il nodo on indica gli eventi che attivano il flusso di lavoro:

    on:
      push:
        branches: [ production ]
    
    • Attivato quando si verifica un oggetto push nel ramo production.
  • Il nodo env definisce le variabili di ambiente denominate (env var).

    env:
      AZURE_WEBAPP_NAME: DotNetWeb
      AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root:
      DOTNET_VERSION: '6.0.401' # The .NET SDK version to use
    
    • La variabile di ambiente AZURE_WEBAPP_NAME viene assegnata al valore DotNetWeb.
    • La variabile di ambiente AZURE_WEBAPP_PACKAGE_PATH viene assegnata al valore '.'.
    • La variabile di ambiente DOTNET_VERSION viene assegnata al valore '6.0.401'. Successivamente verrà fatto riferimento alla variabile di ambiente per specificare l'oggetto dotnet-version dell'azione GitHub actions/setup-dotnet@v3.
  • Il nodo jobs compila i passaggi da eseguire per il flusso di lavoro.

    jobs:
      publish:
    
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v3
        - name: Setup .NET Core
          uses: actions/setup-dotnet@v3
          with:
            dotnet-version: ${{ env.DOTNET_VERSION }}
    
        - name: Install dependencies
          run: dotnet restore
          
        - name: Build
          run: |
            cd DotNet.WebApp
            dotnet build --configuration Release --no-restore
            dotnet publish -c Release -o ../dotnet-webapp -r linux-x64 --self-contained true /p:UseAppHost=true
        - name: Test
          run: |
            cd DotNet.WebApp.Tests
            dotnet test --no-restore --verbosity normal
          
        - uses: azure/webapps-deploy@v2
          name: Deploy
          with:
            app-name: ${{ env.AZURE_WEBAPP_NAME }}
            publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
            package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/dotnet-webapp'
    
    • Esiste un singolo processo denominato publish che verrà eseguito nella versione più recente di Ubuntu.
    • L'azione GitHub actions/setup-dotnet@v3 è utilizzata per configurare .NET SDK con la versione specificata dalla variabile di ambiente DOTNET_VERSION.
    • Viene chiamato il comando dotnet restore.
    • Viene chiamato il comando dotnet build.
    • Viene chiamato il comando dotnet publish.
    • Viene chiamato il comando dotnet test.
    • L'azione GitHub azure/webapps-deploy@v2 distribuisce l'app con gli oggetti specificati publish-profile e package.
      • L'oggetto publish-profile viene assegnato dal segreto del repository AZURE_PUBLISH_PROFILE.

Creare una notifica di stato del flusso di lavoro

È una nomenclatura comune per i repository GitHub avere un file README.md nella radice della directory del repository. Analogamente, è utile poter segnalare lo stato più recente per vari flussi di lavoro. Tutti i flussi di lavoro possono generare una notifica di stato visivamente accattivante all'interno del file README.md. Per aggiungere la notifica di stato del flusso di lavoro:

  1. Nel repository GitHub selezionare l'opzione di spostamento Azioni.

  2. Tutti i flussi di lavoro del repository vengono visualizzati sul lato sinistro, selezionare il flusso di lavoro desiderato e i puntini di sospensione (...).

    • Il pulsante con i puntini di sospensione (...) espande le opzioni del menu per il flusso di lavoro selezionato.
  3. Selezionare l'opzione del menu Crea notifica di stato.

    GitHub: Create status badge

  4. Selezionare il pulsante Copia markdown notifica di stato.

    GitHub: Copy status badge Markdown

  5. Incollare il markdown nel file README.md, salvare il file, eseguire il commit ed eseguire il push delle modifiche.

Per ottenere ulteriori informazioni, vedere Aggiunta di una notifica di stato del flusso di lavoro.

Esempio di notifica di stato del flusso di lavoro di pubblicazione

Superamento Fallito Nessuno stato
GitHub: publish passing badge GitHub: publish failing badge GitHub: publish no-status badge

Vedi anche

Passaggi successivi