Wéi bauen ech eng vollwäerteg intern Entwécklung mat DevOps - VTB Erfahrung

DevOps Praktiken funktionnéieren. Mir ware selwer dovunner iwwerzeegt, wa mir d'Verëffentlechungsinstallatiounszäit ëm 10 Mol reduzéiert hunn. Am FIS Profilsystem, dee mir bei VTB benotzen, dauert d'Installatioun elo 90 Minutten anstatt 10. D'Verëffentlechungszäit ass vun zwou Wochen op zwee Deeg erofgaang. D'Zuel vun de persistent Ëmsetzungsdefekter ass op bal e Minimum erofgaang. Fir ewech vun der "manueller Aarbecht" ze kommen an d'Ofhängegkeet vum Verkeefer ze eliminéieren, hu mir misse mat Krute schaffen an onerwaart Léisungen fannen. Ënnert dem Schnëtt ass eng detailléiert Geschicht iwwer wéi mir eng vollwäerteg intern Entwécklung gebaut hunn.

Wéi bauen ech eng vollwäerteg intern Entwécklung mat DevOps - VTB Erfahrung
 

Prolog: DevOps ass eng Philosophie

Am leschte Joer hu mir vill Aarbecht gemaach fir d'intern Entwécklung an d'Ëmsetzung vun DevOps Praktiken bei VTB ze organiséieren:

  • Mir gebaut intern Entwécklung Prozesser fir 12 Systemer;
  • Mir lancéiert 15 Pipelines, véier vun deenen goufen zu Produktioun bruecht;
  • Automatiséiert 1445 Test Szenarie;
  • Mir hunn erfollegräich eng Zuel vu Verëffentlechungen ëmgesat, virbereet vun internen Teams.

Ee vun de schwieregste fir intern Entwécklung an Ëmsetzung vun DevSecOps Praktiken ze organiséieren huet sech als FIS Profilsystem erausgestallt - e Retail Produktprozessor op engem net-relationalen DBMS. Trotzdem konnte mir d'Entwécklung bauen, d'Pipeline lancéieren, individuell Net-Release Packagen op de Produit installéieren, a geléiert wéi Verëffentlechungen zesummesetzen. D'Aufgab war net einfach, awer interessant an ouni offensichtlech Restriktiounen an der Ëmsetzung: hei ass de System - Dir musst eng intern Entwécklung bauen. Déi eenzeg Konditioun ass d'CD ze benotzen virun engem produktiven Ëmfeld.

Am Ufank war den Implementatiouns-Algorithmus einfach a kloer:

  • Mir entwéckelen initial Entwécklung Expertise an erreechen eng akzeptabel Niveau vun Qualitéit aus der Code Equipe ouni brutto Mängel;
  • Mir integréieren an bestehend Prozesser sou vill wéi méiglech;
  • Fir Code tëscht offensichtleche Stadien ze transferéieren, schneiden mir eng Pipeline an drécken ee vun hiren Enden an d'Fortsetzung.

Wärend dëser Zäit muss d'Entwécklungsteam vun der erfuerderter Gréisst Fäegkeeten entwéckelen an den Undeel vu sengem Bäitrag zu Verëffentlechungen op en akzeptablen Niveau erhéijen. An dat ass et, mir kënnen d'Aufgab als fäerdeg betruechten.

Et schéngt, datt dëst e komplett energieeffiziente Wee zum erfuerderleche Resultat ass: hei ass DevOps, hei sinn d'Performancemetriken vun der Équipe, hei ass déi gesammelt Expertise ... Awer an der Praxis krute mir eng aner Bestätegung datt DevOps nach ëmmer ëm d'Philosophie geet , an net "befestegt un de Gitlab Prozess, Ansible, Nexus a méi ënnen op der Lëscht."

Nodeems mir den Aktiounsplang nach eng Kéier analyséiert hunn, hu mir gemierkt datt mir eng Aart Outsource Verkeefer an eis selwer bauen. Dofir gouf d'Prozess-Reengineering un den uewen beschriwwenen Algorithmus bäigefüügt, souwéi d'Entwécklung vun Expertise laanscht de ganze Entwécklungswee fir eng féierend Roll an dësem Prozess z'erreechen. Net déi einfachst Optioun, awer dëst ass de Wee vun der ideologesch korrekter Entwécklung.
 

Wou fänkt d'Inhouse Entwécklung un? 

