Planowanie zadań kompilacji

Ukończone

Mara ma teraz kopię kodu Space Game . Skompiluje ją przy użyciu usługi Microsoft Azure Pipelines zamiast istniejącego serwera kompilacji Ubuntu 22.04. Zanim będzie mogła to zrobić, musi zastanowić się nad istniejącymi skryptami kompilacji. Postępuj zgodnie z instrukcjami, jak mapuje istniejące skrypty na zadania usługi Azure Pipelines. Zastanów się, jak można to zrobić za pomocą własnego procesu kompilacji.

Oto kilka notatek, które Mara zebrała, kiedy rozmawiała z Andy, dev lead:

  • Na maszynie kompilacji działa system Ubuntu 22.04.
  • Maszyna kompilacji zawiera narzędzia kompilacji, takie jak:
    • npm — menedżer pakietów dla platformy Node.js
    • NuGet, menedżer pakietów dla platformy .NET
    • Zestaw SDK platformy .NET
  • Projekt używa syntactically Awesome Style Sheets (Sass), aby ułatwić tworzenie kaskadowych plików arkuszy stylów (CSS).
  • Projekt używa zestawu narzędzi gulp do minimalnej programowania plików JavaScript i CSS.

Zasób minyfikowany wyklucza niepotrzebne dane (na przykład białe znaki) i skraca nazwy zmiennych, aby ułatwić szybsze pobieranie.

Poniżej przedstawiono kroki wykonywane podczas procesu kompilacji:

  1. Aby zainstalować pakiety Node.js zdefiniowane w pliku package.json, uruchom polecenie npm install.
  2. Aby przekonwertować pliki Sass (scss) na pliki CSS (css), uruchom polecenie node-sass.
  3. Aby zminimalizować pliki JavaScript i CSS, uruchom polecenie gulp.
  4. Aby pomóc zespołowi ds. kontroli jakości zidentyfikować numer kompilacji i datę, wyświetl informacje o kompilacji w wwwroot katalogu.
  5. Aby zainstalować zależności projektu, uruchom polecenie dotnet restore.
  6. Aby skompilować aplikację zarówno w konfiguracjach debugowania, jak i wydania, uruchom polecenie dotnet build.
  7. Aby spakować aplikację jako plik zip i skopiować wyniki do udziału sieciowego, aby zespół qa podniósł, uruchom polecenie dotnet publish.

Mara tworzy skrypt powłoki, który wykonuje zidentyfikowane zadania. Ona działa na swoim laptopie.

Uwaga

Nie musisz uruchamiać tego skryptu ani całkowicie zrozumieć, co robi. W tym miejscu pokazano, co może zrobić typowy skrypt kompilacji.

#!/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

Katalog /tmp naśladuje udział sieciowy zespołu.

Po uruchomieniu scenariusza Mara zdaje sobie sprawę, że jest niekompletna. Na przykład nie zajmuje się błędami. Nie powiadamia nikogo, czy wystąpią błędy kompilacji. Nawet jeśli występują błędy, działa. Nie instaluje również narzędzi, których wymaga każdy krok.

Co to są zadania usługi Azure Pipelines?

W usłudze Azure Pipelines zadanie jest spakowanym skryptem lub procedurą, która została abstrakcyjna z zestawem danych wejściowych.

Zadanie usługi Azure Pipelines wyodrębnia podstawowe szczegóły. Ta abstrakcja ułatwia uruchamianie typowych funkcji kompilacji, takich jak pobieranie narzędzi kompilacji lub pakietów, od których zależy aplikacja, lub kompilowanie projektu, uruchamianie programu Visual Studio lub Xcode.

Aby utworzyć projekt w języku C#przeznaczony dla platformy .NET, oto przykład, który używa DotNetCoreCLI@2 zadania:

task: DotNetCoreCLI@2
  displayName: 'Build the project'
  inputs:
    command: 'build'
    arguments: '--no-restore --configuration Release'
    projects: '**/*.csproj'

Potok może przełożyć to zadanie na następujące polecenie:

