Använda .NET SDK i ci-miljöer (continuous integration)

Den här artikeln beskriver hur du använder .NET SDK och dess verktyg på en byggserver. .NET-verktygsuppsättningen fungerar både interaktivt, där en utvecklare skriver kommandon i en kommandotolk och automatiskt, där en CI-server (kontinuerlig integrering) kör ett byggskript. Kommandon, alternativ, indata och utdata är desamma, och det enda du anger är ett sätt att hämta verktygen och ett system för att skapa din app. Den här artikeln fokuserar på scenarier med verktygsförvärv för CI med rekommendationer om hur du utformar och strukturerar byggskript.

Installationsalternativ för CI-byggservrar

Om du använder GitHub är installationen enkel. Du kan använda GitHub Actions för att installera .NET SDK i arbetsflödet. Det rekommenderade sättet att installera .NET SDK i ett arbetsflöde är med åtgärden actions/setup-net-core-sdk . Mer information finns i åtgärden Konfigurera .NET Core SDK på GitHub Marketplace. Exempel på hur detta fungerar finns i Snabbstart: Skapa ett GitHub-arbetsflöde för byggvalidering.

Inbyggda installationsprogram

Inbyggda installationsprogram är tillgängliga för macOS, Linux och Windows. Installationsprogrammet kräver administratörsåtkomst (sudo) till byggservern. Fördelen med att använda ett internt installationsprogram är att det installerar alla inbyggda beroenden som krävs för att verktygen ska köras. Interna installationsprogram tillhandahåller också en systemomfattande installation av SDK:et.

macOS-användare bör använda PKG-installationsprogrammet. I Linux finns det ett val att använda en feedbaserad pakethanterare, till exempel apt-get för Ubuntu eller yum för CentOS, eller att använda själva paketen, DEB eller RPM. I Windows använder du MSI-installationsprogrammet.

De senaste stabila binärfilerna finns vid .NET-nedladdningar. Om du vill använda den senaste (och potentiellt instabila) förhandsversionen av verktyget använder du länkarna på GitHub-lagringsplatsen dotnet/installer. För Linux-distributioner tar.gz är arkiv (även kallade tarballs) tillgängliga. Använd installationsskripten i arkiven för att installera .NET.

Installationsskript

Med hjälp av installationsskriptet kan du installera på byggservern utan administration och enkel automatisering för att hämta verktygen. Skriptet tar hand om att ladda ned verktyget och extrahera det till en standard eller angiven plats för användning. Du kan också ange en version av verktygen som du vill installera och om du vill installera hela SDK:t eller endast den delade körningen.

Installationsskriptet automatiseras för att köras i början av bygget för att hämta och installera den önskade versionen av SDK:et. Den önskade versionen är den version av SDK som dina projekt behöver för att bygga. Med skriptet kan du installera SDK:t i en lokal katalog på servern, köra verktygen från den installerade platsen och sedan rensa (eller låta CI-tjänsten rensas) efter bygget. Detta ger inkapsling och isolering till hela byggprocessen. Installationsskriptreferensen finns i artikeln dotnet-install .

Kommentar

Azure DevOps Services

När du använder installationsskriptet installeras inte interna beroenden automatiskt. Du måste installera de inbyggda beroendena om operativsystemet inte har dem. Mer information finns i .NET-beroenden och krav.

Exempel på CI-konfiguration

I det här avsnittet beskrivs en manuell konfiguration med hjälp av ett PowerShell- eller bash-skript, tillsammans med beskrivningar av SaaS CI-lösningar (programvara som en tjänst). De SaaS CI-lösningar som omfattas är Travis CI, AppVeyor och Azure Pipelines. Information om GitHub Actions finns i GitHub Actions och .NET

Manuell konfiguration

Varje SaaS-tjänst har sina metoder för att skapa och konfigurera en byggprocess. Om du använder en annan SaaS-lösning än de som anges eller kräver anpassning utöver det förpaketerade stödet måste du utföra minst en manuell konfiguration.

I allmänhet kräver en manuell installation att du skaffar en version av verktygen (eller de senaste nattliga versionerna av verktygen) och kör byggskriptet. Du kan använda ett PowerShell- eller bash-skript för att orkestrera .NET-kommandona eller använda en projektfil som beskriver byggprocessen. Orkestreringsavsnittet innehåller mer information om dessa alternativ.

När du har skapat ett skript som utför en manuell CI-byggserverkonfiguration använder du det på utvecklingsdatorn för att skapa koden lokalt i testsyfte. När du har bekräftat att skriptet körs bra lokalt distribuerar du det till ci-byggservern. Ett relativt enkelt PowerShell-skript visar hur du hämtar .NET SDK och installerar det på en Windows-byggserver:

