Apa itu CI / CD? Integrasi berterusan dan penyampaian berterusan dijelaskan

Integrasi berterusan (CI) dan penyampaian berterusan (CD) mewujudkan budaya, kumpulan prinsip operasi, dan pengumpulan amalan yang membolehkan pasukan pengembangan aplikasi menyampaikan perubahan kod dengan lebih kerap dan boleh dipercayai. Pelaksanaannya juga dikenal sebagai saluran pipa CI / CD

CI / CD adalah salah satu amalan terbaik untuk dilaksanakan oleh pasukan devops. Ini juga merupakan praktik terbaik metodologi tangkas, kerana memungkinkan pasukan pengembangan perisian untuk fokus pada memenuhi persyaratan bisnis, kualiti kod, dan keamanan kerana langkah-langkah penerapannya adalah automatik.

CI / CD ditakrifkan

Integrasi berterusan  adalah falsafah pengekodan dan sekumpulan amalan yang mendorong pasukan pembangunan untuk melaksanakan perubahan kecil dan kerap memeriksa kod ke repositori versi kawalan. Kerana kebanyakan aplikasi moden memerlukan pengembangan kod dalam platform dan alat yang berbeza, pasukan memerlukan mekanisme untuk mengintegrasikan dan mengesahkan perubahannya.

Matlamat teknikal CI adalah untuk mewujudkan cara yang konsisten dan automatik untuk membuat, mengemas, dan menguji aplikasi. Dengan konsistensi dalam proses integrasi yang berlaku, pasukan lebih cenderung melakukan perubahan kod dengan lebih kerap, yang membawa kepada kolaborasi dan kualiti perisian yang lebih baik.

Penghantaran berterusan  meningkat di mana integrasi berterusan berakhir. CD mengautomasikan penghantaran aplikasi ke persekitaran infrastruktur terpilih. Sebilangan besar pasukan bekerja dengan pelbagai persekitaran selain produksi, seperti pengembangan dan persekitaran pengujian, dan CD memastikan ada cara automatik untuk mendorong perubahan kod kepada mereka.

Alat CI / CD membantu menyimpan parameter khusus persekitaran yang mesti dikemas dengan setiap penghantaran. Automasi CI / CD kemudian melakukan panggilan perkhidmatan yang diperlukan ke pelayan web, pangkalan data, dan perkhidmatan lain yang mungkin perlu dimulakan semula atau mengikuti prosedur lain ketika aplikasi digunakan.

Integrasi berterusan dan penyampaian berterusan memerlukan  ujian berterusan  kerana objektifnya adalah untuk menyampaikan aplikasi dan kod yang berkualiti kepada pengguna. Pengujian berterusan sering dilaksanakan sebagai satu set regresi otomatis, prestasi, dan ujian lain yang dilaksanakan dalam pipa CI / CD.

Amalan devi CI / CD yang matang mempunyai pilihan untuk melaksanakan penyebaran berterusan di mana perubahan aplikasi dijalankan melalui saluran paip CI / CD dan build lulus disebarkan terus ke persekitaran produksi. Pasukan yang mempraktikkan penghantaran berterusan memilih untuk menggunakan produksi pada jadual harian atau bahkan setiap jam, walaupun penghantaran berterusan tidak selalu optimum untuk setiap aplikasi perniagaan.  

Video berkaitan: Cara menyampaikan kod dengan lebih pantas dengan CI / CD

Bagaimana integrasi berterusan meningkatkan kerjasama dan kualiti

Integrasi berterusan adalah falsafah pembangunan yang disokong oleh mekanik proses dan beberapa automasi. Semasa mempraktikkan CI, pembangun memasukkan kod mereka ke repositori kawalan versi dengan kerap dan kebanyakan pasukan mempunyai standard minimum untuk melakukan kod sekurang-kurangnya setiap hari. Alasan di sebalik ini adalah bahawa lebih mudah untuk mengenal pasti kecacatan dan masalah kualiti perisian lain pada perbezaan kod yang lebih kecil daripada yang lebih besar yang dikembangkan dalam jangka masa yang panjang. Di samping itu, apabila pembangun bekerja pada kitaran komit yang lebih pendek, kemungkinan besar beberapa pembangun mengedit kod yang sama dan memerlukan penggabungan ketika melakukan.

