Salah satu peran saya dalam tim saya adalah orang yang membangun . Saya bertanggung jawab untuk memelihara / memperbarui skrip bangunan kami dan memastikan kami membangun 'lancar' di server integrasi berkelanjutan. Saya biasanya tidak keberatan dengan pekerjaan ini, meskipun sering terasa seperti saya terus mengasuh server CI.
Pekerjaan ini kadang-kadang menyebalkan karena jika build rusak saya harus membatalkan cerita yang saya kerjakan dan menyelidiki kegagalan build. Kegagalan membangun terjadi setiap hari di tim kami. Terkadang pengembang tidak membangun secara lokal sebelum melakukan sehingga pengujian gagal pada server CI. Dalam situasi ini saya ingin cepat-cepat sampai ke orang yang memiliki 'komitmen buruk' sehingga bangunannya tidak rusak terlalu lama. Kadang-kadang (lebih jarang) kondisi aneh ada di server CI yang perlu di-debug.
Saya tahu bahwa banyak tim matang menggunakan Integrasi Berkelanjutan tetapi tidak ada banyak materi di luar sana tentang praktik yang baik.
Apakah masalah saya menunjukkan bahwa integrasi berkesinambungan kami tidak terlalu matang atau apakah ini hanya bagian dari pekerjaan?
Apa saja praktik baik yang harus diikuti? Apa karakteristik integrasi berkesinambungan yang matang ?
Memperbarui
Alih-alih menjawab beberapa komentar, saya malah akan melakukan pembaruan. Kami memiliki satu perintah sederhana yang melakukan persis apa yang akan dilakukan server build saat membangun aplikasi. Ini akan mengkompilasi, menjalankan semua unit / integrasi dan beberapa tes berbasis UI cepat.
Membaca jawaban semua orang, rasanya kita mungkin memiliki dua masalah besar.
- Server CI tidak mengeluh cukup keras ketika membangun gagal.
- Pengembang tidak merasa seperti tanggung jawab setiap orang untuk memastikan komitmen mereka berhasil.
Yang membuat segalanya lebih sulit di tim saya adalah kami memiliki tim besar (10+ pengembang) DAN kami memiliki beberapa anggota tim di luar negeri yang berkomitmen ketika kami bahkan tidak sedang bekerja. Karena timnya besar dan kami menetapkan bahwa sering, komit kecil lebih disukai, kami terkadang memiliki banyak aktivitas dalam sehari.
sumber
Jawaban:
Pertama dan terpenting: setiap orang bertanggung jawab atas proses pembangunan . Kedengarannya seperti anggota dalam tim Anda tidak matang ... Tidak ada yang lolos dengan menulis kode dan membawanya ke server CI berharap itu berfungsi. Sebelum melakukan kode, harus diuji pada mesin lokal mereka. Anda harus yakin bahwa kode yang Anda periksa tidak akan merusak build. Tentu saja, ada beberapa kasus ketika build rusak secara tidak sengaja (mis. Jika file config telah diubah atau sloppy commit dibuat secara tidak sengaja).
Sebagian besar server CI (saya hanya menggunakan Hudson) akan mengirim email otomatis merinci komitmen yang dibuat yang menyebabkan build rusak. Satu-satunya bagian dari peran Anda adalah berdiri di belakang mereka tampak tangguh sampai tersangka memperbaiki apa pun yang mereka rusak.
sumber
Tim Anda salah satu hal:
Bertanggung jawab atas build server tidak sama dengan bertanggung jawab atas build .
Adalah tanggung jawab orang yang memeriksa kode untuk membuatnya "berfungsi" (untuk beberapa nilai pekerjaan). Satu-satunya alasan untuk memiliki server build adalah untuk menangkap kesalahan dalam proses ini. Server build apa pun yang bernilai garam dapat memberi tahu orang yang telah memeriksa kode sejak build terakhir (dan juga siapa pun yang tertarik) dengan informasi berikut:
Ini sangat sering terjadi melalui email. Penting bahwa ini terjadi cukup cepat setelah setiap kali check-in.
Orang tersebut kemudian dapat melihat apa yang salah, dan memperbaikinya, dan server build kemudian memberi tahu siapa pun yang tertarik bahwa build sudah kembali normal. Ini harus terjadi dengan sendirinya tanpa keterlibatan orang lain kecuali penjahat check-in.
Jadi untuk menjawab pertanyaan Anda: Lingkungan CI dewasa TIDAK memerlukan keterlibatan petugas kebersihan dalam operasi normal.
Juga, jika "kondisi aneh ada" terjadi sangat sering maka cari tahu apa penyebabnya, dan buat sistem lebih kuat.
sumber
Ubah prosesnya. Jika komit merusak build, secara otomatis kembalikan komit itu dan beri tahu pengembang yang melanggarnya. Adalah konyol untuk membiarkan kesalahan oleh satu anggota tim untuk memperlambat anggota tim lainnya. Atau alih-alih melakukan pembangunan integrasi dilakukan secara otomatis, minta pengembang memeriksa mesin integrasi, dan jika pembangunan berhasil, maka mereka dapat melakukan. Integrasi berkelanjutan tidak berarti "memeriksa sampah apa pun yang Anda suka dan seseorang akan memperbaikinya untuk Anda".
Strategi "cabang emas" tidak bekerja kecuali ada penjaga gerbang untuk cabang emas.
DVCS seperti Git mungkin membantu; alih-alih melakukan, pengembang hanya bisa mengirimkan perubahan untuk integrasi ke server CI, dan server kemudian dapat mencoba untuk mengintegrasikan perubahan tersebut. Jika integrasi berhasil, perubahan tersebut digabungkan, dan jika tidak ditolak.
sumber
Satu masalah yang sering saya lihat adalah bahwa pengembang tidak dapat melakukan pembangunan lokal yang memiliki langkah yang persis sama dengan pembangunan CI. Artinya, server CI dikonfigurasi untuk menyertakan langkah-langkah tambahan seperti tes unit / integrasi, cakupan, dll yang tidak dapat dilakukan secara lokal. Tidak dapat dihindari, pengembang akan digigit oleh salah satu langkah yang tidak dapat mereka lakukan secara lokal dan akan mulai mempertanyakan mengapa mereka repot-repot membuat rilis secara lokal sama sekali sebelum check-in.
Saya menjaga seluruh build saya mandiri dan memiliki server CI cukup memulai rilis build tanpa konfigurasi / langkah-langkah yang tidak jelas didefinisikan. Pengembang dapat menjalankan rilis build secara lokal sebelum check-in yang mencakup semua langkah yang akan dilakukan oleh CI build dan jauh lebih percaya diri bahwa tidak ada yang akan merusak ketika mereka melakukan check-in.
Manfaat tambahan untuk pendekatan ini meliputi:
PS. keseluruhan konsep pengasuh anak dibuat konyol, tetapi yang lain telah membahasnya.
sumber
Pertama, pengembang tidak boleh melanggar pembangunan secara teratur - mereka harus membangun dan menjalankan tes secara lokal sebelum mereka berkomitmen untuk cabang CI. Seharusnya itu tanda malu untuk menghancurkan bangunan itu, dan penting untuk menegakkannya. Saya telah melakukannya melalui memposting statistik, dan saya telah melihat tim lain memiliki "tas bawaan" di mana Anda memasukkan dolar setiap kali Anda melanggar bangunan. Pada akhir proyek, uang mengalir ke bir.
Jika rasa malu / kebanggaan pribadi tidak berhasil, Anda mungkin harus pindah ke hal-hal yang lebih berat (misalnya mengancam pemutusan hubungan kerja). Melanggar bangunan sebelum berangkat hari itu harus menjadi pelanggaran besar. Dan setiap pengembang harus memiliki pemberitahuan status bangunan di desktop mereka. Bagian terbaik dari semua ini adalah mendorong komitmen yang lebih kecil, yang lebih disukai.
Yang mengatakan, build kadang-kadang akan rusak (alasan konfigurasi CI, misalnya). Dan kadang-kadang orang akan mengacau dan pergi untuk hari itu dengan tubuh rusak. Itu sebabnya Anda harus bertujuan untuk proses yang memungkinkan untuk mengembalikan cepat dan mudah ke versi yang dikenal baik. Jika Anda selalu dapat kembali ke bangunan bagus terakhir (dan memiliki versi yang digulirkan dikerahkan ke semua tempat yang diperlukan), maka dalam skenario terburuk dari bangunan rusak di mana pelakunya telah pergi untuk malam hari Anda dapat menggulung kembali ke versi bagus terakhir dan berteriak padanya di pagi hari.
Saya tidak bisa merekomendasikan buku Pengiriman Berkelanjutan cukup. Jika Anda mencari panduan tentang cara mendewasakan proses CI Anda, cobalah.
sumber
Saya mendengar tentang sesuatu yang Microsoft (mungkin?) Lakukan, yaitu memiliki peran membangun pengasuh anak di sekitar tim. Cara mereka melakukan ini adalah ketika seseorang merusak bangunan (yang mungkin harus mencakup memeriksa sesuatu yang gagal dalam pengujiannya), mereka mengambil peran itu. Ini membuat orang bertanggung jawab atas konsekuensi tindakan mereka dengan cara yang sangat langsung. Dan mengingat itu adalah pekerjaan yang agak menyebalkan untuk dilakukan, itu mendorong mereka untuk tidak merusak bangunan lagi.
Orang yang saat ini bertanggung jawab untuk pembangunan dapat memiliki topi khusus. Mungkin ada upacara untuk menyerahkannya.
Perhatikan bahwa seperti yang dikatakan Thorbjørn, bertanggung jawab atas build tidak sama dengan bertanggung jawab atas build server. Tanggung jawab untuk server dapat beristirahat secara permanen dengan satu atau lebih anggota tim yang cenderung memiliki infrastruktur sementara tanggung jawab untuk pembangunan bergerak.
Sekarang, detail dari proses samping, saya akan bergabung dengan paduan suara orang-orang yang menyatakan cemas pada pengembang memeriksa tanpa harus menjalankan membangun dan menguji. Tidak bisa diterima
Jika Anda memiliki beberapa anggota tim yang lebih cenderung merusak pembangunan (dan berdasarkan pengalaman saya sendiri, saya sebagian besar memikirkan anggota di negara lain), dan jika Anda menggunakan kontrol sumber modern yang bagus seperti Mercurial atau Git, Anda dapat meminta mereka check-in ke cabang lain ke seluruh tim, menjalankan proses CI terpisah untuk itu, dan secara otomatis menggabungkan perubahan dari cabang itu ke bagasi setelah pembangunan yang berhasil (perhatikan bahwa Anda harus jalankan build kedua dan uji setelah penggabungan sebelum memeriksa penggabungan!). Karena penggabungan otomatis tidak selalu berhasil, ini pada akhirnya akan meninggalkan cabang yang membutuhkan perhatian manual, yang bisa jadi sangat menyebalkan. Namun, mungkin tidak terlalu menyakitkan daripada kode yang rusak diperiksa untuk anggota tim lainnya.
sumber
Seperti yang dikatakan Jonathan Khoo, Anda semua harus bertanggung jawab atas server build dan skrip build. Ada tiga alasan:
Saya sangat terlibat dengan CI sendiri dan jatuh ke dalam perangkap menjadi orang yang memelihara skrip tetapi di sini ada beberapa hal yang dapat Anda lakukan untuk mengurangi itu.
sumber
Visibilitas akan membantu Anda. Semua anggota tim perlu tahu bahwa ada masalah aktif yang harus mereka perbaiki. Pemberitahuan email berguna, tetapi jika pengembang sibuk dan tidak langsung bereaksi, ia mungkin akan melupakannya dan email akan berakhir di tumpukan pemberitahuan yang sangat besar.
Anda dapat mencoba menggunakan alat seperti Catlight atau BuildNotify . Mereka menunjukkan status bangunan penting saat ini di area baki. Setiap kali pengembang melihat jam, ia akan melihat bahwa ada bangunan rusak yang perlu diperbaiki.
Catlight juga akan menunjukkan siapa yang melanggar bangunan pertama, memberikan tekanan sosial pada orang ini, karena seluruh tim akan melihatnya pada setiap kegagalan pembangunan berturut-turut.
sumber
Salah satu strategi adalah menggunakan banyak cabang kecil untuk banyak proyek kecil. Kemudian ketika seseorang merusak gedung, mereka hanya merusak gedung sendiri. Jadi mereka mendapatkan email yang terganggu dari build server dan terserah mereka untuk mengkhawatirkannya.
Cara lainnya adalah meningkatkan tingkat tanggung jawab masyarakat. Misalnya jika Anda menggunakan sesuatu seperti Rietveld maka orang tidak dapat melakukan tanpa melewati peer review. (Proses dalam praktiknya jauh lebih ringan daripada yang Anda pikirkan. Tapi itu memang memaksa orang untuk "menyalurkan" dan mengerjakan banyak hal sekaligus.) Memelihara bangunan adalah tanggung jawab komuter dan pengulas. Jika ada orang yang secara teratur melanggar bangunan atau menyetujui hal-hal yang melanggar bangunan, maka jangan biarkan mereka memberikan persetujuan akhir untuk melakukan. Gabungkan dengan proses di mana siapa pun dapat dengan mudah mengembalikan perubahan apa pun, dan build tidak akan sering rusak, dan tidak akan tetap rusak begitu perubahan dilakukan.
sumber
Saya akan memutuskan hubungan dengan paduan suara di sini, dan mengatakan bahwa sebenarnya, mematahkan bangunan sesekali bukanlah hal yang buruk, karena itu menunjukkan bahwa pekerjaan yang sebenarnya sedang dilakukan. Ya, pengembang harus membuat dan menguji sebelum melakukan, tetapi beban utama pengujian harus ditanggung oleh alat otomasi pengembangan, termasuk server integrasi berkelanjutan. Alat-alat itu ada di sana untuk digunakan, dan kecuali bangunannya rusak terus-menerus, maka tidak jelas bahwa Anda mendorong sekeras yang Anda bisa. Namun, saya berpikir bahwa bangunan tidak boleh pernah rusak selama jangka waktu yang signifikan, dan bahkan akan lebih suka rollback otomatis atau proses komitmen multi-tahap jika itu membantu mendukung tujuan kembar umpan balik cepat dari fasilitas pengujian terpusat dan otomatis, ditambah batang "hijau".
sumber
Hal-hal yang perlu diingat pasangan:
Secara keseluruhan kalian perlu menetapkan, menulis standar berdasarkan praktik terbaik dan bukan praktik Anda secara individual (jelas itu tidak berhasil). Setelah semua orang menyetujui standar, mulailah proses peninjauan kode dan menegakkan standar. Itu hampir terdengar seperti manajemen pergi berlibur dan tidak pernah kembali. Ini adalah hal-hal yang sejujurnya sangat mendasar untuk setiap toko. dasar kode yang baik dimulai dengan standar yang baik untuk menentukan kode tim dan bagaimana kode itu ditulis. Hanya pikiran saya saja. Saya baru-baru ini memasuki situasi yang sama di pekerjaan baru saya dan saya berbicara dengan bos saya. Dijelaskan kepadanya bahwa kita perlu menyelesaikan XYZ karena itu mempengaruhi ABC. Dua minggu kemudian saya menulis daftar standar kode untuk diikuti dan disajikan. Diikuti oleh rekan kerja saya yang memberi masukan di sana dan sekitar 2 bulan kemudian kami memiliki standar yang menyelesaikan banyak masalah.
sumber