Episode ini mengotomatisasi siklus pengembangan .NET: dotnet CLI, MSBuild, dan SDK-style projects, continuous integration dengan GitHub Actions, source generators dan Roslyn analyzers, serta code formatting, linting, dan reproducible builds.

Proyek besar tidak bisa diandalkan pada tangan manusia semata. Episode 18 membahas tooling dan build automation: bagaimana memastikan setiap commit ter-build, ter-test, dan terformat dengan cara yang sama — di mesin siapa pun, kapan pun.
Kalian akan melihat dotnet CLI dan MSBuild dari sisi dalam, menyusun pipeline continuous integration dengan GitHub Actions, mengenal source generators dan Roslyn analyzers, serta menerapkan formatting dan reproducible builds untuk tim yang lebih sehat.
Perintah dotnet adalah lapisan depan dari MSBuild — engine build .NET. Setiap project SDK-style diproses MSBuild, dan CLI menyediakan perintah yang ringkas untuk operasi umum:
dotnet restore
dotnet build --no-restore
dotnet test --no-build
dotnet publish -c Release --no-restoreRantai perintah di atas membangun pipeline lokal yang efisien: restore mengambil paket, build mengkompilasi, test menjalankan pengujian, dan publish menghasilkan artifact. Flag --no-restore dan --no-build menghindari kerja berulang.
Agar semua pengembang memakai SDK yang sama, pin versinya dengan global.json:
{
"sdk": {
"version": "9.0.100",
"rollForward": "latestPatch"
}
}global.json memastikan mesin pengembang dan CI memakai versi SDK yang sama persis. rollForward: latestPatch mengizinkan patch terbaru tanpa mengubah versi minor — langkah pertama menuju reproducible build.
Setiap push ke main sebaiknya memicu pipeline build dan test. File .github/workflows/ci.yml:
name: CI
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- run: dotnet restore
- run: dotnet build --no-restore
- run: dotnet test --no-buildWorkflow ini men-checkout kode, memasang SDK 9, lalu menjalankan restore, build, dan test. Jika salah satu langkah gagal, CI ditandai merah dan rilis diblokir — kualitas menjadi gerbang otomatis, bukan janji.
Setelah test hijau, simpan hasil publish sebagai artifact:
- run: dotnet publish -c Release -o publish --no-build
- uses: actions/upload-artifact@v4
with:
name: app-publish
path: publishactions/upload-artifact menyimpan folder publish sehingga bisa diunduh atau dipakai pipeline deployment berikutnya. Di episode 19, artifact ini yang akan dibungkus Docker.
Source generator menghasilkan kode C# saat kompilasi — menghilangkan boilerplate manual. Contoh paling umum adalah JSON source generator yang memakai refleksi-free serialization:
[JsonSerializable(typeof(Produk))]
public partial class AppJsonContext : JsonSerializerContext
{
}
string json = JsonSerializer.Serialize(new Produk(1, "Laptop"), AppJsonContext.Default.Produk);AppJsonContext dibangkitkan saat build menjadi metadata serialisasi tanpa refleksi runtime. Hasilnya serialisasi lebih cepat dan footprint lebih kecil — sumber generator adalah salah satu kekuatan modern .NET.
Roslyn analyzers menjalankan aturan kode saat compile — mendeteksi bug pola sebelum runtime:
dotnet add package Microsoft.CodeAnalysis.NetAnalyzersPaket ini menghadirkan ratusan aturan yang dijalankan di build. Aturan bisa diaktifkan sebagai error untuk kualitas yang ketat. Source generator dan analyzer bekerja bersama: satu menghasilkan kode, satu lagi mengawasi kualitasnya.
Formatting yang konsisten menghilangkan perdebatan gaya. dotnet format memformat seluruh solution sesuai .editorconfig:
dotnet format
dotnet format --verify-no-changesdotnet format --verify-no-changes memeriksa apakah kode sudah terformat — tanpa mengubah file. Jalankan ini di CI: jika ada yang tidak rapi, build gagal. Ini memaksa seluruh tim mengikuti aturan yang sama.
Untuk hasil yang deterministik, aktifkan reproducible build:
dotnet publish -c Release -p:ContinuousIntegrationBuild=trueContinuousIntegrationBuild=true membuat path dan timestamp build deterministik — artifact yang sama dihasilkan dari commit yang sama. Ini penting untuk audit keamanan dan verifikasi sumber, karena binary bisa di-reproduksi oleh siapa pun.
Info
Build lokal dan CI harus berjalan dari perintah yang sama. Dokumentasikan pipeline di CI sebagai satu-satunya kebenaran — bukan instruksi manual yang bisa berbeda antar mesin.
Inti yang harus dibawa pulang:
Di episode 19 selanjutnya kita akan membahas deployment dan cloud native — Dockerizing aplikasi .NET, deployment ke Kubernetes, Azure, AWS, dan GCP, pengelolaan konfigurasi, secret dan runtime environment, serta blue-green deployment, canary release, dan rollback.