Hantera kaos: Att stÀlla saker i ordning med hjÀlp av en teknisk karta

Hantera kaos: Att stÀlla saker i ordning med hjÀlp av en teknisk karta

Bild: Unsplash

Hej alla! Vi Àr automationsingenjörer frÄn företaget Positiva tekniker och vi stödjer utvecklingen av företagets produkter: vi stödjer hela monteringspipelinen frÄn att utvecklare utför en kodrad till publicering av fÀrdiga produkter och licenser pÄ uppdateringsservrar. Informellt kallas vi DevOps-ingenjörer. I den hÀr artikeln vill vi prata om de tekniska stadierna i mjukvaruproduktionsprocessen, hur vi ser dem och hur vi klassificerar dem.

FrÄn materialet kommer du att lÀra dig om komplexiteten i att koordinera multiproduktutveckling, om vad en teknisk karta Àr och hur den hjÀlper till att effektivisera och replikera lösningar, vilka Àr de viktigaste stegen och stegen i utvecklingsprocessen, hur Àr ansvarsomrÄdena mellan DevOps och team i vÄrt företag.

Om Chaos och DevOps

Kortfattat inkluderar konceptet DevOps utvecklingsverktyg och tjÀnster, sÄvÀl som metoder och bÀsta praxis för deras anvÀndning. LÄt oss peka ut det globala mÄl frÄn implementeringen av DevOps-idéer i vÄrt företag: detta Àr en konsekvent minskning av kostnaden för produktion och underhÄll av produkter i kvantitativa termer (mantimmar eller maskintimmar, CPU, RAM, disk, etc.). Det enklaste och mest uppenbara sÀttet att minska den totala kostnaden för utveckling pÄ hela företagets nivÄ Àr minimera kostnaden för att utföra typiska serieuppgifter i alla produktionsled. Men vilka Àr dessa stadier, hur skiljer man dem frÄn den allmÀnna processen, vilka steg bestÄr de av?

NÀr ett företag utvecklar en produkt Àr allt mer eller mindre klart: det finns vanligtvis en gemensam fÀrdplan och utvecklingsschema. Men vad ska man göra nÀr produktsortimentet utökas och det finns fler produkter? Vid första anblicken har de liknande processer och monteringslinjer, och spelet "hitta X skillnader" i loggar och skript börjar. Men vad hÀnder om det redan finns 5+ projekt i aktiv utveckling och det krÀvs stöd för flera versioner utvecklade under flera Är? Vill vi ÄteranvÀnda sÄ mÄnga lösningar som möjligt i produktpipelines eller Àr vi redo att spendera pengar pÄ en unik utveckling för var och en?

Hur hittar man en balans mellan unikhet och serielösningar?

Dessa frÄgor började dyka upp framför oss allt oftare sedan 2015. Antalet produkter vÀxte och vi försökte utöka vÄr automationsavdelning (DevOps), som stödde monteringslinjerna för dessa produkter, till ett minimum. Samtidigt ville vi replikera sÄ mÄnga lösningar som möjligt mellan produkter. NÀr allt kommer omkring, varför göra samma sak i tio produkter pÄ olika sÀtt?

Utvecklingsdirektör: "Killar, kan vi pÄ nÄgot sÀtt utvÀrdera vad DevOps gör för produkter?"

Vi: "Vi vet inte, vi stÀllde inte en sÄdan frÄga, men vilka indikatorer bör övervÀgas?"

Utvecklingsdirektör: "Vem vet! Tror
"

Som i den dÀr berömda filmen: "I'm in a hotel! .." - "Eh ... Kan du visa mig vÀgen?" Vid nÀrmare eftertanke kom vi fram till att vi först mÄste besluta om produkternas sluttillstÄnd; detta blev vÄrt första mÄl.

SÄ, hur analyserar du ett dussin produkter med ganska stora team frÄn 10 till 200 personer och bestÀmmer mÀtbara mÀtvÀrden nÀr du replikerar lösningar?

1:0 till förmÄn för Chaos, eller DevOps pÄ skulderbladen