Pasukan yang melaksanakan integrasi berterusan sering dimulakan dengan konfigurasi kawalan versi dan definisi praktik. Walaupun kod masuk sering dilakukan, ciri dan pembaikan dilaksanakan pada jangka masa pendek dan panjang. Pasukan pembangunan yang mengamalkan integrasi berterusan menggunakan teknik yang berbeza untuk mengawal ciri dan kod apa yang siap dihasilkan.

Banyak pasukan menggunakan bendera ciri , mekanisme konfigurasi untuk menghidupkan atau mematikan ciri dan kod pada waktu berjalan. Ciri-ciri yang masih dalam pengembangan dibungkus dengan bendera ciri dalam kod, disebarkan dengan cabang induk ke produksi, dan dimatikan sehingga siap digunakan. Menurut tinjauan baru-baru ini, 63 peratus pasukan yang menggunakan bendera ciri melaporkan pengujian yang lebih baik dan perisian berkualiti tinggi. Alat penanda ciri seperti CloudBees Rollout, Optimizely Rollouts, dan LaunchDarkly berintegrasi dengan alat CI / CD dan membolehkan konfigurasi peringkat ciri.

Teknik lain untuk menguruskan ciri adalah  kawalan versi versi . Strategi percabangan seperti Gitflow dipilih untuk menentukan protokol bagaimana kod baru digabungkan menjadi cabang standard untuk pengembangan, pengujian dan pengeluaran. Cawangan ciri tambahan dibuat untuk yang memerlukan kitaran pengembangan yang lebih lama. Apabila ciri selesai, pemaju kemudian dapat menggabungkan perubahan dari cabang ciri ke cabang pengembangan utama. Pendekatan ini berfungsi dengan baik, tetapi menjadi sukar untuk dikendalikan sekiranya terdapat banyak ciri yang dikembangkan secara serentak.

Proses membina itu sendiri kemudiannya automatik dengan mengemas semua perisian, pangkalan data, dan komponen lain. Sebagai contoh, jika Anda mengembangkan aplikasi Java, CI akan mengemas semua file pelayan web statis seperti HTML, CSS, dan JavaScript bersama dengan aplikasi Java dan skrip pangkalan data apa pun.

CI tidak hanya mengemas semua komponen perisian dan pangkalan data, tetapi automasi juga akan menjalankan ujian unit dan pengujian lain. Ujian ini memberi maklum balas kepada pembangun bahawa perubahan kod mereka tidak melanggar ujian unit yang ada.

Sebilangan besar alat CI / CD memungkinkan pengembang memulai pengembangan berdasarkan permintaan, dipicu oleh komit kod di repositori kontrol versi, atau pada jadwal yang ditentukan. Pasukan perlu membincangkan jadual pembangunan yang paling sesuai untuk ukuran pasukan, jumlah komitmen harian yang diharapkan, dan pertimbangan aplikasi lain. Amalan terbaik untuk memastikan bahawa melakukan dan membina cepat, jika tidak, ia boleh menghalang kemajuan pasukan yang berusaha membuat kod cepat dan sering melakukan.

Ujian berterusan melampaui automasi ujian

Kerangka ujian automatik membantu jurutera jaminan kualiti menentukan, melaksanakan, dan mengautomasikan pelbagai jenis ujian yang dapat membantu pasukan pembangunan mengetahui sama ada binaan perisian lulus atau gagal. Ini termasuk ujian fungsi yang dikembangkan pada akhir setiap pecut dan digabungkan menjadi ujian regresi untuk keseluruhan aplikasi. Ujian regresi ini kemudian memberitahu pasukan sama ada perubahan kod gagal satu atau lebih daripada ujian yang dikembangkan di semua kawasan fungsional aplikasi di mana terdapat liputan ujian.

Amalan terbaik adalah mengaktifkan dan menghendaki pembangun menjalankan semua atau subset ujian regresi di persekitaran tempatan mereka. Langkah ini memastikan bahawa pembangun hanya memberikan kod ke kawalan versi setelah ujian regresi meneruskan perubahan kod.

