Planera dina bygguppgifter
Mara har nu en kopia av Space Game-koden . Hon kommer att bygga den med Hjälp av Microsoft Azure Pipelines i stället för den befintliga Ubuntu 22.04-byggservern. Innan hon kan göra det behöver hon tänka på de befintliga byggskripten. Följ med när hon mappar de befintliga skripten till Azure Pipelines-uppgifter. Tänk på hur du kan göra samma sak med din egen byggprocess.
Här är några anteckningar som Mara samlade in när hon pratade med Andy, utvecklingsledaren:
- Byggdatorn kör Ubuntu 22.04.
- Byggdatorn innehåller byggverktyg som:
- npm, pakethanteraren för Node.js
- NuGet, pakethanteraren för .NET
- .NET SDK
- Projektet använder Syntactically Awesome Style Sheets (Sass) för att göra det enklare att skapa CSS-filer (cascading style sheets).
- Projektet använder gulp toolkit för att minimera JavaScript- och CSS-filer.
En minifierad tillgång exkluderar onödiga data (till exempel blanksteg) och förkortar variabelnamn för att hjälpa den att ladda ned snabbare.
Här är de steg som sker under byggprocessen:
- Om du vill installera de Node.js paket som definierats i
package.json
kör dunpm install
. - Om du vill konvertera Sass-filer (.scss) till CSS-filer (.css) kör du
node-sass
. - Om du vill minimera JavaScript- och CSS-filer kör du
gulp
. - Skriv ut bygginformation till katalogen för att hjälpa QA-teamet att
wwwroot
identifiera versionsnumret och datumet. - Om du vill installera projektets beroenden kör du
dotnet restore
. - Om du vill skapa appen under både felsöknings- och versionskonfigurationer kör du
dotnet build
. - Om du vill paketera programmet som en .zip fil och kopiera resultatet till en nätverksresurs som QA-teamet kan hämta kör
dotnet publish
du .
Mara bygger ett kommandoskript som utför de uppgifter hon har identifierat. Hon kör det på sin bärbara dator.
Kommentar
Du behöver inte köra det här skriptet eller förstå helt hur det fungerar. Det är här för att illustrera vad ett typiskt byggskript kan göra.
#!/bin/bash
# Install Node.js modules as defined in package.json.
npm install --quiet
# Compile Sass (.scss) files to standard CSS (.css).
node-sass Tailspin.SpaceGame.Web/wwwroot
# Minify JavaScript and CSS files.
gulp
# Print the date to wwwroot/buildinfo.txt.
echo `date` > Tailspin.SpaceGame.Web/wwwroot/buildinfo.txt
# Install the latest .NET packages the app depends on.
dotnet restore
# Build the app under the Debug configuration.
dotnet build --configuration Debug
# Publish the build to the /tmp directory.
dotnet publish --no-build --configuration Debug --output /tmp/Debug
# Build the app under the Release configuration.
dotnet build --configuration Release
# Publish the build to the /tmp directory.
dotnet publish --no-build --configuration Release --output /tmp/Release
Katalogen /tmp
imiterar teamets nätverksresurs.
När Mara har kört skriptet inser hon att det är ofullständigt. Till exempel hanterar det inte fel. Den meddelar inte någon om byggfel inträffar. Även om det finns fel fortsätter den att köras. Det installerar heller inte de verktyg som varje steg kräver.
Vad är Azure Pipelines-uppgifter?
I Azure Pipelines är en uppgift ett paketerat skript eller en procedur som har abstraherats med en uppsättning indata.
En Azure Pipelines-uppgift abstraherar bort den underliggande informationen. Den här abstraktionen gör det enklare att köra vanliga byggfunktioner, som att ladda ned byggverktyg eller paket som appen är beroende av, eller att skapa projektet, köra Visual Studio eller Xcode.
Här är ett exempel som använder uppgiften för att skapa ett C#-projekt som riktar sig mot DotNetCoreCLI@2
.NET:
task: DotNetCoreCLI@2
displayName: 'Build the project'
inputs:
command: 'build'
arguments: '--no-restore --configuration Release'
projects: '**/*.csproj'
Pipelinen översätter kanske den här uppgiften till följande kommando:
dotnet build MyProject.csproj --no-restore --configuration Release
Nu ska vi dela upp den här uppgiften lite mer:
- Uppgiften
DotNetCoreCLI@2
mappar till kommandotdotnet
. displayName
definierar det uppgiftsnamn som visas i användargränssnittet. Du kommer snart att se detta i praktiken.inputs
definierar argument som skickas till kommandot.command
anger at underkommandotdotnet build
ska köras.arguments
anger ytterligare argument som skickas till kommandot.projects
anger vilka projekt som ska skapas. I det här exemplet används jokerteckenmönstret**/*.csproj
. Både**
och*.csproj
är exempel på vad som kallas mönstermatchning med jokertecken. Delen**
anger att sökning ska ske i den aktuella katalogen och i alla underordnade kataloger. Delen*.csproj
anger alla .csproj-filer . Med jokertecken kan du agera på flera filer utan att ange var och en. Om du behöver vidta åtgärder för en viss fil kan du ange den filen i stället för att använda jokertecken.
"@" i aktivitetsnamnet– till exempel DotNetCoreCLI@2
– refererar till aktivitetens version. När nya uppgiftsversioner blir tillgängliga kan du gradvis migrera till den senaste versionen så att du kan använda de nya funktionerna.
Hur används uppgifter i en pipeline?
Nu ska Mara mappa befintliga skriptkommandon till Azure Pipelines-uppgifter. En pipeline skapas med hjälp av en YAML-fil, vilket är ett kompakt format som gör det enkelt att strukturera den typ av data som finns i konfigurationsfiler. YAML-filer för pipeline underhålls vanligtvis direkt med appens källkod.
Mara använde YAML tidigare för att definiera liknande bygguppgifter och konfigurationer. Hon gillar också tanken på att upprätthålla byggdefinitionen som kod, precis som hon skulle göra med någon annan del av sitt projekt.
För att definiera sitt bygge använder Mara Visual Studio Code för att skapa en YAML-fil. I den anger hon alla Azure Pipelines-uppgifter som hon ska använda för att ersätta de befintliga skriptkommandona.
Mappa skriptkommandon till Azure Pipelines-uppgifter
Nu följer du med när Mara mappar kommandon från hennes skript till Azure Pipelines-uppgifter.
Mara läser referensdokumentationen för mappning av varje kommando. Dokumentationen kategoriserar uppgifter efter funktion, till exempel skapa eller distribuera.
Till exempel hjälper .NET Core CLI-uppgiftenDotNetCoreCLI@2
dig att köra dotnet
kommandon.
Den här tabellen associerar skriptkommandona med de nya Azure Pipelines-uppgifterna:
Skriptkommando | Azure Pipelines-uppgift |
---|---|
npm install |
Npm@1 |
node-sass |
CmdLine@2 (eller script ) |
gulp |
gulp@1 |
echo `date` |
CmdLine@2 (eller script ) |
dotnet restore |
DotNetCoreCLI@2 |
dotnet build |
DotNetCoreCLI@2 |
dotnet publish |
DotNetCoreCLI@2 |
Det finns ingen inbyggd aktivitetstyp som kör node-sass
eller skriver ut datumet till en fil. För dessa använder Mara uppgiften CmdLine@2
, vilket gör att hon kan köra alla kommandon som hon vill. Uppgiften script
är vanligare och är en genväg för CmdLine@2
. Mer information om de andra vanliga uppgiftsgenvägarna finns i YAML-schemareferens för Azure Pipelines – steg.
Du kommer snart att skapa en egen YAML-fil som använder dessa uppgifter.