Vi började med ett försök att tillÀmpa IDEF0-diagram och olika affÀrsprocessdiagram frÄn BPwin-serien. Förvirringen började efter den femte rutan i nÀsta steg i nÀsta projekt, och dessa rutor för varje projekt kan ritas i svansen av en lÄng pyton under 50+ steg. Jag kÀnde mig ledsen och ville yla mot mÄnen - det passade inte i allmÀnhet.

Typiska produktionsuppgifter

Att modellera produktionsprocesser Àr ett mycket komplext och mödosamt jobb: du behöver samla in, bearbeta och analysera mycket data frÄn olika avdelningar och produktionskedjor. Du kan lÀsa mer om detta i artikeln "Modellering av produktionsprocesser i ett IT-företag".

NÀr vi började modellera vÄr produktionsprocess hade vi ett specifikt mÄl - att förmedla till alla anstÀllda som Àr involverade i utvecklingen av vÄrt företags produkter och till projektledare:

  • hur produkter och deras komponenter, utgĂ„ende frĂ„n en kodrad, nĂ„r kunden i form av installatörer och uppdateringar,
  • vilka resurser som tillhandahĂ„lls för varje steg i produktionen av produkter,
  • vilka tjĂ€nster Ă€r involverade i varje steg,
  • hur ansvarsomrĂ„dena för varje steg Ă€r avgrĂ€nsade,
  • vilka kontrakt som finns vid ingĂ„ngen och utgĂ„ngen av varje etapp.

Hantera kaos: Att stÀlla saker i ordning med hjÀlp av en teknisk karta

Genom att klicka pÄ bilden öppnas den i full storlek

VÄrt arbete i företaget Àr uppdelat i flera funktionsomrÄden. Infrastrukturens riktning Àr engagerad i optimeringen av driften av alla "jÀrn"-resurser pÄ avdelningen, sÄvÀl som automatisering av utplaceringen av virtuella maskiner och miljön pÄ dem. Riktningen för övervakningen ger 24/7 serviceprestandakontroll; vi tillhandahÄller Àven övervakning som en tjÀnst för utvecklare. Arbetsflödesriktningen förser team med verktyg för att hantera utvecklings- och testprocesser, analysera kodens tillstÄnd och fÄ analyser av projekt. Och slutligen tillhandahÄller webdev-riktningen publicering av utgÄvor pÄ GUS- och FLUS-uppdateringsservrarna, sÄvÀl som licensiering av produkter som anvÀnder LicenseLab-tjÀnsten. För att stödja produktionspipelinen stÀller vi upp och underhÄller mÄnga olika supporttjÀnster för utvecklare (du kan lyssna pÄ berÀttelser om nÄgra av dem pÄ gamla möten: Op!DevOps! 2016 О Op!DevOps! 2017). Vi utvecklar Àven interna automationsverktyg, bl.a lösningar med öppen kÀllkod.

Under de senaste fem Ären har vÄrt arbete samlat pÄ sig mycket av samma typ och rutinverksamhet och vÄra utvecklare frÄn andra avdelningar kommer frÀmst frÄn s.k. typiska uppgifter, vars lösning Àr helt eller delvis automatiserad, orsakar inte svÄrigheter för utförare och krÀver inte betydande mÀngder arbete. Tillsammans med de ledande omrÄdena analyserade vi sÄdana uppgifter och kunde identifiera enskilda arbetskategorier, eller produktionssteg, stadierna var indelade i odelbara steg, och flera stadier lÀggs ihop produktionsprocesskedja.

Hantera kaos: Att stÀlla saker i ordning med hjÀlp av en teknisk karta

Det enklaste exemplet pÄ en teknisk kedja Àr stegen för montering, driftsÀttning och testning av var och en av vÄra produkter inom företaget. I sin tur, till exempel, bestÄr byggstadiet av mÄnga separata typiska steg: ladda ner kÀllor frÄn GitLab, förbereda beroenden och tredjepartsbibliotek, enhetstestning och statisk kodanalys, exekvera ett byggskript pÄ GitLab CI, publicera artefakter i förvaret pÄ Artifactory och generering av release notes genom vÄrt interna ChangelogBuilder-verktyg.

