Merencanakan tugas build Anda

Selesai

Mara sekarang memiliki salinan kode Space Game di komputer lokalnya. Dia akan membuatnya menggunakan Microsoft Azure Pipelines, bukan server build Ubuntu 20.04 yang ada. Sebelum dapat melakukan itu, dia harus memikirkan skrip build yang ada. Ikuti saat dia memetakan skrip yang ada ke tugas Azure Pipelines. Pikirkan tentang bagaimana Anda dapat melakukan hal yang sama dengan proses build Anda sendiri.

Berikut beberapa catatan yang dikumpulkan Mara saat dia berbicara dengan Anda, pemimpin pengembang:

  • Mesin build menjalankan Ubuntu 20.04.
  • Mesin build menyertakan alat build seperti:
    • npm, pengelola paket untuk Node.js
    • NuGet, pengelola paket untuk .NET
    • .NET SDK
  • Proyek ini menggunakan Syntactically Awesome Style Sheets (Sass) untuk mempermudah pembuatan file cascading style sheets (CSS).
  • Proyek ini menggunakan toolkit gulp untuk mengecilkan file JavaScript dan CSS.

Aset yang diperkecil mengecualikan data yang tidak diperlukan (seperti whitespace) dan mempersingkat nama variabel untuk membantunya mengunduh lebih cepat.

Berikut langkah-langkah yang terjadi selama proses build:

  1. Untuk menginstal paket Node.js yang ditetapkan di package.json, jalankan npm install.
  2. Untuk mengonversi file Sass (.scss) menjadi file CSS (.css), jalankan node-sass.
  3. Untuk mengecilkan file JavaScript dan CSS, jalankan gulp.
  4. Untuk membantu tim QA mengidentifikasi nomor dan tanggal pembuatan, cetak informasi pembuatan ke direktori wwwroot.
  5. Untuk menginstal dependensi proyek, jalankan dotnet restore.
  6. Untuk membangun aplikasi di bagian konfigurasi Debug dan Rilis, jalankan dotnet build.
  7. Untuk mengemas aplikasi sebagai file .zip dan menyalin hasilnya ke berbagi jaringan agar diambil tim QA, jalankan dotnet publish.

Mara membuat skrip shell yang melakukan tugas yang dia identifikasi. Dia menjalankannya di laptop.

Catatan

Anda tidak perlu menjalankan skrip ini atau memahami fungsinya secara utuh. Di sini, hal ini mengilustrasikan apa yang mungkin dilakukan skrip build.

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

Direktori /tmp meniru berbagi jaringan tim.

Setelah menjalankan skrip, Mara menyadari bahwa skripnya tidak lengkap. Misalnya, tidak menangani kesalahan. Tidak memberi tahu siapa pun jika kesalahan build terjadi. Bahkan ketika terjadi kesalahan, skrip tersebut tetap berjalan. Selain itu skripnya tidak menginstal alat yang diperlukan untuk setiap langkah.

Apa saja tugas Azure Pipelines?

Di Azure Pipelines, tugas adalah skrip atau prosedur paket yang telah diabstraksi dengan serangkaian input.

Tugas Azure Pipelines mengabstraksi detail yang mendasarinya. Abstraksi ini mempermudah untuk menjalankan fungsi build umum, seperti mengunduh alat build atau paket tempat aplikasi Anda bergantung, atau untuk membuat proyek Anda, yang menjalankan Visual Studio atau Xcode.

Untuk membangun proyek C# yang menargetkan .NET, berikut adalah contoh yang menggunakan tugas DotNetCoreCLI@2:

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

Alur mungkin menerjemahkan tugas tersebut ke perintah ini:

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

