Saya pikir artikel ini, A Successing Git Branching Model , sangat terkenal di kalangan pengguna DVCS yang berpengalaman.
Saya menggunakan hg
sebagian besar, tapi saya berpendapat diskusi ini baik untuk DVCS.
Alur kerja kami saat ini adalah setiap pengembang mengkloning master repo. Kami menulis kode pada repo lokal kami sendiri, menjalankan tes, dan jika semuanya berjalan dengan baik mendorong ke master.
Jadi kami ingin mengatur server CI seperti Jenkins dan meningkatkan alur kerja kami dengan sistem penyediaan di masa depan (koki, boneka, boneka, dll.).
Bagian nyata
Nah, model yang disajikan di atas berfungsi dengan baik tetapi cabang dapat merusak CI. Cabang fitur harus disinkronkan dengan sumber (menurut artikel, itu akan menjadi development
cabang) untuk membuat CI dan menggabungkan dengan lancar, bukan?
Say Alice dan Bob sedang mengerjakan dua fitur. Tetapi Alice selesai pada hari berikutnya. Fitur Bob memakan waktu seminggu. Pada saat Bob selesai, perubahannya sudah ketinggalan zaman (mungkin Alice refactored / mengganti nama beberapa kelas).
Salah satu solusinya adalah setiap pagi pengembang harus menarik master/origin
untuk memeriksa apakah ada perubahan. Jika Alice berkomitmen, Bob harus menarik dan menggabungkan ke dalam ruang kerjanya sehingga cabang fitur-fiturnya up-to-date.
- Apakah ini cara yang baik?
- Haruskah cabang-cabang ini ada di master repo (bukan klon lokal?) Berarti haruskah setiap pengembang memiliki hak istimewa untuk master repo pada GitHub / Bitbucket sehingga mereka dapat membuat cabang baru? Atau ini dilakukan secara lokal?
- Terakhir, model yang disajikan oleh artikel harus merusak CI jika cabang tidak disinkronkan dengan
origin/master
. Karena kami ingin melakukan pembangunan malam, haruskah pengembang menarik dan menggabungkan sebelum mereka meninggalkan pekerjaan, dan memiliki CI berjalan pada setiap cabang fitur juga?
Menanggapi 1)
Cara apa pun yang berhasil adalah cara yang baik. Namun : seluruh premis Integrasi Berkelanjutan adalah untuk berintegrasi terus menerus . Idenya adalah untuk menangkap bug integrasi tidak hanya sedini mungkin, tetapi dalam siklus umpan balik pengembangan - yaitu sementara semua rincian untuk kode yang diuji berada dalam memori jangka pendek pengembang membuat perubahan. Ini berarti bahwa, dalam keadaan normal sehari-hari, pekerjaan harus diintegrasikan di seluruh cabang fitur pada setiap komit - mungkin sekali setiap 15 menit atau lebih. Untuk mengulangi: Tujuan utama integrasi berkelanjutan adalah untuk mengekspos bug integrasi sementara semua detailnya ada dalam memori jangka pendek pengembang (s) membuat perubahan.
2)
Sebagian besar, cabang dibuat dalam Mercurial dengan mengkloning repositori, sehingga Anda tidak perlu memberikan setiap hak istimewa komit pengembang ke master repo. Namun, Anda mungkin ingin memberi pengembang kemampuan untuk membuat repo yang dikloning pada server integrasi berkelanjutan, karena tidak selalu layak untuk menjalankan tes secara lokal. (Saya pernah memiliki sistem CI di mana unit test memakan waktu 8 jam untuk berjalan pada 128 core cluster) - Tidak perlu dikatakan, pengembang tidak, tidak dapat menjalankan tes secara lokal.
3)
Jika Anda memiliki sumber daya komputasi untuk itu, ya, pengembang harus sepenuhnya mengikuti perkembangan garis utama setiap saat, terutama sebelum mereka meninggalkan pekerjaan, dan Anda harus menjalankan tes semalam di semua lini pengembangan (Meskipun sebagian besar sistem CI jangan membuat ini mudah).
sumber
Berikut ini cara melakukannya: bercabang fitur.
Yang penting di sini adalah bahwa Anda akan memiliki 0 konflik di cabang default ketika Anda menggabungkan cabang fitur Anda ke dalamnya, dan semua tes Anda lulus .
Dengan alur kerja sederhana ini Anda akan selalu memiliki cabang default yang asli dan stabil, sekarang melakukan hal yang sama untuk cabang rilis, tetapi mengintegrasikan dari default . Jika Anda perlu mengintegrasikan perbaikan terbaru langsung ke cabang rilis Anda masih bisa melakukan ini dengan melewatkan cabang default, tetapi sekali lagi, hanya memilih cabang yang baru saja diperbarui dari cabang target dan tidak memiliki konflik dan tes unit mereka lulus.
sumber