Saya belum pernah menggunakan Continuous Integration system (CI) sebelumnya. Saya terutama kode dalam MATLAB, Python atau PHP. Tidak satu pun dari ini memiliki langkah membangun dan saya tidak melihat bagaimana CI dapat digunakan untuk pekerjaan saya. Seorang teman di sebuah proyek besar di sebuah perusahaan besar memberi tahu saya bahwa bahasa tidak masalah.
Saya tidak melihat bagaimana CI akan berguna bagi saya jika saya tidak memiliki langkah pembangunan. Saya dapat menganggap CI sebagai lingkungan pengujian yang akan menjalankan unit test. Apakah saya melewatkan sesuatu?
Jawaban:
Integrasi berkelanjutan sebagai istilah mengacu pada dua gagasan berbeda.
Yang pertama adalah alur kerja: alih-alih semua orang dalam tim bekerja di cabang mereka sendiri dan kemudian setelah beberapa minggu pemrograman mencoba untuk menggabungkan perubahan mereka ke dalam arus utama, perubahan itu terintegrasi (hampir) terus menerus. Ini memungkinkan masalah muncul lebih awal, dan menghindari perubahan yang tidak kompatibel. Namun, itu mensyaratkan bahwa kita dapat dengan mudah memeriksa apakah suatu perubahan “berfungsi”.
Di sinilah ide kedua masuk, yang ternyata jauh lebih populer. Server CI adalah lingkungan yang bersih tempat perubahan diuji secepat mungkin. Lingkungan bersih diperlukan agar bangunan dapat direproduksi. Jika berhasil sekali, itu harus selalu berhasil. Ini menghindari masalah "tetapi berhasil pada mesin saya". Secara khusus, server CI berharga ketika perangkat lunak Anda berjalan pada sistem yang berbeda atau dalam konfigurasi yang berbeda dan Anda perlu memastikan semuanya berfungsi.
Kurangnya langkah pembangunan tidak relevan. Namun, CI hanya masuk akal jika Anda memiliki test suite. Paket tes ini harus otomatis, dan tidak boleh gagal. Jika pengujian gagal, pengembang yang sesuai harus mendapatkan notifikasi sehingga mereka dapat memperbaiki masalah yang mereka perkenalkan (“melanggar build”, bahkan ketika tidak ada build sebagai kompilasi).
Ternyata server semacam itu berharga untuk lebih dari sekadar pengujian. Bahkan, sebagian besar perangkat lunak CI benar-benar jelek dalam menjalankan tes dalam berbagai konfigurasi, tetapi pandai mengelola semua jenis pekerjaan. Misalnya selain tes unit "terus menerus", mungkin ada tes penuh sebagai bangunan malam. Perangkat lunak ini dapat diuji dengan beberapa versi Python, versi pustaka yang berbeda. Situs web dapat diuji untuk tautan mati. Kita dapat menjalankan analisis statis, pemeriksa gaya, alat cakupan uji, dll. Di atas kode. Dokumentasi dapat dihasilkan. Ketika semua suite tes lulus, proses pengemasan dapat dimulai sehingga Anda siap untuk merilis perangkat lunak Anda. Ini berguna dalam pengaturan yang gesit di mana Anda menginginkan produk yang dapat digunakan (dan dapat didemonstrasikan) setiap saat. Dengan maraknya aplikasi web, ada juga gagasan penyebaran berkelanjutan: Jika semua tes lulus, kami dapat secara otomatis mendorong perubahan ke produksi. Tentu saja, ini mengharuskan Anda benar-benar percaya diri dalam test suite Anda (jika tidak, Anda memiliki masalah yang lebih besar).
sumber
Benar, Anda tidak memiliki kebutuhan khusus sistem CI untuk melakukan build dan mengecek apakah build tersebut benar, tetapi itu hanya bagian dari apa yang dimaksud dengan CI.
Tujuan CI adalah untuk mendeteksi kesalahan sesegera mungkin, karena secara umum, semakin cepat kesalahan diketahui, semakin murah untuk memperbaikinya. Untuk itu, dalam kasus di mana langkah pembuatan tidak diperlukan, sistem CI masih dapat mengotomatiskan penggunaan alat analisis kode, penyebaran ke lingkungan pengujian, unit / integrasi / regresi / pengujian lain yang Anda bisa mengotomatisasi, dan langkah-langkah lainnya Anda dapat melakukan secara otomatis untuk memeriksa kesalahan.
sumber
Integrasi berkelanjutan berfungsi lebih dari sekadar kompilasi kode. Jika hanya itu yang dilakukannya, maka kita tidak akan membutuhkan hampir banyak alat untuk itu!
Beberapa tugas lain yang dapat saya pikirkan begitu saja yang sering dilakukan oleh pipeline integrasi berkelanjutan:
Melangkah lebih jauh ke garis perbatasan "integrasi berkelanjutan" dalam arti yang ketat, Anda juga bisa melakukan ini:
Intinya sederhana ini: ada tugas yang harus Anda lakukan secara berkala dalam proses pengembangan perangkat lunak selain hanya menulis kode. Dengan mengotomatisasi tugas-tugas ini dan menjalankannya di server, Anda dapat
Dan mungkin beberapa manfaat lain yang bahkan tidak terpikirkan.
sumber
Anda mungkin tidak perlu mengkompilasi solusi, tetapi CI masih dapat membantu Anda dengan mengubah file konfigurasi / jalur folder dll. Dan jika Anda berada dalam tim - mempromosikan perubahan ke status prod dan menyebarkannya
Katakanlah Anda menyebarkan kode Python ke 5 server QA yang berbeda dan memerlukannya menunjuk ke database QA yang berbeda, dan kemudian setelah pengujian otomatis dijalankan (dipicu oleh CI), mempromosikan build ke produksi dan menyebarkannya di sana dengan perubahan konfigurasi yang sesuai untuk setiap server produksi .
sumber