Usare .NET SDK in ambienti di integrazione continua (CI)

Questo articolo illustra come usare .NET SDK e i relativi strumenti in un server di compilazione. Il set di strumenti di .NET funziona interattivamente, quando uno sviluppatore digita i comandi al prompt dei comandi, e automaticamente, quando un server di integrazione continua (CI) esegue uno script di compilazione. I comandi, le opzioni, gli input e gli output sono uguali, e gli unici elementi da specificare sono un modo per acquisire gli strumenti e un sistema per compilare l'app. Questo articolo illustra specificatamente gli scenari di acquisizione degli strumenti per CI e include consigli su come progettare e strutturare gli script di compilazione.

Opzioni di installazione per i server di compilazione di integrazione continua

Se si usa GitHub, l'installazione è semplice. È possibile fare affidamento su GitHub Actions per installare .NET SDK nel flusso di lavoro. Il modo consigliato per installare .NET SDK in un flusso di lavoro consiste nell'azione actions/setup-net-core-sdk. Per altre informazioni, vedere l'azione Configurare .NET Core SDK nel marketplace GitHub. Per esempi di funzionamento, vedere Avvio rapido: Creare un flusso di lavoro GitHub di convalida della compilazione.

Programmi di installazione nativi

Sono disponibili programmi di installazione nativi per macOS, Linux e Windows. I programmi di installazione richiedono l'accesso amministratore (sudo) al server di compilazione. L'uso di un programma di installazione nativo offre il vantaggio di installare tutte le dipendenze native necessarie per l'esecuzione degli strumenti. I programmi di installazione nativi offrono anche un'installazione a livello di sistema dell'SDK.

Gli utenti di macOS devono usare i programmi di installazione PKG. In Linux è possibile scegliere di usare un sistema di gestione pacchetti basato su feed, ad esempio apt-get per Ubuntu o yum per CentOS, oppure i pacchetti stessi DEB o RPM. In Windows usare il programma di installazione MSI.

I file binari stabili più recenti sono reperibili in .NET downloads (Download di .NET). Se si vuole usare gli strumenti della versione non definitiva più recente (e potenzialmente instabile), vedere i collegamenti riportati nel repository GitHub dotnet/installer. Per le distribuzioni di Linux, sono disponibili gli archivi tar.gz (noti anche come tarballs). Usare gli script di installazione all'interno degli archivi per installare .NET.

Script di installazione

L'uso dello script di installazione consente di installare il sistema senza privilegi amministrativi nel server di compilazione e offre un'automazione semplice per ottenere gli strumenti. Lo script esegue automaticamente il download e l'estrazione degli strumenti in un percorso predefinito o specificato per l'uso. È anche possibile specificare la versione degli strumenti che si vogliono installare e se si vuole installare l'intero SDK o solo il runtime condiviso.

Lo script di installazione viene automatizzato per essere eseguito all'inizio della compilazione per recuperare e installare la versione necessaria dell'SDK. La versione necessaria è la versione dell'SDK più adatta per compilare i progetti. Lo script consente di installare l'SDK in una directory locale del server, eseguire gli strumenti dal percorso di installazione e quindi pulire (o consentire al servizio CI di eseguire la pulizia) al termine della compilazione. Ciò consente incapsulamento e isolamento per l'intero processo di compilazione. I riferimenti agli script di installazione sono reperibili nell'articolo dotnet-install.

Nota

Servizi di Azure DevOps

Quando si usa lo script di installazione, le dipendenze native non vengono installate automaticamente. È necessario installare le dipendenze native, se non sono già presenti nel sistema operativo. Per altre informazioni, vedere dipendenze e requisiti di .NET.

Esempi di installazione di CI

Questa sezione illustra un'installazione manuale tramite uno script di PowerShell o Bash e include la descrizione di soluzioni CI SaaS (software come un servizio). Le soluzioni CI SaaS illustrate sono Travis CI, AppVeyor e Azure Pipelines. Per GitHub Actions, vedere GitHub Actions e .NET

Configurazione manuale

Ogni servizio SaaS ha i propri metodi per la creazione e la configurazione di un processo di compilazione. Se si usano soluzioni SaaS diversi da quelli elencati o è necessaria una personalizzazione del supporto non inclusa nei pacchetti predefiniti, si devono eseguire alcune configurazioni manuali.

In genere, un'installazione manuale deve ottenere una versione di strumenti (o le compilazioni notturne più recente degli strumenti) ed eseguire lo script di compilazione. È possibile usare uno script di PowerShell o Bash per orchestrare i comandi di .NET o usare un file di progetto che descriva il processo di compilazione. La sezione sull'orchestrazione offre più dettagli su queste opzioni.

Dopo aver creato uno script che esegue un'installazione manuale del server di compilazione CI, usarlo nel computer di sviluppo per compilare il codice localmente a scopo di test. Dopo aver verificato che lo script viene eseguito correttamente nel computer locale, distribuirlo al server di compilazione CI. Di seguito viene specificato uno script di PowerShell relativamente semplice che illustra come ottenere .NET SDK e installarlo in un server di compilazione di Windows:

L'implementazione per il processo di compilazione viene specificata alla fine dello script. Lo script acquisisce gli strumenti e quindi esegue il processo di compilazione.

$ErrorActionPreference="Stop"
$ProgressPreference="SilentlyContinue"

# $LocalDotnet is the path to the locally-installed SDK to ensure the
#   correct version of the tools are executed.
$LocalDotnet=""
# $InstallDir and $CliVersion variables can come from options to the
#   script.
$InstallDir = "./cli-tools"
$CliVersion = "6.0.7"

# Test the path provided by $InstallDir to confirm it exists. If it
#   does, it's removed. This is not strictly required, but it's a
#   good way to reset the environment.
if (Test-Path $InstallDir)
{
    rm -Recurse $InstallDir
}
New-Item -Type "directory" -Path $InstallDir

Write-Host "Downloading the CLI installer..."

# Use the Invoke-WebRequest PowerShell cmdlet to obtain the
#   installation script and save it into the installation directory.
Invoke-WebRequest `
    -Uri "https://dot.net/v1/dotnet-install.ps1" `
    -OutFile "$InstallDir/dotnet-install.ps1"

Write-Host "Installing the CLI requested version ($CliVersion) ..."

# Install the SDK of the version specified in $CliVersion into the
#   specified location ($InstallDir).
& $InstallDir/dotnet-install.ps1 -Version $CliVersion `
    -InstallDir $InstallDir

Write-Host "Downloading and installation of the SDK is complete."

# $LocalDotnet holds the path to dotnet.exe for future use by the
#   script.
$LocalDotnet = "$InstallDir/dotnet"

# Run the build process now. Implement your build script here.

Travis CI

È possibile configurare Travis CI per installare .NET SDK usando il linguaggio csharp e la chiave dotnet. Per altre informazioni, vedere i documenti ufficiali di Travis CI in Building a C#, F#, or Visual Basic Project (Compilazione di un progetto C#, F# o Visual Basic). Quando si accede alle informazioni su Travis CI si noti che l'identificatore del linguaggio language: csharp gestito dalla community funziona per tutti i linguaggi .NET, inclusi F# e Mono.

Travis CI esegue entrambi i processi macOS e Linux in una matrice di compilazione, in cui si specifica una combinazione di runtime, ambiente ed esclusioni/inclusioni per includere le combinazioni di compilazione per l'app. Per altre informazioni, vedere Customizing the Build (Personalizzazione della compilazione) nella documentazione di Travis CI. Gli strumenti basati su MSBuild includono i runtime LTS (supporto a lungo termine) e STS (supporto a termine standard) nel pacchetto. Per questo motivo, l'installazione dell'SDK installa tutti gli elementi necessari per la compilazione.

AppVeyor

AppVeyor installa .NET 6 SDK con l'immagine di lavoro della build Visual Studio 2022. Sono disponibili altre immagini di compilazione con versioni diverse di .NET SDK. Per altre informazioni, vedere l'articolo Compilare immagini di lavoro nella documentazione di AppVeyor.

I file binari di .NET SDK vengono scaricati ed estratti in una sottodirectory tramite lo script di installazione e aggiunti alla variabile di ambiente PATH. Aggiungere una matrice di compilazione per eseguire test di integrazione con più versioni di .NET SDK:

environment:
  matrix:
    - CLI_VERSION: 6.0.7
    - CLI_VERSION: Latest

Servizi di Azure DevOps

Configurare Azure DevOps Services per compilare i progetti .NET usando uno di questi approcci:

  • Eseguire lo script del passaggio di installazione manuale usando i comandi.
  • Creare una build composta da diverse attività di compilazione incorporate di Azure DevOps Services configurate per usare gli strumenti di .NET.

Entrambe le soluzioni sono valide. Tramite uno script di installazione manuale, si controlla la versione degli strumenti ricevuti, dopo averli scaricati come parte della compilazione. La compilazione viene eseguita da uno script che deve essere creato. Questo articolo descrive solo l'opzione manuale. Per altre informazioni sulla creazione di una build con le attività di compilazione di Azure DevOps Services, vedere la documentazione di Azure Pipelines.

Per usare uno script di installazione manuale in Azure DevOps Services, creare una nuova definizione di compilazione e specificare lo script da eseguire per l'istruzione di compilazione. Questa operazione viene eseguita tramite l'interfaccia utente di Azure DevOps Services:

  1. Iniziare con la creazione di una nuova definizione di compilazione. Quando viene visualizzata la schermata che offre un'opzione per definire il tipo di compilazione da creare, selezionare Vuota.

    Selecting an empty build definition

  2. Dopo aver configurato il repository per la compilazione, si viene indirizzati alle definizioni della compilazione. Selezionare Aggiungi istruzione di compilazione:

    Adding a build step

  3. Viene visualizzato il catalogo delle attività. Il catalogo include le attività da usare nella compilazione. Poiché è disponibile uno script, selezionare il pulsante Aggiungi di PowerShell: Consente di eseguire uno script PowerShell.

    Adding a PowerShell script step

  4. Configurare l'istruzione di compilazione. Aggiungere lo script dal repository che si sta creando:

    Specifying the PowerShell script to run

Orchestrazione della compilazione

La maggior parte di questo documento illustra come acquisire gli strumenti di .NET e configurare i vari servizi CI senza specificare le informazioni su come orchestrare, o compilare effettivamente, il codice con .NET. Le scelte su come strutturare il processo di compilazione dipendono da molti fattori che non possono essere illustrati in modo generico. Per altre informazioni sull'orchestrazione delle compilazioni con ogni tecnologia, vedere le risorse e gli esempi inclusi nei set di documentazione di Travis CI, AppVeyor e Azure Pipelines.

Due approcci generali accettati nella strutturazione del processo di compilazione per il codice .NET tramite gli strumenti di .NET consistono nell'usare MSBuild direttamente o i comandi della riga di comando di .NET. L'approccio da adottare è determinato dal livello di esperienza con gli approcci e dai pro e contro in termini di complessità. MSBuild offre la possibilità di esprimere il processo di compilazione come attività e destinazioni, ma è accompagnato dalla complessità nel dover imparare la sintassi dei file di progetto di MSBuild. L'uso degli strumenti da riga di comando di .NET è probabilmente più semplice, ma richiede la scrittura logica di orchestrazione in un linguaggio di scripting, ad esempio bash o PowerShell.

Suggerimento

Una proprietà MSBuild che si vuole impostare su true è ContinuousIntegrationBuild. Questa proprietà abilita le impostazioni che si applicano solo alle build ufficiali anziché alle build di sviluppo locali.

Vedi anche