Kumaha carana ngawangun pangwangunan inhouse pinuh nganggo DevOps - pangalaman VTB

Prakték DevOps dianggo. Kami yakin kana ieu diri nalika urang ngirangan waktos pamasangan pelepasan ku 10 kali. Dina sistem Propil FIS, anu kami nganggo di VTB, instalasi ayeuna butuh 90 menit tinimbang 10. Waktu ngawangun release geus turun ti dua minggu ka dua poé. Jumlah defects palaksanaan pengkuh geus turun ka ampir minimum a. Pikeun ngajauhan "buruh manual" sareng ngaleungitkeun gumantungna kana anu ngajual, urang kedah damel sareng crutches sareng milarian solusi anu teu kaduga. Di handap potongan aya carita lengkep ngeunaan kumaha urang ngawangun hiji ngembangkeun internal pinuh.

Kumaha carana ngawangun pangwangunan inhouse pinuh nganggo DevOps - pangalaman VTB
 

Prolog: DevOps mangrupikeun filsafat

Sapanjang taun katukang, kami parantos seueur padamelan pikeun ngatur pamekaran internal sareng palaksanaan prakték DevOps di VTB:

  • Urang ngawangun prosés pangwangunan internal pikeun 12 sistem;
  • Urang dibuka 15 pipelines, opat di antarana dibawa ka produksi;
  • Skenario tés 1445 otomatis;
  • Kami suksés ngalaksanakeun sababaraha sékrési anu disiapkeun ku tim internal.

Salah sahiji anu paling hese pikeun ngatur pangembangan inhouse sareng palaksanaan prakték DevSecOps tétéla nyaéta sistem Profil FIS - prosesor produk ritel dina DBMS non-relasional. Tapi, kami tiasa ngawangun pamekaran, ngaluncurkeun pipa, masang pakét non-release individu dina produk, sareng diajar kumaha carana ngumpul kaluaran. Tugas éta henteu gampang, tapi pikaresepeun sareng tanpa larangan anu jelas dina palaksanaan: ieu sistem - anjeun kedah ngawangun pangwangunan di-imah. Hiji-hijina syarat nyaéta ngagunakeun CD sateuacan lingkungan anu produktif.

Awalna, algoritma palaksanaan sigana saderhana sareng jelas:

  • Urang ngamekarkeun kaahlian ngembangkeun awal jeung ngahontal hiji tingkat ditarima kualitas ti tim kode tanpa defects kotor;
  • Urang ngahijikeun kana prosés aya saloba mungkin;
  • Pikeun mindahkeun kode antara tahap atra, urang motong pipa jeung nyorong salah sahiji tungtung na kana tuluyan.

Salila waktos ieu, tim pamekaran ukuran anu diperyogikeun kedah ngembangkeun kaahlian sareng ningkatkeun pangsa kontribusina pikeun dileupaskeun ka tingkat anu tiasa ditampi. Sareng éta, urang tiasa nganggap tugas parantos réngsé.

Éta sigana yén ieu mangrupikeun jalan anu cekap énergi pikeun hasil anu diperyogikeun: ieu DevOps, ieu mangrupikeun métrik kinerja tim, ieu mangrupikeun akumulasi kaahlian ... Tapi dina praktékna, kami nampi konfirmasi sanés yén DevOps masih ngeunaan filsafat. , sareng henteu "napel kana prosés gitlab, ansible, nexus sareng langkung handap daptar."

Sakali deui nganalisa rencana aksi, kami sadar yén kami ngawangun jinis vendor outsource dina diri urang sorangan. Ku alatan éta, prosés reengineering ditambahkeun kana algoritma ditétélakeun di luhur, kitu ogé ngembangkeun kaahlian sapanjang sakabéh jalur ngembangkeun pikeun ngahontal peran ngarah dina prosés ieu. Sanes pilihan panggampangna, tapi ieu jalan pangwangunan ideologically bener.
 

Dimana pangwangunan inhouse dimimitian? 

Éta sanés sistem anu paling ramah pikeun dianggo. Arsitéktur, éta salah sahiji DBMS non-relational badag, diwangun ku loba objék laksana misah (naskah, prosedur, bets, jeung sajabana), nu disebut sakumaha diperlukeun, sarta digawé dina prinsip kotak hideung: eta narima pamundut jeung masalah. hiji respon. Kasulitan séjén anu kedah diperhatoskeun kalebet:

  • Basa aheng (MUMPS);
  • panganteur konsol;
  • Kurangna integrasi jeung parabot automation populér sarta frameworks;
  • Volume data dina puluhan terabytes;
  • Beban langkung ti 2 juta operasi per jam;
  • Signifikansi - Usaha-kritis.

Dina waktos anu sami, teu aya gudang kode sumber di sisi urang. Sakabehna. Aya dokuméntasi, tapi sagala pangaweruh konci na kompetensi aya di sisi hiji organisasi éksternal.
Urang dimimitian mastering ngembangkeun sistem ampir ti scratch, nyokot kana akun fitur sarta distribusi low. Dimimitian dina Oktober 2018:

  • Diajar dokuméntasi jeung dasar-dasar pembuatan kode;
  • Urang diajar kursus pondok dina ngembangkeun narima ti ngajual;
  • Ngawasaan kaahlian ngembangkeun awal;
  • Urang disusun hiji manual latihan pikeun anggota tim anyar;
  • Urang sapuk pikeun kaasup tim dina mode "tempur";
  • Ngarengsekeun masalah sareng kontrol kualitas kode;
  • Urang diayakeun stand pikeun pangwangunan.

Kami nyéépkeun tilu bulan pikeun ngembangkeun kaahlian sareng neuleumkeun diri dina sistem, sareng ti mimiti 2019, pamekaran inhouse mimiti gerakanna nuju masa depan anu cerah, sakapeung kalayan kasusah, tapi percaya diri sareng ngahaja.

Migrasi Repository sareng autotests

Tugas DevOps munggaran nyaéta gudang. Urang gancang sapuk dina nyadiakeun aksés, tapi perlu migrasi ti SVN ayeuna kalayan hiji cabang batang ka udagan Git urang jeung transisi ka model sababaraha cabang sarta ngembangkeun Git Aliran. Urang ogé boga 2 tim kalawan infrastruktur sorangan, ditambah bagian tina tim vendor urang mancanagara. Kuring kedah hirup sareng dua Gits sareng mastikeun sinkronisasi. Dina kaayaan kitu, éta Lesser dua evils.

Migrasi gudang sababaraha kali ditunda, éta réngsé ngan dina April, kalayan bantuan kolega ti garis hareup. Kalayan Git Flow, kami mutuskeun pikeun tetep saderhana pikeun ngamimitian sareng netepkeun skéma klasik kalayan hotfix, ngamekarkeun sareng ngaleupaskeun. Aranjeunna mutuskeun pikeun abandon master (alias prod-kawas). Di handap ieu kami bakal ngajelaskeun naha pilihan ieu tétéla optimal pikeun urang. Repository éksternal milik anu ngajual, umum pikeun dua tim, dianggo salaku pagawé. Éta disingkronkeun sareng gudang internal numutkeun jadwal. Ayeuna kalayan Git sareng Gitlab éta mungkin pikeun ngajadikeun otomatis prosés.

Masalah autotes direngsekeun sacara gampang - kami disayogikeun kerangka anu siap-siap. Nyandak kana akun peculiarities sistem, nelepon operasi misah éta bagian kaharti tina prosés bisnis jeung dina waktos anu sareng dilayanan salaku test Unit. Sadaya anu tetep nyaéta nyiapkeun data tés sareng nyetél urutan anu dipikahoyong pikeun nelepon naskah sareng ngévaluasi hasil. Salaku daptar skenario, kabentuk dina dasar statistik operasi, anu criticality prosés jeung metodologi regression aya, dieusian kaluar, tés otomatis mimiti muncul. Ayeuna urang tiasa ngamimitian ngawangun pipa.

Kumaha ieu: model saméméh automation

Modél prosés palaksanaan anu aya mangrupikeun carita anu misah. Unggal modifikasi sacara manual ditransfer salaku pakét pamasangan tambahan anu misah. Salajengna sumping pendaptaran manual di Jira sarta instalasi manual dina lingkungan. Pikeun bungkusan individu, sadayana katingali jelas, tapi kalayan persiapan pelepasan, hal-hal langkung rumit.

Majelis dilaksanakeun dina tingkat pangiriman individu, anu mangrupikeun objék anu mandiri. Sakur parobahan mangrupikeun pangiriman énggal. Diantara hal séjén, 60-70 vérsi téknis ditambahkeun kana 10-15 bungkusan tina komposisi pelepasan utama - versi anu dicandak nalika nambihan atanapi ngaluarkeun hiji hal tina sékrési sareng ngagambarkeun parobahan penjualan di luar sékrési.

Objék dina pangiriman tumpang tindih saling, khususna dina kode anu tiasa dieksekusi, anu kirang ti satengah unik. Aya seueur katergantungan boh dina kode anu parantos dipasang sareng anu dipasangna nembé direncanakeun. 

Pikeun ménta vérsi kode nu diperlukeun, ieu diperlukeun pikeun mastikeun turutan urutan instalasi, salila objék fisik ditulis ulang sababaraha kali, sababaraha 10-12 kali.

Saatos masang sakumpulan bungkusan, kuring kedah nuturkeun petunjuk sacara manual pikeun ngamimitian setélan. Pelepasan ieu dirakit sareng dipasang ku anu ngajual. Komposisi sékrési ieu dijelaskeun ampir sateuacan momen palaksanaan, anu kalebet nyiptakeun bungkusan "decoupling". Hasilna, bagian signifikan tina suplai dipindahkeun ti release ka release kalawan buntut sorangan "decouplings".

Ayeuna jelas yén kalayan pendekatan ieu - assembling teka release dina tingkat pakét - cabang master tunggal teu boga harti praktis. Instalasi dina produksi nyandak ti hiji satengah nepi ka dua jam gawé manual. Éta saé yén sahenteuna dina tingkat installer parantos netepkeun urutan ngolah obyék: widang sareng struktur diasupkeun sateuacan data sareng prosedur pikeun aranjeunna. Nanging, ieu ngan ukur tiasa dianggo dina pakét anu misah.

Hasil logis tina pendekatan ieu nya éta defects instalasi wajib dina bentuk versi bengkok objék, kode perlu, parentah leungit tur unaccounted pikeun pangaruh silih objék, nu feverishly ngaleungitkeun sanggeus release. 

apdet munggaran: bunuh assembly sarta pangiriman

Automation dimimitian ku ngirimkeun kode ngaliwatan pipa sapanjang jalur ieu:

  • Nyokot pangiriman rengse ti gudang;
  • Pasang dina lingkungan khusus;
  • Ngajalankeun autotests;
  • Evaluasi hasil pamasangan;
  • Nelepon pipa handap di sisi paréntah nguji.

Pipa salajengna kedah ngadaptarkeun tugas di Jira sareng ngantosan paréntah disebarkeun ka puteran uji anu dipilih, anu gumantung kana waktos palaksanaan tugas. Pemicu - surat ngeunaan kesiapan pikeun pangiriman ka alamat anu dipasihkeun. Ieu, tangtosna, éta hiji crutch atra, tapi kuring kungsi ngamimitian wae. Dina Méi 2019, alih kode dimimitian ku pamariksaan di lingkungan urang. Prosésna parantos dimimitian, sadayana anu tetep nyaéta pikeun ngawujudkeun bentuk anu santun:

  • Unggal modifikasi dipigawé dina cabang misah, nu pakait jeung pakét instalasi tur merges kana cabang master target;
  • Pemicu peluncuran pipa nyaéta penampilan komitmen anyar dina cabang master ngaliwatan pamundut ngahiji, nu ditutup ku maintainers ti tim inhouse;
  • Repositories disingkronkeun sakali unggal lima menit;
  • Majelis pakét instalasi dimimitian - nganggo assembler anu ditampi ti anu ngajual.

Saatos ieu, parantos aya léngkah-léngkah pikeun mariksa sareng nransferkeun kodeu, pikeun ngaluncurkeun pipa sareng ngumpul di sisi urang.

Pilihan ieu diluncurkeun dina bulan Juli. Kasusah transisi nyababkeun sababaraha dissatisfaction diantara padagang jeung garis hareup, tapi ngaliwatan bulan hareup urang junun miceun sagala edges kasar jeung ngadegkeun hiji prosés diantara tim. Urang ayeuna gaduh assembly ku komitmen jeung pangiriman.
Dina bulan Agustus, urang junun ngalengkepan pamasangan mimiti pakét misah on produksi ngagunakeun pipa kami, sarta saprak Séptémber, tanpa iwal, sadaya pamasangan pakét non-release individu anu dipigawé ngaliwatan alat CD urang. Salaku tambahan, urang junun ngahontal bagian tina tugas inhouse dina 40% komposisi pelepasan sareng tim anu langkung alit tibatan anu ngajual - ieu mangrupikeun kasuksésan anu pasti. Tugas paling serius tetep - ngumpul tur masang release nu.

Solusi ahir: pakét instalasi kumulatif 

Kami leres-leres ngartos yén skrip paréntah anu ngajual éta mangrupikeun otomatisasi; urang kedah mikirkeun deui prosésna sorangan. Leyuran éta atra - pikeun ngumpulkeun suplai kumulatif ti cabang release kalayan sagala objék tina versi diperlukeun.

Urang mimitian ku bukti konsép: urang leungeun-dirakit pakét release nurutkeun eusi palaksanaan kaliwat tur dipasang dina lingkungan urang. Sagalana digawé kaluar, konsép tétéla jadi giat. Salajengna, urang ngabéréskeun masalah skrip setélan inisialisasi sareng kalebet kana komitmen. Kami nyiapkeun pakét énggal sareng diuji dina lingkungan tés salaku bagian tina pembaruan kontur. Pamasangan éta suksés, sanaos seueur koméntar ti tim palaksanaan. Tapi hal utama nyaéta yén kami dipasihkeun ka payun pikeun produksi dina sékrési Nopémber sareng majelis kami.

Kalawan ngan leuwih ti sabulan ditinggalkeun, suplai leungeun-ngangkat jelas hinted yén waktu geus béak. Aranjeunna mutuskeun nyieun wangunan tina cabang release, tapi naha kudu dipisahkeun? Kami henteu gaduh Prod-sapertos, sareng cabang anu tos aya henteu saé - seueur kode anu teu perlu. Urang urgently kudu motong prod-likes, sarta ieu leuwih tilu rébu commits. Assembling ku leungeun teu hiji pilihan pisan. Urang sketched kaluar naskah anu ngalir ngaliwatan log instalasi produk jeung ngumpulkeun commits kana cabang. Katilu kalina éta jalan leres, sareng saatos "beres sareng file" cabang parantos siap. 

Kami nyerat pembina sorangan pikeun pakét instalasi sareng réngsé dina saminggu. Teras urang kedah ngarobih pamasang tina fungsionalitas inti sistem, sabab éta open-source. Saatos sababaraha pamariksaan sareng modifikasi, hasilna dianggap suksés. Samentawis waktos, komposisi sékrési janten bentuk, pikeun pamasangan anu leres anu peryogi align sirkuit uji sareng produksi, sareng naskah anu misah ditulis pikeun ieu.

Alami, aya seueur koméntar ngeunaan pamasangan munggaran, tapi sacara umum kode éta jalan. Sarta sanggeus ngeunaan instalasi katilu sagalana mimiti kasampak alus. Kontrol komposisi sareng kontrol versi objék diawaskeun sacara misah dina modeu manual, anu dina tahap ieu cukup diyakinkeun.

Tantangan tambahan nyaéta sajumlah ageung non-kaluaran anu kedah diperhatoskeun. Tapi kalayan cabang Prod sareng Rebase, tugasna janten transparan.

Pertama kali, gancang sareng tanpa kasalahan

Kami ngadeukeutan sékrési kalayan sikep optimis sareng langkung ti belasan pamasangan anu suksés dina sirkuit anu béda. Tapi sacara harfiah sadinten sateuacan deadline, tétéla yén padagang teu acan réngsé damel pikeun nyiapkeun pelepasan pikeun instalasi dina cara anu ditampi. Upami kusabab sababaraha alesan ngawangun urang henteu jalan, sékrési bakal kaganggu. Leuwih ti éta, ngaliwatan usaha urang, nu utamana pikaresepeun. Urang teu boga cara pikeun mundur. Ku alatan éta, urang mikir ngaliwatan pilihan alternatif, disusun rencana aksi jeung mimiti instalasi.

Ahéng, sakabéh release, diwangun ku leuwih ti 800 objék, dimimitian neuleu, kahiji kalina jeung dina ngan 10 menit. Urang spent sajam mariksa log pilari kasalahan, tapi teu manggihan nanaon.

Sakabeh poé saterusna aya tiiseun dina obrolan release: euweuh masalah palaksanaan, versi bengkok atawa "teu pantes" kode. Ieu malah kumaha bae kagok. Engké, sababaraha komentar mecenghul, tapi dibandingkeun sistem sejen tur pangalaman saméméhna, jumlah maranéhanana sarta prioritas éta noticeably handap.

Pangaruh tambahan tina pangaruh kumulatif nyaéta kanaékan kualitas rakitan sareng tés. Kusabab sababaraha pamasangan sékrési pinuh, defects ngawangun sareng kasalahan panyebaran diidentipikasi dina waktosna. Uji coba dina konfigurasi pelepasan lengkep ngamungkinkeun pikeun ngaidentipikasi tambahan cacad dina pangaruh silih objék anu henteu muncul nalika pamasangan tambahan. Éta pasti suksés, khususna dipasihan kontribusi 57% kana sékrési éta.

Hasil jeung conclusions

Dina kirang ti sataun urang junun:

  • Ngawangun pangwangunan internal anu lengkep nganggo sistem anu aheng;
  • Ngaleungitkeun kagumantungan vendor kritis;
  • Ngajalankeun CI / CD pikeun warisan pisan teu marahmay;
  • Ningkatkeun prosés palaksanaan ka tingkat téknis anyar;
  • Nyata ngurangan waktu deployment;
  • Nyata ngurangan jumlah kasalahan palaksanaan;
  • Percaya diri nyatakeun diri anjeun salaku ahli pangembangan anu unggul.

Tangtosna, seueur anu dijelaskeun sigana sapertos crap langsung, tapi ieu mangrupikeun fitur sistem sareng watesan prosés anu aya di jerona. Ayeuna, parobihan mangaruhan produk sareng jasa Profil IS (akun master, kartu plastik, rekening tabungan, escrow, pinjaman kas), tapi kamungkinan pendekatan tiasa diterapkeun ka IS anu mana tugas ngalaksanakeun prakték DevOps diatur. Model kumulatif bisa aman replicated pikeun palaksanaan saterusna (kaasup non-release leuwih) ti loba deliveries.

sumber: www.habr.com

Tambahkeun komentar