Ujian regresi hanyalah permulaan. Ujian prestasi, pengujian API, analisis kod statik, ujian keselamatan, dan bentuk pengujian lain juga dapat dilakukan secara automatik. Kuncinya adalah untuk dapat mencetuskan ujian ini sama ada melalui baris perintah, webhook, atau perkhidmatan web dan mereka bertindak balas dengan berjaya atau gagal kod status.

Setelah ujian dibuat secara automatik, pengujian berterusan menunjukkan bahawa automasi disatukan ke dalam saluran paip CI / CD. Beberapa ujian unit dan fungsi dapat diintegrasikan ke dalam CI yang menandakan masalah sebelum atau semasa proses integrasi. Ujian yang memerlukan persekitaran penyampaian penuh seperti prestasi dan ujian keselamatan sering disatukan ke dalam CD dan dilakukan setelah binaan dihantar ke lingkungan sasaran.

Saluran paip CD mengotomatisasi perubahan ke pelbagai persekitaran

Penghantaran berterusan adalah automasi yang mendorong aplikasi ke persekitaran penghantaran. Sebilangan besar pasukan pembangunan biasanya mempunyai satu atau lebih persekitaran pembangunan dan ujian di mana perubahan aplikasi diadakan untuk ujian dan semakan. Alat CI / CD seperti Jenkins, CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo, atau Travis CI digunakan untuk mengautomasikan langkah-langkah dan memberikan pelaporan.

Saluran paip CD khas mempunyai tahap membangun, menguji, dan menyebarkan. Saluran paip yang lebih canggih merangkumi banyak langkah berikut:

  • Menarik kod dari kawalan versi dan melaksanakan binaan.
  • Melaksanakan setiap langkah infrastruktur yang diperlukan yang automatik sebagai kod untuk berdiri atau meruntuhkan infrastruktur awan.
  • Memindahkan kod ke persekitaran pengkomputeran sasaran.
  • Menguruskan pemboleh ubah persekitaran dan mengkonfigurasinya untuk persekitaran sasaran.
  • Mendorong komponen aplikasi ke perkhidmatan yang sesuai, seperti pelayan web, perkhidmatan API, dan perkhidmatan pangkalan data.
  • Melaksanakan langkah-langkah yang diperlukan untuk memulakan semula perkhidmatan atau titik akhir perkhidmatan panggilan yang diperlukan untuk penekanan kod baru.
  • Melaksanakan ujian berterusan dan persekitaran rollback sekiranya ujian gagal.
  • Menyediakan data log dan amaran mengenai keadaan penghantaran.

Sebagai contoh, pengguna Jenkins menentukan saluran paip mereka dalam Jenkinsfile yang menerangkan pelbagai peringkat seperti membina, menguji, dan menyebarkan. Pemboleh ubah persekitaran, pilihan, kunci rahsia, pensijilan, dan parameter lain dinyatakan dalam fail dan kemudian dirujuk secara berperingkat. Bahagian post menangani keadaan dan pemberitahuan ralat.  

CD yang lebih canggih mungkin mempunyai langkah-langkah lain seperti melakukan penyegerakan data, mengarkibkan sumber maklumat, atau melakukan aplikasi dan penambaikan perpustakaan. Alat CI / CD biasanya menyokong pasaran pemalam. Sebagai contoh, Jenkins menyenaraikan lebih daripada 1,500 pemalam yang menyokong penyatuan dengan platform pihak ketiga, antara muka pengguna, pentadbiran, pengurusan kod sumber, dan pengurusan binaan.

Setelah alat CI / CD dipilih, pasukan pengembangan mesti memastikan bahawa semua pemboleh ubah persekitaran dikonfigurasi di luar aplikasi. Alat CI / CD memungkinkan menetapkan pemboleh ubah ini, menutupi pemboleh ubah seperti kata laluan dan kunci akaun, dan mengkonfigurasinya pada saat penyebaran untuk lingkungan sasaran.

Alat CD juga menyediakan fungsi papan pemuka dan pelaporan. Sekiranya binaan atau penghantaran gagal, mereka memberi amaran kepada pemaju dengan maklumat mengenai kegagalan tersebut. Mereka berintegrasi dengan alat kawalan versi dan lincah, sehingga dapat digunakan untuk mencari perubahan kod dan kisah pengguna yang dibuat.

Melaksanakan saluran paip CI / CD dengan seni bina Kubernetes dan tanpa pelayan 

Banyak pasukan yang mengendalikan saluran paip CI / CD di persekitaran awan juga menggunakan kontena seperti Docker dan sistem orkestrasi seperti Kubernetes. Bekas membolehkan aplikasi pembungkusan dan penghantaran dengan cara mudah alih yang standard. Kontena memudahkan untuk meningkatkan atau meruntuhkan persekitaran yang mempunyai beban kerja yang berubah-ubah.

Terdapat banyak pendekatan untuk menggunakan kontena, infrastruktur sebagai kod, dan saluran paip CI / CD bersama-sama. Anda boleh meneroka pilihan dengan menggunakan tutorial seperti Kubernetes dengan Jenkins atau Kubernetes dengan Azure DevOps.

Senibina pengkomputeran tanpa pelayan menyajikan jalan lain untuk menyebarkan dan memperkecil aplikasi. Dalam persekitaran tanpa pelayan, infrastruktur dikendalikan sepenuhnya oleh penyedia perkhidmatan awan dan aplikasi menggunakan sumber yang diperlukan berdasarkan konfigurasinya. Pada AWS misalnya, aplikasi tanpa server dijalankan sebagai fungsi dan penyebaran Lambda dapat diintegrasikan ke dalam saluran paip Jenkins CI / CD dengan pemalam. 

CI / CD membolehkan penggunaan kod yang lebih kerap

Untuk merakam semula, pakej dan ujian perisian CI membina dan memberi amaran kepada pembangun sekiranya perubahan mereka gagal dalam ujian unit. CD adalah automasi yang memberikan perubahan pada infrastruktur dan melaksanakan ujian tambahan. 

Saluran paip CI / CD dirancang untuk perniagaan yang ingin meningkatkan aplikasi dengan kerap dan memerlukan proses penghantaran yang boleh dipercayai. Upaya tambahan untuk menyeragamkan build, mengembangkan tes, dan mengotomatisasi penyebaran adalah proses pembuatan untuk menerapkan perubahan kod. Setelah berada di tempat, ini memungkinkan pasukan untuk fokus pada proses meningkatkan aplikasi dan lebih sedikit lagi pada perincian sistem untuk menyampaikannya ke lingkungan pengkomputeran.

CI / CD adalah amalan terbaik devops kerana menangani ketidakseimbangan antara pembangun yang ingin mendorong perubahan dengan kerap, dengan operasi yang menginginkan aplikasi yang stabil. Dengan automasi yang ada, pembangun dapat mendorong perubahan dengan lebih kerap. Pasukan operasi melihat kestabilan yang lebih besar kerana persekitaran memiliki konfigurasi standard, ada pengujian berterusan dalam proses pengiriman, pemboleh ubah lingkungan dipisahkan dari aplikasi, dan prosedur penggulingan otomatis.

Kesan pelaksanaan saluran paip CI / CD dapat diukur sebagai petunjuk prestasi utama (KPI) devops. KPI seperti frekuensi penyebaran, perubahan waktu petunjuk, dan waktu rata-rata untuk pemulihan (MTTR) dari kejadian sering ditingkatkan apabila CI / CD dengan pengujian berterusan dilaksanakan. Namun, CI / CD hanyalah satu proses yang dapat mendorong peningkatan ini, dan ada prasyarat lain untuk meningkatkan frekuensi penyebaran.

Memulakan dengan CI / CD memerlukan pasukan pengembangan dan pasukan operasi untuk berkolaborasi dalam teknologi, amalan, dan keutamaan. Pasukan perlu mengembangkan konsensus mengenai pendekatan yang tepat untuk perniagaan dan teknologinya sehingga setelah CI / CD di tempat, pasukan akan mengikuti praktik berikut secara konsisten.