Saya membutuhkan bantuan dengan filosofi dan desain pengaturan integrasi berkelanjutan.
Pengaturan CI kami saat ini menggunakan buildbot. Ketika saya mulai mendesainnya, saya mewarisi (yah, tidak sepenuhnya, karena saya terlibat dalam desainnya setahun sebelumnya) seorang pembangun CI yang dipesan lebih dahulu yang dirancang untuk menjalankan seluruh bangunan sekaligus, semalam. Setelah beberapa saat, kami memutuskan bahwa ini tidak cukup, dan mulai mengeksplorasi berbagai kerangka kerja CI, akhirnya memilih buildbot. Salah satu tujuan saya dalam transisi ke buildbot (selain bisa menikmati semua ekstra jagoan) adalah untuk mengatasi beberapa kekurangan dari pembangun malam kami yang dipesan lebih dahulu.
Humor saya sejenak, dan izinkan saya menjelaskan apa yang saya warisi. Basis kode untuk perusahaan saya adalah hampir 150 unik c ++ aplikasi Windows, yang masing-masing memiliki ketergantungan pada satu atau lebih selusin perpustakaan internal (dan banyak juga pada perpustakaan pihak ke-3 juga). Beberapa perpustakaan ini saling tergantung, dan memiliki aplikasi tergantung yang (sementara mereka tidak ada hubungannya satu sama lain) harus dibangun dengan membangun perpustakaan yang sama. Setengah dari aplikasi dan perpustakaan ini dianggap "warisan" dan tidak dapat diangkut, dan harus dibangun dengan beberapa konfigurasi berbeda dari kompiler IBM (yang mana saya telah menulis subkelas unik Compile
), dan setengah lainnya dibangun dengan studio visual.ShellCommand
s, karena tidak ada dukungan untuk VSS).
Pembangun malam kami yang asli hanya mencatat sumber untuk semuanya, dan membangun barang-barang dalam urutan tertentu. Tidak ada cara untuk membangun hanya satu aplikasi, atau memilih revisi, atau mengelompokkan beberapa hal. Itu akan meluncurkan mesin virtual untuk membangun sejumlah aplikasi. Itu tidak terlalu kuat, tidak bisa didistribusikan. Itu tidak bisa diperpanjang. Saya ingin dapat mengatasi semua keterbatasan ini di buildbot.
Cara saya melakukan ini pada awalnya adalah membuat entri untuk masing-masing aplikasi yang ingin kita bangun (semuanya 150an), kemudian membuat penjadwal yang dipicu yang dapat membangun berbagai aplikasi sebagai grup, dan kemudian merangkum kelompok-kelompok itu di bawah penjadwal pembangunan malam secara keseluruhan. Ini bisa berjalan pada budak yang berdedikasi (tidak ada lagi kecurangan mesin virtual), dan jika saya mau, saya bisa menambahkan budak baru. Sekarang, jika kita ingin membuat jadwal yang lengkap, hanya satu klik, tetapi kita juga dapat membangun satu aplikasi jika kita menginginkannya.
Namun, ada empat kelemahan dari pendekatan ini. Salah satunya adalah web dependensi pohon sumber kami yang kompleks. Untuk menyederhanakan konfigurasi config, semua pembangun dihasilkan dari kamus besar. Ketergantungan diambil dan dibangun dengan cara yang tidak terlalu kuat (yaitu, penguncian hal-hal tertentu dalam kamus build-target saya). Yang kedua adalah bahwa setiap build memiliki antara 15 dan 21 langkah build, yang sulit dijelajahi dan dilihat di antarmuka web, dan karena ada sekitar 150 kolom, perlu selamanya memuat (pikirkan dari 30 detik hingga beberapa menit). Ketiga, kami tidak lagi memiliki autodiscovery untuk membangun target (walaupun, sebanyak salah satu rekan kerja saya mengomel mengenai hal ini, saya tidak melihat apa yang membuat kami menjadi yang pertama). Akhirnya,
Sekarang, pindah ke pengembangan baru, kita mulai menggunakan g ++ dan subversi (bukan porting repositori lama, ingatlah - hanya untuk barang baru). Selain itu, kami mulai melakukan lebih banyak pengujian unit ("lebih" mungkin memberikan gambaran yang salah ... lebih seperti apa pun ), dan pengujian integrasi (menggunakan python). Saya mengalami kesulitan mencari tahu bagaimana menyesuaikan ini ke dalam konfigurasi saya yang ada.
Jadi, di mana saya secara filosofis salah? Bagaimana cara terbaik untuk maju (dengan buildbot - itu satu-satunya bagian dari puzzle yang saya miliki lisensi untuk dikerjakan) sehingga konfigurasi saya sebenarnya dapat dipertahankan? Bagaimana cara mengatasi beberapa kelemahan desain saya? Apa yang benar-benar berfungsi dalam hal strategi CI untuk basis kode yang besar, (mungkin berlebihan)?
EDIT:
Saya pikir saya menjelaskan masalah saya, tetapi jelas saya tidak cukup jelas. Saya tidak mencari saran untuk mengubah platform CI. Itu tidak akan terjadi, dan jawaban yang menyarankan itu tidak akan diterima. Yang ingin saya ketahui adalah bagaimana orang lain mengelola basis kode yang rumit menggunakan CI. Saya memiliki selusin produk yang berbeda, dan saya memiliki ketergantungan yang tersebar ke angin, dan semuanya berbeda. INI adalah apa yang saya ingin tahu bagaimana menghadapinya.