Du kan lÀsa om typiska DevOps-uppgifter i vÄra andra artiklar om Habré: "Personlig erfarenhet: hur vÄrt system för kontinuerlig integration ser ut"Och"Automatisering av utvecklingsprocesser: hur vi implementerade DevOps-idéer pÄ Positive Technologies".

MÄnga typiska produktionskedjor bildas tillverkningsprocess. Standardmetoden för att beskriva processer Àr att anvÀnda funktionella IDEF0-modeller.

Ett exempel pÄ modellering av en CI-tillverkningsprocess

Vi Àgnade sÀrskild uppmÀrksamhet Ät utvecklingen av standardprojekt för ett kontinuerligt integrationssystem. Detta gjorde det möjligt att uppnÄ enande av projekt, vilket belyser den sÄ kallade slÀpp byggsystem med kampanjer.

Hantera kaos: Att stÀlla saker i ordning med hjÀlp av en teknisk karta

SÄ hÀr fungerar det. Alla projekt ser typiska ut: de inkluderar konfigurationen av sammansÀttningar som faller in i ögonblicksbildförvaret pÄ Artifactory, varefter de distribueras och testas pÄ testbÀnkar och sedan flyttas upp till releaseförvaret. Artifactory-tjÀnsten Àr en enda distributionspunkt för alla byggartefakter mellan team och andra tjÀnster.

Om vi ​​avsevĂ€rt förenklar och generaliserar vĂ„rt releaseschema inkluderar det följande steg:

  • plattformsoberoende produktmontering,
  • utplacering för att testa bĂ€nkar,
  • köra funktionella och andra tester,
  • frĂ€mja testade konstruktioner för att slĂ€ppa arkiv pĂ„ Artifactory,
  • publicering av utgĂ„vor pĂ„ uppdateringsservrar,
  • leverans av sammansĂ€ttningar och uppdateringar till produktion,
  • lansering av installation och uppdatering av produkten.

TÀnk till exempel pÄ den tekniska modellen för detta typiska releaseschema (nedan helt enkelt modell) i form av en funktionell IDEF0-modell. Det Äterspeglar huvudstadierna i vÄr CI-process. IDEF0-modeller anvÀnder den sk ICOM-notation (Input-Control-Output-Mechanism) för att beskriva vilka resurser som anvÀnds i varje steg, baserat pÄ vilka regler och kravarbete som utförs, vad som Àr resultatet och vilka mekanismer, tjÀnster eller personer som implementerar ett visst steg.

Hantera kaos: Att stÀlla saker i ordning med hjÀlp av en teknisk karta

Genom att klicka pÄ bilden öppnas den i full storlek

Som regel Àr det lÀttare att dekomponera och detaljera beskrivningen av processer i funktionella modeller. Men i takt med att antalet element vÀxer blir det svÄrare och svÄrare att förstÄ nÄgot i dem. Men i verklig utveckling finns det ocksÄ hjÀlpsteg: övervakning, produktcertifiering, automatisering av arbetsflöden och andra. Det Àr pÄ grund av skalningsproblemet som vi övergav den hÀr beskrivningen.

Hoppets födelse

I en bok stötte vi pÄ gamla sovjetiska kartor som beskriver tekniska processer (som för övrigt fortfarande anvÀnds idag pÄ mÄnga statligt Àgda företag och universitet). VÀnta, vÀnta, för vi har ocksÄ ett arbetsflöde!.. Det finns stadier, resultat, mÄtt, krav, indikatorer och sÄ vidare och sÄ vidare... Varför inte försöka tillÀmpa flödesscheman pÄ vÄra produktpipelines ocksÄ? Det fanns en kÀnsla: "Det hÀr Àr det! Vi har hittat rÀtt trÄd, det Àr dags att dra den ordentligt!

I en enkel tabell bestÀmde vi oss för att registrera produkter efter kolumner, och tekniska stadier och produktpipeline steg för rader. Milstolpar Àr nÄgot stort, till exempel ett produktbyggande steg. Och steg Àr nÄgot mindre och mer detaljerat, som steget att ladda ner kÀllkoden till byggservern eller steget att kompilera koden.

I skÀrningspunkterna mellan raderna och kolumnerna pÄ kartan lÀgger vi ner status för en specifik etapp och produkt. För statusar definierades en uppsÀttning tillstÄnd:

  1. Ingen information - eller olÀmpligt. Det Àr nödvÀndigt att analysera efterfrÄgan pÄ ett stadium i produkten. Antingen har analysen redan genomförts, men stadiet behövs för nÀrvarande inte eller Àr inte ekonomiskt motiverat.
  2. Uppskjuten - eller inte relevant för tillfÀllet. Det behövs ett skede i pipelinen, men det finns inga krafter för genomförandet i Är.
  3. Planerad. Etappen Àr planerad att genomföras i Är.
  4. Genomfört. Stadiet i pipelinen implementeras i den erforderliga volymen.

Att fylla i tabellen började projekt för projekt. Först klassificerades stadierna och stegen i ett projekt och deras status registrerades. Sedan tog de nÀsta projekt, fixade statusen i det och lade till de stadier och steg som saknades i tidigare projekt. Som ett resultat fick vi stadierna och stegen i hela vÄr produktionspipeline och deras status i ett specifikt projekt. Det visade sig nÄgot liknande produktpipeline-kompetensmatrisen. Vi kallade en sÄdan matris för en teknisk karta.

Med hjÀlp av den tekniska kartan samordnar vi mÀttekniskt rimligt med teamen de arbetsplaner för Äret och de mÄl som vi tillsammans vill uppnÄ: vilka etapper vi lÀgger till projektet i Är, och vilka vi lÀmnar för senare. Under arbetets gÄng kan vi ocksÄ ha förbÀttringar i de stadier som vi har genomfört för endast en produkt. Sedan utökar vi vÄr karta och introducerar denna förbÀttring som ett steg eller ett nytt steg, sedan analyserar vi för varje produkt och tar reda pÄ möjligheten att replikera förbÀttringen.

De kan invÀnda mot oss: "Detta Àr naturligtvis bra, bara med tiden kommer antalet steg och etapper att bli oöverkomligt stort. Hur man Àr?

Vi har infört standardiserade och ganska fullstÀndiga beskrivningar av kraven för varje steg och steg, sÄ att de förstÄs av alla inom företaget pÄ samma sÀtt. Med tiden, nÀr förbÀttringar införs, kan ett steg tas upp i ett annat steg eller steg, och sedan kommer de att "kollaps". Samtidigt passar alla krav och tekniska nyanser in i kraven för generaliseringsstadiet eller steget.

Hur utvÀrderar man effekten av att replikera lösningar? Vi anvÀnder ett extremt enkelt tillvÀgagÄngssÀtt: vi tillskriver de initiala kapitalkostnaderna för implementeringen av ett nytt steg till Ärliga allmÀnna produktkostnader och dividerar sedan med alla vid replikering.

Delar av utvecklingen visas redan som milstolpar och steg pÄ kartan. Vi kan pÄverka minskningen av kostnaden för produkten genom införandet av automatisering för typiska steg. Efter det övervÀger vi förÀndringarna i kvalitativa egenskaper, kvantitativa mÄtt och vinsten som teamen fÄtt (i mantimmar eller maskintimmar av besparingar).

Teknologisk karta över produktionsprocessen

Om vi ​​tar alla vĂ„ra steg och steg, kodar dem med taggar och utökar dem till en kedja, kommer det att visa sig vara vĂ€ldigt lĂ„ngt och obegripligt (bara sjĂ€lva "pytonsvansen" som vi pratade om i början av artikeln) :

[Production] — [InfMonitoring] — [SourceCodeControl] — [Prepare] — [PrepareLinuxDocker] — [PrepareWinDocker] — [Build] — [PullSourceCode] — [PrepareDep] — [UnitTest] — [CodeCoverage] — [StaticAnalyze] — [BuildScenario] — [PushToSnapshot] — [ChangelogBuilder] — [Deploy] — [PrepareTestStand] — [PullTestCode] — [PrepareTestEnv] — [PullArtifact] — [DeployArtifact] — [Test] — [BVTTest] — [SmokeTest] — [FuncTest] — [LoadTest] — [IntegrityTest] — [DeliveryTest] — [MonitoringStands] — [TestManagement] — [Promote] — [QualityTag] — [MoveToRelease] — [License] — [Publish] — [PublishGUSFLUS] — [ControlVisibility] — [Install] — [LicenseActivation] — [RequestUpdates] — [PullUpdates] — [InitUpdates] — [PrepareEnv] — [InstallUpdates] — [Telemetry] — [Workflow] — [Communication] — [Certification] — [CISelfSufficiency]

Det hÀr Àr stadierna för att bygga produkter [Build], distribuera dem för att testa servrar [Deploy], testa [Test], frÀmja byggen för att slÀppa arkiv baserat pÄ resultaten av testning [Promote], generera och publicera licenser [License], publicering [ Publicera] pÄ GUS uppdateringsserver och leverans till FLUS uppdateringsservrar, installation och uppdatering av produktkomponenter pÄ kundens infrastruktur med hjÀlp av Product Configuration Management [Install], samt insamling av telemetri [Telemetri] frÄn installerade produkter.

Utöver dem kan separata stadier urskiljas: övervakning av infrastrukturtillstÄnd [InfMonitoring], versionering av kÀllkod [SourceCodeControl], förberedelse av byggmiljön [Förbereda], projektledning [Arbetsflöde], förse team med kommunikationsverktyg [Kommunikation], produktcertifiering [ Certifiering] och sÀkerstÀlla sjÀlvförsörjning av CI-processer [CISelfSufficiency] (till exempel oberoende av sammansÀttningar frÄn Internet). Dussintals steg i vÄra processer kommer inte ens att beaktas, eftersom de Àr mycket specifika.

Det blir mycket lÀttare att förstÄ och se hela produktionsprocessen om den presenteras i formulÀret teknisk karta; detta Àr en tabell dÀr de individuella produktionsstegen och nedbrutna stegen i modellen skrivs i rader och i kolumner en beskrivning av vad som görs i varje steg eller steg. Huvudvikten lÀggs pÄ de resurser som ger varje led, och avgrÀnsningen av ansvarsomrÄden.

Kartan för oss Àr en sorts klassificerare. Det speglar de stora tekniska delarna av produktionen av produkter. Tack vare det blev det enklare för vÄrt automationsteam att interagera med utvecklare och gemensamt planera implementeringen av automatiseringsstadier, samt förstÄ vilka arbetskostnader och resurser (mÀnniska och hÄrdvara) som kommer att krÀvas för detta.

Inom vĂ„rt företag genereras kartan automatiskt frĂ„n jinja-mallen som en vanlig HTML-fil, och laddas sedan upp till GitLab Pages-servern. En skĂ€rmdump med ett exempel pĂ„ en fullt genererad karta kan ses ĐżĐŸ ссылĐșĐ”.

Hantera kaos: Att stÀlla saker i ordning med hjÀlp av en teknisk karta

Genom att klicka pÄ bilden öppnas den i full storlek

Kort sagt Àr den tekniska kartan en generaliserad bild av produktionsprocessen, som Äterspeglar tydligt klassificerade block med typisk funktionalitet.

Strukturen pÄ vÄr fÀrdplan

Kartan bestÄr av flera delar:

  1. TitelomrÄde - hÀr Àr en allmÀn beskrivning av kartan, grundlÀggande begrepp introduceras, de viktigaste resurserna och resultaten av produktionsprocessen definieras.
  2. Dashboard - hÀr kan du styra visningen av data för enskilda produkter, en sammanfattning av de implementerade stegen och stegen i allmÀnhet för alla produkter tillhandahÄlls.
  3. Teknologisk karta - en tabellformig beskrivning av den tekniska processen. PĂ„ kartan:
    • alla steg, steg och deras koder anges;
    • korta och fullstĂ€ndiga beskrivningar av stadierna ges;
    • de inmatningsresurser och tjĂ€nster som anvĂ€nds i varje steg anges;
    • resultaten av varje steg och ett separat steg anges;
    • ansvarsomrĂ„det för varje steg och steg anges;
    • de tekniska resurserna, sĂ„som HDD (SSD), RAM, vCPU och de mantimmar som krĂ€vs för att stödja arbetet i detta skede, bĂ„de för nĂ€rvarande - ett faktum och i framtiden - en plan, har faststĂ€llts;
    • för varje produkt anges vilka tekniska steg eller steg för den som har implementerats, planerat för implementering, irrelevanta eller inte implementerade.

Beslutsfattande baserat pÄ den tekniska kartan

Efter att ha undersökt kartan Àr det möjligt att vidta nÄgra ÄtgÀrder - beroende pÄ vilken roll medarbetaren har i företaget (utvecklingschef, produktchef, utvecklare eller testare):

  • förstĂ„ vilka stadier som saknas i en verklig produkt eller projekt, och bedöma behovet av deras genomförande;
  • avgrĂ€nsa ansvarsomrĂ„dena mellan flera avdelningar om de arbetar pĂ„ olika etapper;
  • komma överens om kontrakt vid scenernas in- och utgĂ„ngar;
  • integrera ditt arbetsstadium i den övergripande utvecklingsprocessen;
  • mer exakt bedöma behovet av resurser som tillhandahĂ„ller vart och ett av stegen.

Sammanfattar allt ovanstÄende

Rutten Àr mÄngsidig, utdragbar och lÀtt att underhÄlla. Det Àr mycket lÀttare att utveckla och underhÄlla en beskrivning av processer i denna form Àn i en strikt akademisk IDEF0-modell. Dessutom Àr en tabellbeskrivning enklare, mer bekant och bÀttre strukturerad Àn en funktionell modell.

För den tekniska implementeringen av stegen har vi ett speciellt internt verktyg CrossBuilder – ett lagerverktyg mellan CI-system, tjĂ€nster och infrastruktur. Utvecklaren behöver inte klippa sin cykel: i vĂ„rt CI-system rĂ€cker det att köra ett av skripten (den sĂ„ kallade uppgiften) i CrossBuilder-verktyget, som kommer att utföra det korrekt, med hĂ€nsyn till funktionerna i vĂ„r infrastruktur .

Resultat av

Artikeln visade sig vara ganska lÄng, men detta Àr oundvikligt nÀr man beskriver modelleringen av komplexa processer. Till sist skulle jag vilja fixa vÄra huvudidéer kort:

  • MĂ„let med att implementera DevOps-idĂ©er i vĂ„rt företag Ă€r att konsekvent minska kostnaderna för produktion och underhĂ„ll av företagets produkter i kvantitativa termer (mantimmar eller maskintimmar, vCPU, RAM, Disk).
  • SĂ€ttet att minska den totala kostnaden för utveckling Ă€r att minimera kostnaderna för att utföra typiska serieuppgifter: stadier och steg i den tekniska processen.
  • En typisk uppgift Ă€r en uppgift vars lösning Ă€r helt eller delvis automatiserad, inte orsakar svĂ„righeter för utförare och inte krĂ€ver betydande arbetskostnader.
  • Produktionsprocessen bestĂ„r av steg, stegen Ă€r indelade i odelbara steg, som Ă€r typiska uppgifter av olika skala och omfattning.
  • FrĂ„n olika typiska uppgifter har vi kommit till komplexa tekniska kedjor och flernivĂ„modeller av produktionsprocessen, som kan beskrivas med en funktionell IDEF0-modell eller en enklare teknisk karta.
  • Den tekniska kartan Ă€r en tabellformig representation av stadierna och stegen i produktionsprocessen. Det viktigaste: kartan lĂ„ter dig se hela processen i sin helhet, i stora bitar med möjlighet att detaljera dem.
  • Baserat pĂ„ den tekniska kartan Ă€r det möjligt att bedöma behovet av att införa stadier i en viss produkt, avgrĂ€nsa ansvarsomrĂ„den, komma överens om kontrakt vid ingĂ„ngarna och utgĂ„ngarna av stegen och mer exakt bedöma behovet av resurser.

I de följande artiklarna kommer vi att beskriva mer i detalj vilka tekniska verktyg som anvÀnds för att implementera vissa tekniska stadier pÄ vÄr karta.

Artikelförfattare:

  • Alexander Pazdnikov — Chef för Automation (DevOps) pĂ„ Positive Technologies
  • Timur Gilmullin - Suppleant Chef för automationsavdelningen (DevOps) pĂ„ Positive Technologies

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster