Anda ada beberapa cara di sana, tapi saya akan sedikit memperluas diagram Anda:
Pada dasarnya (jika kontrol versi Anda mengizinkannya, yaitu jika Anda menggunakan hg / git), Anda ingin setiap pasangan pengembang / pengembang memiliki cabang "pribadi" sendiri, yang berisi kisah pengguna tunggal yang sedang mereka kerjakan. Ketika mereka melengkapi fitur, mereka perlu mendorong ke cabang pusat, cabang "Rilis". Pada titik ini, Anda ingin dev mendapatkan cabang baru, untuk hal selanjutnya yang perlu mereka kerjakan. Cabang fitur asli harus dibiarkan apa adanya, sehingga setiap perubahan yang perlu dilakukan dapat dilakukan secara terpisah (ini tidak selalu berlaku, tetapi ini merupakan titik awal yang baik). Sebelum dev kembali bekerja di cabang fitur lama, Anda harus menarik cabang rilis terbaru, untuk menghindari masalah penggabungan yang aneh.
Pada titik ini, kami memiliki kandidat rilis yang mungkin dalam bentuk cabang "Rilis", dan kami siap menjalankan proses CI kami (pada cabang itu, jelas Anda dapat melakukan ini di setiap cabang pengembang, tetapi ini adalah cukup langka di tim pengembang yang lebih besar karena mengacaukan server CI). Ini mungkin proses yang konstan (ini idealnya, CI harus dijalankan setiap kali cabang "Release" diubah), atau mungkin setiap malam.
Pada titik ini, Anda ingin menjalankan build, dan mendapatkan artefak build yang layak dari server CI (yaitu sesuatu yang layak Anda gunakan). Anda dapat melewati langkah ini jika Anda menggunakan bahasa yang dinamis! Setelah Anda dibangun, Anda akan ingin menjalankan Tes Unit Anda, karena itu adalah dasar dari semua tes otomatis dalam sistem; mereka cenderung cepat (yang bagus, karena seluruh titik CI adalah untuk memperpendek lingkaran umpan balik antara pengembangan dan pengujian), dan mereka tidak membutuhkan penyebaran. Jika mereka lulus, Anda akan ingin secara otomatis menyebarkan aplikasi Anda ke server uji (jika mungkin), dan menjalankan tes integrasi apa pun yang Anda miliki. Tes integrasi dapat berupa tes UI otomatis, tes BDD, atau tes integrasi standar menggunakan kerangka Pengujian Unit (yaitu "unit"
Pada titik ini, Anda harus memiliki indikasi yang cukup komprehensif tentang apakah bangunan itu layak atau tidak. Langkah terakhir yang biasanya saya siapkan dengan cabang "Rilis" adalah untuk membuatnya secara otomatis menyebarkan kandidat rilis ke server pengujian, sehingga departemen QA Anda dapat melakukan tes asap manual (ini sering dilakukan setiap malam alih-alih per-checkin sehingga untuk menghindari mengacaukan siklus tes). Ini hanya memberikan indikasi manusia yang cepat apakah build benar-benar cocok untuk rilis langsung, karena cukup mudah untuk kehilangan hal-hal jika paket tes Anda kurang komprehensif, dan bahkan dengan cakupan uji 100% mudah untuk melewatkan sesuatu yang Anda bisa 't (tidak boleh) menguji secara otomatis (seperti gambar yang tidak sejajar, atau kesalahan ejaan).
Ini, sebenarnya, kombinasi dari Continuous Integration dan Continuous Deployment, tetapi mengingat bahwa fokus dalam Agile adalah pada lean coding dan pengujian otomatis sebagai proses kelas satu, Anda ingin bertujuan untuk mendapatkan pendekatan selengkap mungkin.
Proses yang saya uraikan adalah skenario kasus ideal, ada banyak alasan mengapa Anda mungkin mengabaikan bagian-bagiannya (misalnya, cabang pengembang tidak layak di SVN), tetapi Anda ingin membidik sebanyak mungkin .
Mengenai bagaimana siklus sprint Scrum cocok dengan ini, idealnya Anda ingin rilis Anda terjadi sesering mungkin, dan tidak membiarkannya sampai akhir sprint, karena mendapatkan umpan balik cepat apakah suatu fitur (dan membangun secara keseluruhan) ) layak untuk pindah ke produksi adalah teknik kunci untuk mempersingkat loop umpan balik Anda ke Pemilik Produk Anda.