Et war net de frëndlechste System fir mat ze schaffen. Architektonesch war et e grousst net-relational DBMS, besteet aus villen separaten ausführbaren Objeten (Skripten, Prozeduren, Chargen, asw.), déi wéi néideg opgeruff goufen, an huet um Prinzip vun enger schwaarzer Këscht geschafft: et kritt eng Ufro an Ausgaben eng Äntwert. Aner Schwieregkeeten, déi derwäert sinn ze bemierken, enthalen:

  • exotesch Sprooch (MUMPS);
  • Konsol Interface;
  • Mangel un Integratioun mat populäre Automatisatiounsinstrumenter a Kaderen;
  • Datevolumen an Zénger vun Terabytes;
  • Laascht vun iwwer 2 Milliounen Operatiounen pro Stonn;
  • Bedeitung - Business-kritesch.

Zur selwechter Zäit gouf et kee Quellcode-Repository op eiser Säit. Iwwerhaapt. Et gouf Dokumentatioun, awer all Schlësselwëssen a Kompetenzen waren op der Säit vun enger externer Organisatioun.
Mir hunn ugefaang d'Entwécklung vum System bal vun Null ze beherrschen, andeems se seng Featuren a geréng Verdeelung berücksichtegt. Am Oktober 2018 ugefaang:

  • Studéiert d'Dokumentatioun an d'Basis vun der Code Generatioun;
  • Mir studéiert de kuerze Cours op Entwécklung kritt vum Verkeefer;
  • Beherrscht initial Entwécklungsfäegkeeten;
  • Mir hunn en Trainingshandbuch fir nei Teammemberen zesummegestallt;
  • Mir hunn ausgemaach d'Equipe an "Kampf" Modus ze enthalen;
  • Geléist de Problem mat Code Qualitéitskontroll;
  • Mir hunn e Stand fir Entwécklung organiséiert.

Mir hunn dräi Méint verbruecht fir Expertise z'entwéckelen an eis am System z'entdecken, a vun Ufank 2019 un huet d'Inhouse Entwécklung seng Bewegung an eng hell Zukunft ugefaang, heiansdo mat Schwieregkeeten, awer zouversiichtlech a gezielt.

Repository Migratioun an Autotester

Déi éischt DevOps Aufgab ass de Repository. Mir si séier ausgemaach fir Zougang ze bidden, awer et war noutwendeg fir vum aktuellen SVN mat enger Trunkzweig op eis Zil Git ze migréieren mam Iwwergank op e Modell vu verschiddene Filialen an Entwécklung vum Git Flow. Mir hunn och 2 Teams mat hirer eegener Infrastruktur, plus en Deel vum Verkeefer Team am Ausland. Ech hu misse mat zwee Gits liewen an d'Synchroniséierung garantéieren. An esou enger Situatioun war et déi manner vun zwee Béisen.

D'Migratioun vum Repository gouf ëmmer erëm ausgestallt; et war eréischt am Abrëll fäerdeg, mat der Hëllef vu Kollegen aus der Frontlinn. Mat Git Flow hu mir décidéiert d'Saachen einfach fir e Start ze halen a sech op de klassesche Schema mat Hotfix, entwéckelen a verëffentlechen. Si hunn decidéiert de Meeschter opzeginn (aka prod-like). Drënner wäerte mir erklären firwat dës Optioun fir eis optimal war. En externe Repository, deen dem Verkeefer gehéiert, gemeinsam fir zwou Teams, gouf als Aarbechter benotzt. Et synchroniséiert mam internen Repository no engem Zäitplang. Elo mat Git a Gitlab war et méiglech Prozesser ze automatiséieren.

D'Thema vun Autotesten gouf iwwerraschend einfach geléist - mir kruten e fäerdege Kader. Wann Dir d'Besonderheete vum System berücksichtegt, eng separat Operatioun nennen war e verständlechen Deel vum Geschäftsprozess a gläichzäiteg als Eenheetstest gedéngt. Alles wat bliwwen ass war d'Testdaten virzebereeden an déi gewënscht Uerdnung ze setzen fir d'Skripte ze ruffen an d'Resultater ze evaluéieren. Wéi d'Lëscht vun den Szenarie geformt op Basis vun Operatiounsstatistiken, d'Kritizitéit vu Prozesser an déi existent Regressiounsmethodologie ausgefëllt ass, hunn automatesch Tester ugefaang ze erschéngen. Elo kéinte mer ufänken d'Pipeline ze bauen.

Wéi et war: de Modell virun der Automatisatioun

Den existente Modell vum Ëmsetzungsprozess ass eng separat Geschicht. All Ännerung gouf manuell als separat inkrementell Installatiounspaket transferéiert. Als nächst koum d'manuell Aschreiwung an Jira a manuell Installatioun op Ëmfeld. Fir eenzel Packagen huet alles kloer ausgesinn, awer mat der Virbereedung vun der Verëffentlechung waren d'Saachen méi komplizéiert.

Assemblée gouf um Niveau vun eenzelne Liwwerungen duerchgefouert, déi onofhängeg Objete waren. All Ännerung ass eng nei Liwwerung. Ënner anerem goufen 60-70 technesch Versiounen zu den 10-15 Packagen vun der Haaptverëffentlechungskompositioun bäigefüügt - Versioune kritt wann Dir eppes vun der Verëffentlechung bäigefüügt oder ausgeschloss huet an Ännerungen am Verkaf ausserhalb Verëffentlechungen reflektéieren.

Objekter bannent de Liwwerungen iwwerlappt sech mateneen, besonnesch am ausführbare Code, dee manner wéi hallef eenzegaarteg war. Et waren vill Ofhängegkeeten souwuel vum schonn installéierten Code wéi och op deem deem seng Installatioun just geplangt ass. 

Fir déi erfuerderlech Versioun vum Code ze kréien, war et néideg fir d'Installatiounsuerdnung strikt ze verfollegen, während där Objete kierperlech vill Mol ëmgeschriwwe goufen, e puer 10-12 Mol.

Nodeems ech e Batch vu Packagen installéiert hunn, hunn ech d'Instruktioune manuell ze verfollegen fir d'Astellungen ze initialiséieren. D'Verëffentlechung gouf vum Verkeefer versammelt an installéiert. D'Zesummesetzung vun der Verëffentlechung gouf bal virum Moment vun der Ëmsetzung geklärt, wat d'Schafung vun "Decoupling" Pakete mat sech bréngt. Als Resultat ass e wesentlechen Deel vun der Versuergung vun der Verëffentlechung op d'Verëffentlechung geplënnert mat sengem eegene Schwanz vun "Decouplings".

Elo ass et kloer datt mat dëser Approche - d'Verëffentlechungspuzzel um Packageniveau montéieren - eng eenzeg Meeschterzweig keng praktesch Bedeitung huet. Installatioun op Produktioun huet vun annerhallef bis zwou Stonne vun manuell Aarbecht. Et ass gutt datt op d'mannst um Installateursniveau d'Uerdnung vun der Objektveraarbechtung spezifizéiert gouf: Felder a Strukture goufen aginn ier d'Donnéeën fir si a Prozeduren agefouert goufen. Dëst huet awer nëmmen an engem separaten Package geschafft.

D'logescht Resultat vun dëser Approche war obligatoresch Installatioun Mängel a Form vun kromme Versiounen vun Objeten, onnéideg Code, vermësst Uweisungen an unaccounted géigesäitege Afloss vun Objeten, déi no der Verëffentlechung feverishly eliminéiert goufen. 

Éischt Updates: engagéieren Assemblée a Liwwerung

D'Automatisatioun huet ugefaang andeems de Code duerch e Päif laanscht dës Streck iwwerdroe gëtt:

  • Huelt déi fäerdeg Liwwerung aus der Lagerung;
  • Installéiert et an engem speziellen Ëmfeld;
  • Autotester lafen;
  • Evaluéieren d'Installatiounsresultat;
  • Rufft déi folgend Pipeline op der Säit vum Testbefehl.

Déi nächst Pipeline soll d'Task am Jira registréieren a waart op Kommandoen déi op ausgewielte Testschleifen verdeelt ginn, déi ofhängeg vum Timing vun der Taskimplementatioun. Ausléiser - e Bréif iwwer Bereetschaft fir Liwwerung zu enger bestëmmter Adress. Dëst war natierlech eng offensichtlech Krëpp, awer ech hu missen iergendwou ufänken. Am Mee 2019 huet den Transfer vum Code ugefaang mat Kontrollen op eisen Ëmfeld. De Prozess huet ugefaang, alles wat bleift ass et an anstänneg Form ze bréngen:

  • All Ännerung gëtt an enger separater Branche duerchgefouert, déi dem Installatiounspaket entsprécht an an d'Zilmeeschterzweig fusionéiert;
  • De Pipeline Start Ausléiser ass d'Erscheinung vun engem neien Engagement an der Meeschtesch Branche duerch eng Fusiounsufro, déi vun Inhalter aus der Inhouse Team zougemaach gëtt;
  • Repositories ginn eemol all fënnef Minutten synchroniséiert;
  • D'Assemblée vum Installatiounspaket gëtt gestart - mam Assembler, deen vum Verkeefer kritt gëtt.

Duerno waren et scho bestehend Schrëtt fir de Code ze kontrolléieren an ze transferéieren, de Päif ze starten an op eiser Säit ze montéieren.

Dës Optioun gouf am Juli lancéiert. D'Schwieregkeete vum Iwwergang hunn zu enger Onzefriddenheet tëscht de Verkeefer an der Frontlinn gefouert, awer am nächste Mount hu mir et fäerdeg bruecht all déi rau Kanten ze läschen an e Prozess tëscht den Teams z'etabléieren. Mir hunn elo Versammlung duerch Engagement a Liwwerung.
Am August hu mir et fäerdeg bruecht déi éischt Installatioun vun engem separaten Package op der Produktioun mat eiser Pipeline ze kompletéieren, an zënter September, ouni Ausnam, goufen all Installatioune vun eenzelne Net-Release Packagen duerch eis CD-Tool duerchgefouert. Zousätzlech hu mir et fäerdeg bruecht en Undeel vun internen Aufgaben an 40% vun der Verëffentlechungskompositioun mat engem méi klengen Team wéi de Verkeefer z'erreechen - dëst ass e definitive Succès. Déi seriöst Aufgab ass bliwwen - d'Verëffentlechung ze montéieren an z'installéieren.

Déi lescht Léisung: kumulative Installatiounspäck 

Mir hu ganz gutt verstanen datt d'Skript vun den Uweisunge vum Verkeefer eng sou-sou Automatisatioun war; mir hu misse de Prozess selwer iwwerdenken. D'Léisung war offensichtlech - eng kumulativ Versuergung vun der Verëffentlechungszweig ze sammelen mat all den Objeten vun den erfuerderleche Versiounen.

Mir hunn ugefaang mat Beweis vum Konzept: mir hunn de Verëffentlechungspaket mat dem Inhalt vun der vergaangener Implementatioun mat der Hand zesummegesat an op eisen Ëmfeld installéiert. Alles huet geklappt, d'Konzept huet sech als liewensfäeg erausgestallt. Als nächst hu mir d'Fro geléist fir d'Initialiséierungsastellungen ze scriptéieren an se an der Verpflichtung ze enthalen. Mir hunn en neie Package virbereet an et an Testëmfeld getest als Deel vum Konturupdate. D'Installatioun war erfollegräich, awer mat enger breet Palette vu Kommentaren vum Implementatiounsteam. Awer den Haapt Saach ass datt mir de Go-ahead kruten fir an d'Produktioun an der November Verëffentlechung mat eiser Versammlung ze goen.

Mat just méi wéi engem Mount lénks, hunn d'hand-ausgewielten Ëmgeréits kloer ugedeit datt d'Zäit leeft. Si hunn decidéiert de Bau vun der Verëffentlechungszweig ze maachen, awer firwat sollt et getrennt ginn? Mir hu kee Prod-ähnlechen, an existent Filialen si net gutt - et gëtt vill onnéideg Code. Mir mussen dréngend Prod-Like schneiden, an dëst ass iwwer dräidausend Verpflichtungen. Assemblée mat der Hand ass guer keng Optioun. Mir hunn e Skript skizzéiert deen duerch de Produktinstallatiounsprotokoll leeft a Verpflichtungen fir d'Branche sammelt. Déi drëtte Kéier huet et richteg geschafft, an no "mat enger Datei fäerdeg" war d'Branche fäerdeg. 

Mir hunn eisen eegene Builder fir den Installatiounspaket geschriwwen an et an enger Woch fäerdeg gemaach. Dunn hu mir den Installateur vun der Kernfunktionalitéit vum System geännert, well et Open-Source ass. No enger Serie vu Kontrollen a Modifikatioune gouf d'Resultat als erfollegräich ugesinn. An der Tëschenzäit huet d'Zesummesetzung vun der Verëffentlechung Form geholl, fir déi richteg Installatioun vun deem et néideg war den Testkreeslaf mat der Produktioun ze alignéieren, an eng separat Skript gouf dofir geschriwwen.

Natierlech goufen et vill Kommentaren iwwer déi éischt Installatioun, awer insgesamt huet de Code geschafft. An no ongeféier der drëtter Installatioun huet alles ugefaang gutt ze kucken. Zesummesetzung Kontroll a Versioun Kontroll vun Objete goufen getrennt am manuelle Modus iwwerwaacht, wat op dëser Etapp ganz gerechtfäerdegt war.

Eng zousätzlech Erausfuerderung war déi grouss Zuel vun Net-Releases, déi Rechnung gedroe musse ginn. Awer mat der Prod-ähnlecher Branche a Rebase ass d'Aufgab transparent ginn.

Éischt Kéier, séier an ouni Feeler

Mir hunn d'Verëffentlechung mat enger optimistescher Haltung a méi wéi eng Dosen erfollegräich Installatiounen op verschiddene Circuiten ukomm. Awer wuertwiertlech en Dag virun der Frist, huet sech erausgestallt datt de Verkeefer d'Aarbecht net fäerdeg gemaach huet fir d'Verëffentlechung op d'Installatioun op déi akzeptéiert Manéier ze preparéieren. Wann aus irgendege Grënn eise Build net funktionnéiert, gëtt d'Verëffentlechung gestéiert. Ausserdeem, duerch eis Efforten, déi besonnesch désagréabel ass. Mir hu kee Wee fir zréckzezéien. Dofir hu mir alternativ Optiounen iwwerluecht, Aktiounspläng virbereet an ugefaang mat Installatioun.

Iwwerraschend ass déi ganz Verëffentlechung, déi aus méi wéi 800 Objete besteet, richteg ugefaang, déi éischte Kéier an nëmmen 10 Minutten. Mir hunn eng Stonn iwwerpréift fir d'Logbicher op der Sich no Feeler ze kontrolléieren, awer hu keng fonnt.

De ganzen nächsten Dag war et Rou am Verëffentlechungschat: keng Ëmsetzungsproblemer, kromme Versiounen oder "onpassend" Code. Et war souguer iergendwéi schweier. Méi spéit sinn e puer Kommentarer entstanen, awer am Verglach mat anere Systemer a fréiere Erfahrungen waren hir Zuel a Prioritéit merkbar méi niddereg.

En zousätzlechen Effekt vum kumulative Effekt war eng Erhéijung vun der Qualitéit vun der Montage an der Tester. Wéinst multiple Installatiounen vun der voller Verëffentlechung, Baudefekter an Deploymentfehler goufen fristgerecht identifizéiert. Testen a voller Verëffentlechungskonfiguratiounen huet et méiglech zousätzlech Mängel am géigesäitege Afloss vun Objeten z'identifizéieren, déi net während inkrementellen Installatiounen erscheinen. Et war definitiv e Succès, besonnesch wéinst eisem 57% Bäitrag zu der Verëffentlechung.

Resumé a Conclusiounen

A manner wéi engem Joer hu mir et fäerdeg bruecht:

  • Bauen eng vollwäerteg intern Entwécklung mat engem exotesche System;
  • Eliminéiert kritesch Verkeefer Ofhängegkeet;
  • Lancéiere CI / CD fir eng ganz onfrëndlech Legacy;
  • Erhéije Implementéierungsprozesser op en neien techneschen Niveau;
  • Bedeitend reduzéieren Ofbau Zäit;
  • Däitlech reduzéieren d'Zuel vun Ëmsetzung Feeler;
  • Erklärt Iech zouversiichtlech als e féierende Entwécklungsexpert.

Selbstverständlech gesäit vill vun deem beschriwwen aus wéi direkt Schrecken, awer dëst sinn d'Features vum System an de Prozessbeschränkungen déi dran existéieren. Am Moment hunn d'Ännerungen IS Profil Produkter a Servicer (Masterkonten, Plastikskaarten, Spuerkonten, Escrow, Cash Prêten) beaflosst, awer potenziell kann d'Approche fir all IS applizéiert ginn, fir deen d'Aufgab fir DevOps Praktiken ëmzesetzen ass festgeluecht. De kumulative Modell ka sécher fir spéider Implementatioune replizéiert ginn (och net-Verëffentlechungen) vu ville Liwwerungen.

Source: will.com

Setzt e Commentaire