Mari kita uraikan tugas ini sedikit lebih terperinci:

  • Tugas DotNetCoreCLI@2 memetakan ke perintah dotnet.
  • displayName menentukan nama tugas yang ditampilkan di antarmuka pengguna. Anda akan segera melihat ini berjalan.
  • inputs menentukan argumen yang diteruskan ke perintah.
    • command menentukan untuk menjalankan subperintah dotnet build.
    • arguments menentukan argumen tambahan untuk diteruskan ke perintah.
    • projects menentukan proyek mana yang akan dibuat. Contoh ini menggunakan pola wildcard **/*.csproj. Baik ** maupun *.csproj adalah contoh dari apa yang disebut pola glob. Bagian ** menentukan untuk mencari direktori saat ini dan semua direktori turunan. Bagian *.csproj menentukan file .csproj. Wildcard memungkinkan Anda mengerjakan banyak file tanpa menentukan tiap-tiap file. Jika Anda perlu mengerjakan file tertentu saja, Anda dapat menentukan file tersebut daripada menggunakan wildcard.

"@" pada nama tugas, misalnya DotNetCoreCLI@2, merujuk pada versi tugas. Saat versi tugas baru tersedia, Anda dapat bermigrasi secara bertahap ke versi terbaru untuk memanfaatkan fitur-fitur baru.

Bagaimana tugas digunakan dalam alur?

Berikutnya, Mara akan memetakan perintah skrip yang ada ke tugas Azure Pipelines.

Mara dapat menggunakan salah satu dari dua metode untuk mengonfigurasi alurnya:

  • Perancang visual: Di sini, Anda menyeret tugas ke formulir, kemudian mengonfigurasi setiap tugas untuk melakukan apa yang Anda perlukan.

    Cuplikan layar desainer visual Azure Pipelines menampilkan tugas build untuk aplikasi .NET.

  • File YAML: YAML adalah format ringkas yang memudahkan untuk menyusun jenis data yang ada dalam file konfigurasi. Anda biasanya mempertahankan file YAML ini langsung dengan kode sumber aplikasi Anda.

Mara mempertimbangkan pilihannya. Dia telah menggunakan YAML sebelumnya untuk mendefinisikan tugas dan konfigurasi build yang serupa. Dia juga menyukai gagasan untuk mempertahankan definisi build sebagai kode, sama seperti bagian lain dari proyeknya.

Alur sebagai kode merujuk pada konsep mengekspresikan definisi build sebagai kode. Dalam video singkat ini, Abel menjelaskan konsep pipeline sebagai kode:

Tanya Abel

Untuk menentukan build-nya, Mara memilih menggunakan Visual Studio Code untuk membuat file YAML. Di dalamnya, dia memasukkan semua tugas Azure Pipelines yang akan digunakan untuk mengganti perintah skrip yang ada.

Catatan

Proses yang mendasari yang digunakan Azure Pipelines sama, baik Anda menggunakan perancang visual maupun file YAML. Perbedaan utamanya adalah cara Anda mendefinisikan tugas alur.

Memetakan perintah skrip ke tugas Azure Pipelines

Sekarang, Anda akan mengikuti saat Mara memetakan perintah dari skripnya ke tugas Azure Pipelines.

Untuk memetakan setiap perintah, Mara merujuk pada dokumentasi referensi. Dokumentasi ini mengategorikan tugas menurut fungsi, seperti build atau penyebaran.

Misalnya, tugas .NET Core CLIDotNetCoreCLI@2 membantu Anda menjalankan perintah dotnet.

Tabel ini mengaitkan perintah skrip dengan tugas Azure Pipelines baru:

Perintah skrip Tugas Azure Pipelines
npm install Npm@1
node-sass CmdLine@2
gulp gulp@1
echo `date` CmdLine@2
dotnet restore DotNetCoreCLI@2
dotnet build DotNetCoreCLI@2
dotnet publish DotNetCoreCLI@2

Tidak ada jenis tugas bawaan yang menjalankan node-Sass atau mencetak tanggal ke file. Untuk itu, Mara menggunakan tugas CmdLine@2, yang memungkinkannya menjalankan perintah yang dia inginkan.

Lebih umum, Anda akan melihat tugas script, yang merupakan pintasan untuk CmdLine@2. Jadi, Mara memperbarui tabelnya seperti ini:

Perintah skrip Tugas Azure Pipelines
npm install Npm@1
node-sass script
gulp gulp@1
echo `date` script
dotnet restore DotNetCoreCLI@2
dotnet build DotNetCoreCLI@2
dotnet publish DotNetCoreCLI@2

Anda akan segera membuat file YAML milik Anda sendiri yang menggunakan tugas ini.

Uji pengetahuan Anda

1.

Tugas build: