Belajar .NET - Tooling Modern & Build Automation
Series/Belajar .NET/Episode 18
Episode 18 of 23

Belajar .NET - Tooling Modern & Build Automation

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

.NET CLI, MSBuild, dan SDK-Style Projects

dotnet CLI sebagai Antarmuka MSBuild

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:

Build, test, dan publish
dotnet restore
dotnet build --no-restore
dotnet test --no-build
dotnet publish -c Release --no-restore

Rantai 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.

Global.json untuk Versi SDK

Agar semua pengembang memakai SDK yang sama, pin versinya dengan global.json:

Mengunci versi SDK
{
  "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.

Continuous Integration dengan GitHub Actions

Workflow Build dan Test

Setiap push ke main sebaiknya memicu pipeline build dan test. File .github/workflows/ci.yml:

Workflow CI dasar
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-build

Workflow 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.

Menyimpan Artifact

Setelah test hijau, simpan hasil publish sebagai artifact:

Upload artifact
      - run: dotnet publish -c Release -o publish --no-build
      - uses: actions/upload-artifact@v4
        with:
          name: app-publish
          path: publish

actions/upload-artifact menyimpan folder publish sehingga bisa diunduh atau dipakai pipeline deployment berikutnya. Di episode 19, artifact ini yang akan dibungkus Docker.

Source Generators dan Roslyn Analyzers

Source Generators untuk Kode Otomatis

Source generator menghasilkan kode C# saat kompilasi — menghilangkan boilerplate manual. Contoh paling umum adalah JSON source generator yang memakai refleksi-free serialization:

JSON source generator
[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 untuk Aturan Tim

Roslyn analyzers menjalankan aturan kode saat compile — mendeteksi bug pola sebelum runtime:

Install analyzer .NET
dotnet add package Microsoft.CodeAnalysis.NetAnalyzers

Paket 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.

Code Formatting, Linting, dan Reproducible Builds

dotnet format untuk Konsistensi

Formatting yang konsisten menghilangkan perdebatan gaya. dotnet format memformat seluruh solution sesuai .editorconfig:

Format dan verifikasi
dotnet format
dotnet format --verify-no-changes

dotnet 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.

Reproducible Builds

Untuk hasil yang deterministik, aktifkan reproducible build:

Build reproducible
dotnet publish -c Release -p:ContinuousIntegrationBuild=true

ContinuousIntegrationBuild=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.

Ringkasan Praktik Tooling

  • Pin versi SDK dengan global.json.
  • Bangun pipeline CI: restore, build, test, publish.
  • Simpan publish sebagai artifact untuk deployment.
  • Manfaatkan source generators untuk kode otomatis.
  • Jalankan dotnet format --verify-no-changes di CI.
  • Aktifkan reproducible build untuk artifact deterministik.

Penutup

Inti yang harus dibawa pulang:

  • dotnet CLI membungkus MSBuild dengan perintah yang ringkas.
  • global.json mengunci versi SDK untuk semua pengembang.
  • GitHub Actions mengotomatisasi build, test, dan penyimpanan artifact.
  • Source generators menghasilkan kode saat kompilasi tanpa refleksi.
  • Roslyn analyzers menegakkan aturan kualitas di waktu build.
  • Reproducible build menghasilkan artifact yang bisa diverifikasi.

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.