- Proyek .NET Unified Build adalah sistem build baru yang mengintegrasikan seluruh produk ke dalam bentuk 'repositori monolitik virtual (Virtual Monolithic Repository, VMR)' untuk mengurangi kompleksitas dan inefisiensi struktur build lama berbasis repositori terdistribusi
- Struktur komposisi produk terdistribusi sebelumnya menawarkan independensi dan fleksibilitas tinggi, tetapi menimbulkan beban besar dalam hal manajemen dependensi, konsistensi build, dan kecepatan
- Unified Build memperluas prinsip Source Build untuk distribusi Linux, dengan memperkenalkan tata letak sumber tunggal dan struktur 'build vertikal (Vertical Build)' untuk mempersingkat waktu build dan meningkatkan prediktabilitas
- Melalui aliran kode dua arah (two-way code flow), pengujian skenario, serta peningkatan infrastruktur validasi dan penandatanganan otomatis, sistem ini sekaligus meningkatkan efisiensi pengembang dan kualitas produk
- Sistem ini resmi diperkenalkan di .NET 10 dan telah menghasilkan capaian nyata seperti pemangkasan waktu build (24 jam → kurang dari 7 jam), pengurangan biaya pemeliharaan, dan peningkatan keandalan distribusi
Latar belakang perubahan struktur build .NET
- .NET, dalam proses open-source pada 2015~2016, dikembangkan dengan memisahkan banyak repositori seperti CoreCLR, CoreFX, ASP.NET Core, SDK
- Setiap repositori dibangun dan didistribusikan secara independen, sementara keseluruhan produk disusun melalui graf dependensi
- Pendekatan ini mirip dengan ekosistem OSS, tetapi saat terjadi patch keamanan atau perbaikan darurat, diperlukan koordinasi simultan antartim sehingga waktu penyelesaiannya tidak dapat diprediksi
- Meski memiliki kelebihan pengembangan terdistribusi seperti layering, diferensiasi komunitas, dan pengembangan asinkron, pendekatan ini tidak efisien untuk memastikan konsistensi produk (coherency)
Kompleksitas komposisi produk dan overhead
- Kompleksitas (Complexity): didefinisikan sebagai jumlah tahapan yang diperlukan hingga suatu perubahan sampai ke pelanggan
- Semakin banyak repositori dan node dependensi, semakin banyak waktu dan koordinasi manusia yang dibutuhkan untuk menjaga konsistensi
- Overhead: waktu yang tidak secara langsung menghasilkan artefak yang bisa dikirim ke pelanggan
- Contoh: pembuatan PR, menunggu persetujuan, antrean, pengaturan lingkungan, dll.
- Hasil analisis build runtime .NET 8 menunjukkan bahwa sekitar 38,5% dari total waktu build adalah overhead
- Ketika kompleksitas dan overhead bergabung, efisiensi build menurun tajam dan siklus rilis secara keseluruhan menjadi lebih panjang
Asal-usul Source Build dan Unified Build
- Source Build adalah sistem yang dirancang agar distribusi Linux dapat membangun .NET secara offline dari satu sumber tunggal
- Prinsip implementasi tunggal, platform tunggal, dan lingkungan build tunggal
- Orkestrator build mengelola dependensi dan urutan build tiap komponen
- Source Build dapat melakukan build dalam waktu kurang dari 50 menit berkat kompleksitas rendah dan overhead rendah
- Konsep ini sempat ingin diterapkan juga pada build internal Microsoft, tetapi ada kesulitan seperti kode tertutup, dependensi legacy, dan join lintas platform
- Untuk mengatasinya, diperkenalkan pendekatan seperti paket khusus referensi (source-build-reference-packages), prinsip implementasi tunggal, dan penghapusan join
Tujuan dan desain Unified Build
- Seluruh produk .NET dapat di-build dengan satu commit tunggal
- Semua distribusi per platform dapat dihasilkan dalam satu lingkungan tunggal
- Build dan validasi independen dapat dilakukan juga di luar Microsoft
- Aliran kode dua arah memungkinkan sinkronisasi otomatis perubahan antara VMR dan repositori individual
- Pengujian skenario digunakan untuk memverifikasi fungsi pada tingkat keseluruhan produk
- Struktur build vertikal (Vertical Build) memparalelkan build per platform
- Terdiri dari sekitar 35~40 vertikal build (short/tall stack)
Tahapan implementasi Unified Build
- .NET 7: perancangan konsep dan persetujuan
- .NET 8: perbaikan infrastruktur Source Build dan pembangunan fondasi
- .NET 9: eksperimen build vertikal dan aliran kode
- .NET 10: produk resmi dan diterapkan pada RTM
- Proses build baru diperkenalkan di Preview 4, dan transisi penuh dimulai dari Preview 5
Komponen utama
Virtual Monolithic Repository (VMR)
- Repositori dotnet/dotnet berperan sebagai tata letak sumber tunggal untuk semua komponen
- Pengembang dapat bekerja di repositori individual maupun di VMR, sehingga memperoleh fleksibilitas model terdistribusi dan konsistensi model tunggal secara bersamaan
Vertical Build
- Build dijalankan secara independen untuk tiap platform dan runtime
- Setelah build paralel selesai, hasilnya digabungkan, dan beberapa join diproses lewat pass build tambahan
Code Flow
- Sinkronisasi kode dua arah: repositori komponen → VMR, VMR → repositori komponen
- Status aliran kode terakhir dicatat di
eng/Version.Details.xml
- Perubahan dibuat sebagai file patch untuk secara otomatis membuat PR
- Logika penanganan konflik dan pemulihan kesalahan sudah tertanam
Scenario Test Validation
- Selain unit test yang sudah ada, ditambahkan pengujian skenario yang memverifikasi fungsi seluruh produk
- Dijalankan berdasarkan artefak hasil build untuk memperkuat pencegahan regresi dan jaminan kualitas
Hasil dan dampak
- Waktu build lebih singkat: lebih dari 24 jam → kurang dari 7 jam (termasuk penandatanganan)
- Fleksibilitas meningkat: siklus build dan distribusi lebih pendek, perbaikan darurat lebih mudah diterapkan
- Prediktabilitas terjamin: waktu selesainya build setelah perubahan menjadi jelas
- Infrastruktur membaik: alat penandatanganan, log, build paralel, otomatisasi aliran dependensi, dll.
- Source Build untuk distribusi Linux juga selalu dipertahankan dalam kondisi bersih sebelum build
Arah ke depan
- Di .NET 11, direncanakan penerapan otomatisasi aliran kode dan agen pemantauan berbasis AI
- Otomatisasi pelacakan kesalahan dalam proses PR → refleksi ke produk
- Dalam jangka panjang, akan didorong penyederhanaan build dan peningkatan kecepatan melalui penghapusan join point
- Target: build lengkap dalam waktu kurang dari 4 jam
Kesimpulan
- Unified Build, yang mengatasi keterbatasan model build terdistribusi, secara mendasar meningkatkan efisiensi build dan distribusi .NET
- Kemajuan nyata telah dicapai dalam tiga sumbu: pengurangan kompleksitas dan overhead, serta peningkatan konsistensi, kecepatan, dan kualitas
- Mulai .NET 10 RTM, sistem ini diterapkan secara penuh dan akan terus disempurnakan pada versi-versi berikutnya
Belum ada komentar.