Du tillhandahåller implementeringen för din byggprocess i slutet av skriptet. Skriptet hämtar verktygen och kör sedan byggprocessen.

$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

Du kan konfigurera Travis CI för att installera .NET SDK med hjälp av csharp språket och dotnet nyckeln. Mer information finns i de officiella Travis CI-dokumenten om att skapa ett C#-, F#- eller Visual Basic-projekt. Observera att när du kommer åt Travis CI-information fungerar den community-underhållna language: csharp språkidentifieraren för alla .NET-språk, inklusive F#och Mono.

Travis CI kör både macOS- och Linux-jobb i en byggmatris, där du anger en kombination av körning, miljö och undantag/inkluderingar för att täcka kompileringskombinationerna för din app. Mer information finns i artikeln Anpassa build i Travis CI-dokumentationen. De MSBuild-baserade verktygen innehåller long-term support (LTS) och sts-runtimes (standard-term support) i paketet. så genom att installera SDK får du allt du behöver för att skapa.

AppVeyor

AppVeyor installerar .NET 6 SDK med build worker-avbildningen Visual Studio 2022 . Andra build-avbildningar med olika versioner av .NET SDK är tillgängliga. Mer information finns i artikeln Skapa arbetarbilder i AppVeyor-dokumenten.

.NET SDK-binärfilerna laddas ned och packas upp i en underkatalog med hjälp av installationsskriptet och läggs sedan till i PATH miljövariabeln. Lägg till en byggmatris för att köra integreringstester med flera versioner av .NET SDK:

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

Azure DevOps Services

Konfigurera Azure DevOps Services för att skapa .NET-projekt med någon av följande metoder:

  • Kör skriptet från det manuella installationssteget med hjälp av dina kommandon.
  • Skapa en version som består av flera inbyggda bygguppgifter i Azure DevOps Services som är konfigurerade att använda .NET-verktyg.

Båda lösningarna är giltiga. Med hjälp av ett manuellt installationsskript styr du den version av verktygen som du får eftersom du laddar ned dem som en del av bygget. Versionen körs från ett skript som du måste skapa. Den här artikeln beskriver endast det manuella alternativet. Mer information om hur du skapar en version med Azure DevOps Services-bygguppgifter finns i Azure Pipelines-dokumentationen.

Om du vill använda ett manuellt installationsskript i Azure DevOps Services skapar du en ny versionsdefinition och anger skriptet som ska köras för byggsteget. Detta görs med hjälp av användargränssnittet för Azure DevOps Services:

  1. Börja med att skapa en ny versionsdefinition. När du når skärmen som ger dig ett alternativ för att definiera vilken typ av bygge du vill skapa väljer du alternativet Tom .

    Selecting an empty build definition

  2. När du har konfigurerat lagringsplatsen för att skapa dirigeras du till byggdefinitionerna. Välj Lägg till byggsteg:

    Adding a build step

  3. Du visas med uppgiftskatalogen. Katalogen innehåller uppgifter som du använder i bygget. Eftersom du har ett skript väljer du knappen Lägg till för PowerShell: Kör ett PowerShell-skript.

    Adding a PowerShell script step

  4. Konfigurera byggsteget. Lägg till skriptet från lagringsplatsen som du skapar:

    Specifying the PowerShell script to run

Orkestrera bygget

Det mesta av det här dokumentet beskriver hur du hämtar .NET-verktygen och konfigurerar olika CI-tjänster utan att ge information om hur du samordnar eller faktiskt skapar din kod med .NET. Valet av hur byggprocessen ska struktureras beror på många faktorer som inte kan omfattas på ett allmänt sätt här. Mer information om hur du samordnar dina versioner med varje teknik finns i de resurser och exempel som finns i dokumentationsuppsättningarna för Travis CI, AppVeyor och Azure Pipelines.

Två allmänna metoder som du använder för att strukturera byggprocessen för .NET-kod med hjälp av .NET-verktygen använder MSBuild direkt eller med hjälp av .NET-kommandoradskommandona. Vilken metod du bör ha bestäms av din komfortnivå med metoder och kompromisser i komplexitet. MSBuild ger dig möjlighet att uttrycka din byggprocess som uppgifter och mål, men det kommer med den extra komplexiteten i att lära sig MSBuild-projektfilsyntax. Det är kanske enklare att använda .NET-kommandoradsverktygen, men du måste skriva orkestreringslogik på ett skriptspråk som bash eller PowerShell.

Dricks

En MSBuild-egenskap som du vill ange till true är ContinuousIntegrationBuild. Den här egenskapen aktiverar inställningar som endast gäller för officiella byggen i stället för lokala utvecklingsversioner.

Se även