dotnet build MyProject.csproj --no-restore --configuration Release

Podzielmy to zadanie na nieco więcej:

  • Zadanie DotNetCoreCLI@2 jest mapowe na dotnet polecenie .
  • displayName definiuje nazwę zadania wyświetlaną w interfejsie użytkownika. Zobaczysz to w akcji wkrótce.
  • inputs definiuje argumenty przekazywane do polecenia .
    • command określa, aby uruchomić dotnet build podpolecenia.
    • arguments Określa dodatkowe argumenty, które mają być przekazywane do polecenia.
    • projects określa, które projekty mają być kompilowanie. W tym przykładzie użyto wzorca **/*.csprojz symbolami wieloznacznymi . Oba ** i *.csproj są przykładami tego, co nazywa się wzorcem globu. Część ** określa przeszukiwanie bieżącego katalogu i wszystkich katalogów podrzędnych. Część *.csproj określa dowolny plik csproj . Symbole wieloznaczne umożliwiają wykonywanie działań na wielu plikach bez określania każdego z nich. Jeśli musisz użyć tylko określonego pliku, możesz określić ten plik zamiast używać symboli wieloznacznych.

Znak "@" w nazwie zadania, na przykład DotNetCoreCLI@2, odnosi się do wersji zadania. Gdy nowe wersje zadań staną się dostępne, możesz stopniowo migrować do najnowszej wersji, aby korzystać z nowych funkcji.

W jaki sposób zadania są używane w potoku?

Następnie Mara zamapuje istniejące polecenia skryptu na zadania usługi Azure Pipelines. Potok jest tworzony przy użyciu pliku YAML, który jest formatem kompaktowym, który ułatwia strukturę danych znajdujących się w plikach konfiguracji. Pliki YAML potoku są zwykle przechowywane bezpośrednio przy użyciu kodu źródłowego aplikacji.

Firma Mara używała wcześniej kodu YAML do definiowania podobnych zadań kompilacji i konfiguracji. Lubi również ideę utrzymania definicji kompilacji jako kodu, podobnie jak każda inna część jej projektu.

Aby zdefiniować jej kompilację, Mara wybiera użycie programu Visual Studio Code do utworzenia pliku YAML. W nim wprowadza wszystkie zadania usługi Azure Pipelines, których użyje do zastąpienia istniejących poleceń skryptu.

Mapuj polecenia skryptu na zadania usługi Azure Pipelines

Teraz wykonasz kroki opisane razem z poleceniami mapowania Mara z jej skryptu do zadań usługi Azure Pipelines.

Aby zamapować każde polecenie, Mara odwołuje się do dokumentacji referencyjnej. Dokumentacja kategoryzuje zadania według funkcji, takie jak kompilowanie lub wdrażanie.

Na przykład zadanieDotNetCoreCLI@2 interfejsu wiersza polecenia platformy .NET Core ułatwia uruchamianie dotnet poleceń.

Ta tabela kojarzy polecenia skryptu z nowymi zadaniami usługi Azure Pipelines:

Polecenie skryptu Zadanie usługi Azure Pipelines
npm install Npm@1
node-sass CmdLine@2 (lub script)
gulp gulp@1
echo `date` CmdLine@2 (lub script)
dotnet restore DotNetCoreCLI@2
dotnet build DotNetCoreCLI@2
dotnet publish DotNetCoreCLI@2

Nie ma wbudowanego typu zadania, które uruchamia węzeł-Sass lub wyświetla datę do pliku. Dla tych, Mara używa CmdLine@2 zadania, co pozwala jej uruchomić dowolne polecenie, które chce. Częściej zobaczysz script zadanie, które jest skrótem dla elementu CmdLine@2. Aby uzyskać więcej informacji na temat innych typowych skrótów zadań, zobacz dokumentacja schematu YAML dla usługi Azure Pipelines — kroki.

Wkrótce utworzysz własny plik YAML, który używa tych zadań.

Sprawdź swoją wiedzę

1.

Zadanie kompilacji: