Kepiye carane mbangun pangembangan ing omah kanthi lengkap nggunakake DevOps - pengalaman VTB

Praktek DevOps bisa digunakake. Kita padha yakin iki dhéwé nalika suda wektu instalasi release dening 10 kaping. Ing sistem Profil FIS, sing digunakake ing VTB, instalasi saiki njupuk 90 menit tinimbang 10. Wektu mbangun release wis suda saka rong minggu nganti rong dina. Jumlah cacat implementasine terus-terusan wis mudhun nganti meh minimal. Kanggo nyingkiri "pegawe manual" lan ngilangi katergantungan marang vendor, kita kudu nggarap kruk lan nemokake solusi sing ora dikarepake. Ing ngisor potongan kasebut ana crita rinci babagan carane kita mbangun pangembangan internal sing lengkap.

Kepiye carane mbangun pangembangan ing omah kanthi lengkap nggunakake DevOps - pengalaman VTB
 

Prolog: DevOps minangka filosofi

Sajrone taun kepungkur, kita wis nindakake akeh pakaryan kanggo ngatur pangembangan internal lan implementasine praktik DevOps ing VTB:

  • We dibangun pangolahan pembangunan internal kanggo 12 sistem;
  • We dibukak 15 pipelines, papat kang padha digawa menyang produksi;
  • Skenario tes 1445 otomatis;
  • Kita sukses ngetrapake sawetara rilis sing disiapake dening tim internal.

Salah sawijining sing paling angel kanggo ngatur pangembangan internal lan implementasine praktik DevSecOps yaiku sistem Profil FIS - prosesor produk ritel ing DBMS non-relasional. Nanging, kita bisa mbangun pangembangan, ngluncurake pipa, nginstal paket non-release individu ing produk kasebut, lan sinau carane ngumpulake rilis. Tugas kasebut ora gampang, nanging menarik lan tanpa watesan sing jelas ing implementasine: iki sistem - sampeyan kudu mbangun pangembangan ing omah. Siji-sijine syarat yaiku nggunakake CD sadurunge lingkungan sing produktif.

Ing wiwitan, algoritma implementasine katon prasaja lan jelas:

  • Kita ngembangake keahlian pangembangan awal lan entuk tingkat kualitas sing bisa ditampa saka tim kode tanpa cacat kasar;
  • Kita nggabungake ing proses sing wis ana sabisa;
  • Kanggo nransfer kode antarane orane tumrap sekolah ketok, kita Cut pipeline lan push siji saka ends menyang tutugan.

Sajrone wektu iki, tim pangembangan ukuran sing dibutuhake kudu ngembangake katrampilan lan nambah kontribusi kanggo rilis menyang tingkat sing bisa ditampa. Lan iku, kita bisa nimbang tugas rampung.

Kayane iki minangka dalan sing efisien energi kanggo asil sing dibutuhake: iki DevOps, iki metrik kinerja tim, kene akumulasi keahlian ... Nanging ing praktik, kita nampa konfirmasi liyane yen DevOps isih babagan filosofi. , lan ora "ditempelake ing proses gitlab, ansible, nexus lan luwih mudhun ing dhaptar."

Sawise maneh nganalisa rencana aksi kasebut, kita ngerti manawa kita nggawe jinis vendor outsource ing awake dhewe. Mulane, reengineering proses ditambahake menyang algoritma sing diterangake ing ndhuwur, uga pangembangan keahlian ing kabeh rute pangembangan kanggo entuk peran utama ing proses iki. Ora pilihan sing paling gampang, nanging iki minangka dalan pangembangan ideologis sing bener.
 

Ngendi pangembangan inhouse diwiwiti? 

Iku ora sistem paling loropaken kanggo nggarap. Arsitèktur, iku salah siji DBMS non-relasional gedhe, dumadi saka akeh obyek eksekusi kapisah (skrip, prosedur, kumpulan, lan sapiturute), kang diarani minangka needed, lan makarya ing prinsip kothak ireng: nampa panjalukan lan masalah. wangsulan. Kesulitan liyane sing kudu dicathet kalebu:

  • Basa eksotis (MUMPS);
  • Antarmuka konsol;
  • Kurang integrasi karo alat otomatis lan kerangka kerja sing populer;
  • Volume data ing puluhan terabyte;
  • Muat luwih saka 2 yuta operasi saben jam;
  • Wigati - Bisnis-Kritis.

Ing wektu sing padha, ora ana gudang kode sumber ing sisih kita. Sakabehe. Ana dokumentasi, nanging kabeh kawruh lan kompetensi kunci ana ing sisih organisasi eksternal.
Kita wiwit nguwasani pangembangan sistem meh saka awal, njupuk menyang akun fitur lan distribusi kurang. Diwiwiti ing Oktober 2018:

  • Sinau dokumentasi lan dhasar nggawe kode;
  • Kita sinau kursus singkat babagan pangembangan sing ditampa saka vendor;
  • Nguasai katrampilan pangembangan awal;
  • Kita nyusun manual latihan kanggo anggota tim anyar;
  • Kita sarujuk kanggo nyakup tim ing mode "pertempuran";
  • Ngatasi masalah karo kontrol kualitas kode;
  • We diatur ngadeg kanggo pembangunan.

Kita ngenteni telung wulan ngembangake keahlian lan nyemplungake awake dhewe ing sistem kasebut, lan wiwit wiwitan taun 2019, pangembangan inhouse miwiti gerakane menyang masa depan sing cerah, kadhangkala kanthi angel, nanging kanthi yakin lan kanthi sengaja.

Migrasi repositori lan tes otomatis

Tugas DevOps pisanan yaiku repositori. Kita kanthi cepet sarujuk kanggo nyedhiyakake akses, nanging kudu migrasi saka SVN saiki kanthi siji cabang batang menyang target Git kanthi transisi menyang model sawetara cabang lan pangembangan Git Flow. Kita uga duwe 2 tim kanthi infrastruktur dhewe, ditambah karo tim vendor ing luar negeri. Aku kudu manggon karo loro Gits lan mesthekake sinkronisasi. Ing kahanan kaya mengkono, iku kurang saka loro ala.

Migrasi repositori bola-bali ditundha, mung rampung ing wulan April, kanthi bantuan rekan-rekan saka garis ngarep. Kanthi Git Flow, kita mutusake supaya tetep gampang kanggo wiwitan lan mapan ing skema klasik kanthi hotfix, ngembangake lan ngeculake. Dheweke mutusake kanggo ninggalake master (alias prod-like). Ing ngisor iki kita bakal nerangake kenapa pilihan iki dadi optimal kanggo kita. Repositori eksternal sing diduweni vendor, umum kanggo rong tim, digunakake minangka buruh. Disinkronake karo repositori internal miturut jadwal. Saiki karo Git lan Gitlab bisa ngotomatisasi proses.

Masalah autotes ditanggulangi kanthi gampang banget - kita diwenehake kerangka kerja sing wis siap. Njupuk menyang akun peculiarities saka sistem, nelpon operasi kapisah minangka bagean dingerteni saka proses bisnis lan ing wektu sing padha dadi test unit. Kabeh sing isih ana yaiku nyiapake data tes lan nyetel urutan sing dikarepake kanggo nelpon skrip lan ngevaluasi asil. Minangka dhaptar skenario, dibentuk kanthi basis statistik operasi, kritisitas proses lan metodologi regresi sing ana, diisi, tes otomatis wiwit katon. Saiki kita bisa miwiti mbangun pipa.

Kepiye carane: model sadurunge otomatisasi

Model sing ana ing proses implementasine minangka crita sing kapisah. Saben modifikasi ditransfer kanthi manual minangka paket instalasi tambahan sing kapisah. Sabanjure teka registrasi manual ing Jira lan instalasi manual ing lingkungan. Kanggo paket individu, kabeh katon jelas, nanging kanthi nyiapake rilis, perkara kasebut luwih rumit.

Majelis ditindakake ing tingkat pangiriman individu, sing minangka obyek independen. Sembarang owah-owahan minangka pangiriman anyar. Antarane liyane, 60-70 versi teknis ditambahake menyang 10-15 paket komposisi rilis utama - versi sing dipikolehi nalika nambah utawa ora kalebu saka rilis lan nggambarake owah-owahan ing dodolan ing njaba rilis.

Obyek ing kiriman tumpang tindih, utamane ing kode eksekusi, sing kurang saka setengah unik. Ana akeh dependensi ing kode sing wis diinstal lan sing instalasi mung direncanakake. 

Kanggo entuk versi kode sing dibutuhake, sampeyan kudu ngetutake urutan instalasi kanthi ketat, sajrone obyek kasebut ditulis maneh kanthi fisik kaping pirang-pirang, sawetara kaping 10-12.

Sawise nginstal kumpulan paket, aku kudu ngetutake instruksi kanthi manual kanggo miwiti setelan kasebut. Rilis kasebut dipasang lan dipasang dening vendor. Komposisi rilis dijlentrehake meh sadurunge wayahe implementasine, sing mbutuhake nggawe paket "decoupling". Akibaté, bagean pinunjul saka Penyetor dipindhah saka release kanggo release karo buntut dhewe saka "decouplings".

Saiki jelas yen kanthi pendekatan iki - ngumpulake teka-teki rilis ing tingkat paket - cabang master siji ora duwe makna praktis. Instalasi ing produksi njupuk saka siji lan setengah kanggo rong jam pegawe manual. Iku apik yen paling sethithik ing tingkat installer urutan pangolahan obyek wis ditemtokake: lapangan lan struktur dilebokake sadurunge data kanggo wong-wong mau lan tata cara. Nanging, iki mung bisa digunakake ing paket sing kapisah.

Asil logis saka pendekatan iki yaiku cacat instalasi wajib ing wangun versi obyek sing bengkok, kode sing ora perlu, instruksi sing ilang lan ora bisa ditemokake kanggo pengaruh bebarengan obyek, sing diilangi kanthi feverishly sawise dibebasake. 

Nganyari pisanan: nggawe perakitan lan pangiriman

Otomasi diwiwiti kanthi ngirim kode liwat pipa ing rute iki:

  • Pick munggah pangiriman rampung saka panyimpenan;
  • Instal ing lingkungan darmabakti;
  • Mbukak autotests;
  • Evaluasi asil instalasi;
  • Telpon pipo ing ngisor iki ing sisih printah testing.

Pipa sabanjure kudu ndhaptar tugas ing Jira lan ngenteni printah disebarake menyang loop testing sing dipilih, sing gumantung saka wektu implementasi tugas. Pemicu - layang babagan kesiapan kanggo pangiriman menyang alamat sing diwenehake. Iki, mesthi, minangka crutch sing jelas, nanging aku kudu miwiti nang endi wae. Ing Mei 2019, transfer kode diwiwiti kanthi mriksa lingkungan kita. Proses wis diwiwiti, kabeh sing isih ana yaiku nggawe bentuk sing apik:

  • Saben modifikasi ditindakake ing cabang sing kapisah, sing cocog karo paket instalasi lan gabung menyang cabang master target;
  • Pemicu peluncuran pipa yaiku munculé komit anyar ing cabang master liwat panyuwunan gabungan, sing ditutup dening maintainers saka tim inhouse;
  • Repositori disinkronake saben limang menit;
  • Déwan paket instalasi diwiwiti - nggunakake assembler sing ditampa saka vendor.

Sawise iki, wis ana langkah-langkah kanggo mriksa lan nransfer kode, kanggo miwiti pipa lan ngumpul ing sisih kita.

Opsi iki diluncurake ing wulan Juli. Kesulitan transisi nyebabake sawetara rasa ora puas ing antarane vendor lan garis ngarep, nanging sajrone wulan sabanjure kita bisa mbusak kabeh pinggiran kasar lan nggawe proses ing antarane tim. Saiki kita duwe perakitan kanthi komitmen lan pangiriman.
Ing wulan Agustus, kita bisa ngrampungake instalasi pisanan saka paket kapisah ing produksi nggunakake pipa kita, lan wiwit September, tanpa istiméwa, kabeh instalasi saka paket non-release individu wis dileksanakake liwat alat CD kita. Kajaba iku, kita bisa entuk bagean saka tugas inhouse ing 40% komposisi rilis kanthi tim sing luwih cilik tinimbang vendor - iki minangka sukses sing mesthi. Tugas paling serius tetep - kanggo ngumpul lan nginstal release.

Solusi pungkasan: paket instalasi kumulatif 

Kita ngerti banget yen skrip instruksi vendor minangka otomatisasi; kita kudu mikir maneh proses kasebut. Solusi kasebut jelas - kanggo ngumpulake sumber kumulatif saka cabang rilis kanthi kabeh obyek saka versi sing dibutuhake.

Kita miwiti kanthi bukti konsep: kita ngumpulake paket rilis miturut isi implementasine kepungkur lan diinstal ing lingkungan kita. Kabeh wis rampung, konsep kasebut bisa ditindakake. Sabanjure, kita mutusake masalah skrip setelan initialization lan kalebu ing komit. Kita nyiapake paket anyar lan dites ing lingkungan testing minangka bagéan saka nganyari kontur. Instalasi kasebut sukses, sanajan kanthi akeh komentar saka tim implementasi. Nanging sing utama yaiku kita diwenehi ijin kanggo produksi ing rilis November karo perakitan kita.

Kanthi mung luwih saka sasi, persediaan sing dipilih kanthi jelas nuduhake yen wektu wis entek. Dheweke mutusake nggawe bangunan saka cabang rilis, nanging kenapa kudu dipisahake? Kita ora duwe Prod-kaya, lan cabang sing ana ora apik - ana akeh kode sing ora perlu. Kita kudu cepet-cepet ngilangi prod-like, lan iki luwih saka telung ewu komitmen. Ngrakit kanthi tangan ora dadi pilihan. We sketched metu script sing nganggo liwat log instalasi produk lan ngumpulake commits kanggo cabang. Kaping telune kerjane kanthi bener, lan sawise "rampung karo file" cabang kasebut siap. 

Kita nulis pembangun dhewe kanggo paket instalasi lan rampung sajrone seminggu. Banjur kita kudu ngowahi installer saka fungsi inti sistem, amarga iku open-source. Sawise sawetara mriksa lan modifikasi, asil kasebut dianggep sukses. Ing sawetoro wektu, komposisi saka release njupuk wangun, kanggo instalasi bener kang perlu kanggo kempal sirkuit test karo produksi, lan script kapisah iki ditulis kanggo iki.

Mesthi, ana akeh komentar babagan instalasi pisanan, nanging sakabèhé kode kasebut bisa digunakake. Lan sawise babagan instalasi katelu kabeh wiwit katon apik. Kontrol komposisi lan kontrol versi obyek dipantau kanthi kapisah ing mode manual, sing ing tahap iki cukup ditrapake.

Tantangan tambahan yaiku akeh non-rilis sing kudu digatekake. Nanging kanthi cabang kaya Prod lan Rebase, tugas kasebut dadi transparan.

Kaping pisanan, cepet lan tanpa kesalahan

We nyedhaki release karo sikap optimistis lan luwih saka rolas instalasi sukses ing sirkuit beda. Nanging secara harfiah sedina sadurunge deadline, ternyata vendor durung ngrampungake karya kanggo nyiapake rilis kanggo instalasi kanthi cara sing ditampa. Yen sakperangan alesan mbangun kita ora bisa, release bakal kaganggu. Menapa malih, liwat kita efforts , kang utamané karu. Kita ora duwe cara kanggo mundur. Mulane, kita mikir liwat opsi alternatif, nyiapake rencana aksi lan miwiti instalasi.

Kaget, kabeh rilis, kalebu luwih saka 800 obyek, diwiwiti kanthi bener, pisanan lan mung 10 menit. We ngginakaken jam mriksa log nggoleki kasalahan, nanging ora nemu.

Ing dina sabanjure ana kasepen ing obrolan rilis: ora ana masalah implementasine, versi bengkong utawa kode "ora cocog". Iku malah piye wae kikuk. Mengko, sawetara komentar muncul, nanging dibandhingake karo sistem liyane lan pengalaman sadurunge, nomer lan prioritas padha noticeably luwih murah.

Efek tambahan saka efek kumulatif yaiku peningkatan kualitas perakitan lan tes. Amarga pirang-pirang panginstalan rilis lengkap, cacat mbangun lan kesalahan penyebaran diidentifikasi kanthi tepat wektu. Pengujian ing konfigurasi rilis lengkap ngidini kanggo ngenali cacat tambahan ing pengaruh obyek sing ora katon sajrone instalasi tambahan. Iku mesthi sukses, utamane diwenehi kontribusi 57% kanggo rilis kasebut.

Asil lan kesimpulan

Kurang saka setahun kita bisa:

  • Mbangun pangembangan internal lengkap nggunakake sistem eksotis;
  • Ngilangi ketergantungan vendor kritis;
  • Bukak CI / CD kanggo warisan banget ora grapyak;
  • Ngundhakake proses implementasine menyang tingkat teknis anyar;
  • Ngartekno nyuda wektu penyebaran;
  • Ngartekno nyuda jumlah kasalahan implementasine;
  • Kanthi yakin nyatakake dhewe minangka pakar pangembangan sing unggul.

Mesthi, akeh sing diterangake katon kaya omong kosong, nanging iki minangka fitur sistem lan watesan proses sing ana. Saiki, owah-owahan kasebut kena pengaruh produk lan layanan Profil IS (akun master, kertu plastik, akun tabungan, escrow, silihan awis), nanging bisa uga pendekatan kasebut bisa ditrapake kanggo IS apa wae sing tugas kanggo ngetrapake praktik DevOps wis disetel. Model kumulatif bisa ditiru kanthi aman kanggo implementasi sabanjure (kalebu sing ora diluncurake) saka akeh pangiriman.

Source: www.habr.com

Add a comment