Gestisce u Chaos: mette e cose in ordine cù l'aiutu di una mappa tecnologica

Gestisce u Chaos: mette e cose in ordine cù l'aiutu di una mappa tecnologica

Ritrattu: Unplays

Salut à tutti ! Semu ingegneri d'automatizazione da a cumpagnia Tecnologie pusitive è sustenemu u sviluppu di i prudutti di a cumpagnia: sustenemu u pipeline di assemblea tutale da l'impegnu di una linea di codice da i sviluppatori à a publicazione di i prudutti finiti è licenze nantu à i servitori d'aghjurnamentu. Informalmente, simu chjamati ingegneri DevOps. In questu articulu, vulemu parlà di e fasi tecnologiche di u prucessu di produzzione di u software, cumu i vedemu è cumu si classificà.

Da u materiale amparate nantu à a cumplessità di a coordinazione di u sviluppu multi-prodottu, nantu à ciò chì hè una mappa tecnologica è cumu aiuta à simplificà è riplicà e suluzioni, quali sò e tappe principali è i passi di u prucessu di sviluppu, cumu sò e zone di rispunsabilità. trà DevOps è squadre in a nostra cumpagnia.

À propositu di Chaos è DevOps

In breve, u cuncettu di DevOps include strumenti è servizii di sviluppu, è ancu metodulugia è e migliori pratiche per u so usu. Scupritemu u globale u scopu da l'implementazione di l'idee DevOps in a nostra cumpagnia: questu hè una riduzzione consistente di u costu di produzzione è di mantenimentu di i prudutti in termini quantitativi (ore di l'omu o di l'ore di macchina, CPU, RAM, Disk, etc.). A manera più faciule è ovvia di riduce u costu generale di u sviluppu à u livellu di a cumpagnia sana hè minimizendu u costu di eseguisce travaglii seriali tipici in tutte e fasi di pruduzzione. Ma chì sò sti tappe, cumu si separanu da u prucessu generale, chì passi sò cumposti?

Quandu una cumpagnia sviluppa un pruduttu, tuttu hè più o menu chjaru: ci hè di solitu una strada di strada è un schema di sviluppu cumuni. Ma chì fà quandu a linea di prudutti si espansione è ci sò più prudutti? À u primu sguardu, anu prucessi simili è linee di assemblea, è u ghjocu "truvà X differenze" in logs è script principia. Ma chì s'ellu ci sò digià 5+ prughjetti in u sviluppu attivu è u supportu per parechje versioni sviluppati annantu à parechji anni hè necessariu? Vulemu riutilizà u massimu numeru pussibule di suluzioni in pipelines di produttu o simu pronti à gastru soldi in un sviluppu unicu per ognunu?

Cumu truvà un equilibriu trà l'unicità è a serialità di suluzione ?

Dapoi u 2015, sti quistioni cuminciaru à nasce davanti à noi sempre più spessu. U nùmeru di prudutti criscinu, è avemu pruvatu à espansione u nostru dipartimentu d'automatizazione (DevOps), chì susteneva e linee di assemblea di questi prudutti, à u minimu. À u listessu tempu, avemu vulsutu riplicà quant'è suluzioni possibili trà i prudutti. Dopu tuttu, perchè fà a listessa cosa in deci prudutti in modu diffirenti?

Direttore di sviluppu: "Ragazzi, pudemu in qualchì modu valutà ciò chì DevOps faci per i prudutti?"

Мы: "Ùn sapemu micca, ùn avemu micca dumandatu una tale quistione, ma chì indicatori deve esse cunsideratu?"

Direttore di sviluppu: " Chi sà ! Pensate…”

Cum'è in quellu famusu filmu: "Sò in un hotel ! .." - "Uh ... Mi pò mustrà a strada?" À a riflessione, avemu ghjuntu à a cunclusione chì prima avemu bisognu di decide nantu à i stati finali di i prudutti; questu hè diventatu u nostru primu scopu.

Allora, cumu analizà una decina di prudutti cù squadre abbastanza grandi da 10 à 200 persone è determina metriche misurabili quandu si riplichendu e soluzioni?

1: 0 in favore di Chaos, o DevOps nantu à l'omoplate

Avemu principiatu cù un tentativu di applicà i diagrammi IDEF0 è diversi diagrammi di prucessu cummerciale da a serie BPwin. A cunfusione cuminciò dopu à u quintu quadru di u prossimu tappa di u prossimu prughjettu, è questi chjassi per ogni prughjettu pò esse disegnati in a cuda di un pitone longu sottu 50+ passi. Mi sentu tristu è vulia chjappà à a luna - ùn hè micca adattatu in generale.

I travaglii tipici di produzzione

Mudificà i prucessi di produzzione hè un travagliu assai cumplessu è minuciosu: avete bisognu di cullà, processà è analizà assai dati da diversi dipartimenti è catene di produzzione. Pudete leghje più nantu à questu in l'articulu "Mudelle di i prucessi di produzzione in una cumpagnia IT».

Quandu avemu cuminciatu à mudificà u nostru prucessu di produzzione, avemu avutu un scopu specificu - per trasmette à ogni impiigatu implicatu in u sviluppu di i prudutti di a nostra cumpagnia, è à i prughjetti di prughjetti:

  • cumu i prudutti è i so cumpunenti, partendu da l'impegnu di una linea di codice, ghjunghjenu à u cliente in forma di installatori è aghjurnamenti,
  • quali risorse sò furnite per ogni stadiu di a produzzione di prudutti,
  • chì servizii sò implicati in ogni tappa,
  • cumu sò delimitati i zoni di rispunsabilità per ogni tappa,
  • chì cuntratti esistenu à l'entrata è a surtita di ogni tappa.

Gestisce u Chaos: mette e cose in ordine cù l'aiutu di una mappa tecnologica

Cliccà nantu à l'imaghjini l'aprerà in grandezza

U nostru travagliu in a cumpagnia hè divisu in parechji spazii funziunali. A direzzione di l'infrastruttura hè ingaghjata in l'ottimisazione di u funziunamentu di tutti i risorsi "ferru" di u dipartimentu, è ancu l'automatizazione di l'implementazione di e macchine virtuali è l'ambiente nantu à elli. A direzzione di u monitoraghju furnisce un cuntrollu di prestazione di serviziu 24/7; Avemu ancu furnisce u monitoraghju cum'è serviziu per i sviluppatori. A direzzione di u flussu di travagliu furnisce i squadre cù strumenti per gestisce i prucessi di sviluppu è di teste, analizà u statu di u codice è uttene analisi nantu à i prughjetti. È infine, a direzzione webdev furnisce a publicazione di e versioni nantu à i servitori d'aghjurnamentu GUS è FLUS, è ancu a licenza di i prudutti chì utilizanu u serviziu LicenseLab. Per sustene u pipeline di produzzione, avemu stabilitu è ​​mantene parechji servizii di supportu diffirenti per i sviluppatori (pudete sente storie nantu à alcuni di elli in vechji incontri: Op!DevOps! 2016 и Op!DevOps! 2017). Sviluppemu ancu strumenti d'automatizazione interna, cumprese soluzioni open source.

In l'ultimi cinque anni, u nostru travagliu hà accumulatu assai di u listessu tipu è operazioni di rutina, è i nostri sviluppatori da altri dipartimenti venenu principalmente da u cusì chjamatu. compiti tipici, a suluzione chì hè cumplettamente o parzialmente automatizata, ùn causa micca difficultà per l'esecutori è ùn esige micca quantità di travagliu significativu. Inseme cù i zoni principali, avemu analizà tali compiti è eranu capaci à identificà categurie individuale di u travagliu, o fasi di pruduzzione, i tappe sò stati divisi in passi indivisibili, è parechji tappe aghjunghjenu catena di prucessu di pruduzzioni.

Gestisce u Chaos: mette e cose in ordine cù l'aiutu di una mappa tecnologica

L'esempiu più simplice di una catena tecnologica hè e tappe di assemblea, implementazione è prova di ognunu di i nostri prudutti in a cumpagnia. À u turnu, per esempiu, a tappa di custruzzione hè custituita da parechji passi tipici separati: scaricamentu di fonti da GitLab, preparazione di dipendenze è biblioteche di terze parti, teste di unità è analisi di codice staticu, eseguisce un script di custruzzione in GitLab CI, pubblicà artefatti in u repository in Artifactory è generazione di note di liberazione attraversu u nostru strumentu internu ChangelogBuilder.

Pudete leghje nantu à i travaglii tipici di DevOps in i nostri altri articuli nantu à Habré: "Esperienza persunale: ciò chì u nostru sistema di Integrazione Continua pare"E"Automatizazione di i prucessi di sviluppu: cumu implementemu idee DevOps in Tecnologie Positive».

Si formanu parechje catene di produzzione tipiche prucessu di fabricazione. L'approcciu standard per descriverà i prucessi hè di utilizà mudelli IDEF0 funzionali.

Un esempiu di mudellu di un prucessu CI di fabricazione

Avemu pagatu una attenzione particulari à u sviluppu di prughjetti standard per un sistema di integrazione cuntinuu. Questu hà permessu di ottene l'unificazione di prughjetti, mette in risaltu u cusì chjamatu liberate schema di creazione cù promozioni.

Gestisce u Chaos: mette e cose in ordine cù l'aiutu di una mappa tecnologica

Eccu cumu si travaglia. Tutti i prughjetti parenu tipici: includenu a cunfigurazione di l'assemblee chì cadenu in u repository di snapshot in Artifactory, dopu chì sò implementati è pruvati in banche di prova, è poi prumuvuti à u repository di liberazione. U serviziu Artifactory hè un puntu di distribuzione unicu per tutti l'artefatti di custruisce trà squadre è altri servizii.

Se simplificàmu è generalizemu assai u nostru schema di liberazione, allora include i seguenti passi:

  • assemblea di produttu multipiattaforma,
  • implementazione à i banchi di prova,
  • esecuzione di teste funziunali è altre,
  • prumove e custruzzioni testate per liberà repository in Artifactory,
  • a publicazione di a liberazione si basa nantu à i servitori d'aghjurnamentu,
  • consegna di assemblee è aghjurnamenti à a produzzione,
  • lanciari a stallazione è l'aghjurnamentu di u pruduttu.

Per esempiu, cunsiderà u mudellu tecnologicu di stu schema di liberazione tipica (in seguitu solu Model) in a forma di un mudellu IDEF0 funzionale. Si riflette i principali tappe di u nostru prucessu CI. I mudelli IDEF0 utilizanu u cusì chjamatu notazione ICOM (Input-Control-Output-Mechanism) à discrìviri chi risorsi sò usati in ogni stadiu, basatu nantu à ciò chì règule è esigenze u travagliu hè realizatu, ciò chì hè u risultatu, è ciò chì miccanismi, servizii o pirsuni implementà una tappa particulare.

Gestisce u Chaos: mette e cose in ordine cù l'aiutu di una mappa tecnologica

Cliccà nantu à l'imaghjini l'aprerà in grandezza

In regula, hè più faciule di scumpressà è detalla a descrizzione di prucessi in mudelli funziunali. Ma cum'è u numeru di elementi cresce, diventa più è più difficiule di capisce qualcosa in elli. Ma in u veru sviluppu, ci sò ancu tappe ausiliarie: surviglianza, certificazione di produttu, automatizazione di u flussu di travagliu, è altri. Hè per via di u prublema di scala chì avemu abbandunatu sta descrizzione.

Nascita di Hope

In un libru, avemu scupertu vechji carte suvietiche chì descrizanu i prucessi tecnologichi (chì, per via, sò sempre usati oghje in parechje imprese statali è università). Aspetta, aspittà, perchè avemu ancu un flussu di travagliu! .. Ci sò tappe, risultati, metriche, esigenze, indicatori, è cetara è cetara... Perchè ùn pruvate micca di applicà i flowsheets à i nostri pipelines di produttu ancu? Ci era un sintimu: "Hè questu! Avemu trovu u filu ghjustu, hè ora di tirà bè !

In una tavula simplice, avemu decisu di registrà i prudutti per colonne, è tappe tecnologiche è passi di pipeline di produttu per fila. Milestones sò qualcosa di grande, cum'è un passu di creazione di produttu. E i passi sò qualcosa più chjucu è più detallatu, cum'è u passu di scaricà u codice fonte à u servitore di custruzzione o u passu di cumpilà u codice.

À l'intersezzione di e fila è e culonni di a mappa, mettemu i stati per un stadiu specificu è un pruduttu. Per i stati, un inseme di stati hè statu definitu:

  1. Ùn ci hè micca dati - o inappropriatu. Hè necessariu analizà a dumanda di una tappa in u pruduttu. O l'analisi hè digià stata realizata, ma u stadiu ùn hè micca necessariu o ùn hè micca ghjustificatu economicamente.
  2. Postponatu - o micca pertinente à u mumentu. Una tappa in u pipeline hè necessariu, ma ùn ci hè micca forze per l'implementazione questu annu.
  3. Pianificatu. A tappa hè prevista per a implementazione di questu annu.
  4. Implementatu. U stadiu in u pipeline hè implementatu in u voluminu necessariu.

Riempimentu di a tavula principia prughjettu per prughjettu. Prima, i tappe è i passi di un prughjettu sò stati classificati è i so stati sò stati registrati. Allora piglianu u prossimu prughjettu, fissu i statuti in questu è aghjunghjenu i tappe è i passi chì mancavanu in i prughjetti previ. In u risultatu, avemu avutu i tappe è i passi di tutta a nostra pipeline di produzzione è i so stati in un prughjettu specificu. Risultò qualcosa simili à a matrice di cumpetenza di u pipeline di produttu. Avemu chjamatu tali matrice una mappa tecnologica.

Cù l'aiutu di a carta tecnulogica, coordinemu in modu metrologicu cù e squadre i piani di travagliu per l'annu è l'ugettivi chì vulemu ghjunghje inseme : quali tappe aghjunghjemu à u prugettu quist'annu, è quali lascemu per più tardi. Inoltre, in u cursu di u travagliu, pudemu avè migliure in e tappe chì avemu finitu per un solu pruduttu. Allora espansione a nostra mappa è introducemu sta migliione cum'è una tappa o un novu passu, dopu analizemu per ogni pruduttu è scopre a fattibilità di riplicà a migliione.

Puderanu ughjetti à noi: "Questu hè tuttu, sicuru, bonu, solu cù u tempu u numeru di passi è tappe diventerà pruibitivamente grande. Cumu esse?

Avemu introduttu descrizzione standard è abbastanza cumpleta di i requisiti per ogni tappa è passu, in modu chì sò capitu da tutti in a cumpagnia in u listessu modu. À u tempu, cum'è i migliuramentu sò intrudutti, un passu pò esse assorbutu in un altru stadiu o passu, è poi "collapse". À u listessu tempu, tutti i bisogni è i sfumaturi tecnologichi sò adattati in i requisiti di a tappa generale o di u passu.

Cumu valutà l'effettu di riplicà e soluzioni? Adupremu un accostu estremamente simplice: attribuemu i costi di capitale iniziali per l'implementazione di una nova tappa à i costi generali annuali di u produttu, è dopu dividite per tutti quandu si replicanu.

Parte di u sviluppu sò digià indicati cum'è tappe è passi nantu à a mappa. Pudemu influenzà a riduzione di u costu di u pruduttu per mezu di l'intruduzioni di l'automatizazione per e tappe tipiche. Dopu quì, cunsideremu i cambiamenti in e caratteristiche qualitative, metriche quantitative è u prufittu ricivutu da e squadre (in l'ore di l'omu o l'ora di macchina di risparmiu).

Mappa tecnologica di u prucessu di pruduzzione

Se pigliamu tutte e nostre tappe è passi, codificate cù tag è espansione in una catena, allora serà assai longu è incomprensibile (solu a stessa "coda di pitone" chì avemu parlatu à u principiu di l'articulu) :

[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]

Quessi sò e tappe di custruzzione di prudutti [Custruisce], implementendu à i servitori di prova [Deploy], testing [Test], prumove custruzzioni per liberà repository basati nantu à i risultati di teste [Promote], generazione è publicazione di licenze [Licenza], pubblicazione [ Publicà] nantu à u servitore di l'aghjurnamenti GUS è a consegna à i servitori di l'aghjurnamentu FLUS, l'installazione è l'aghjurnamentu di i cumpunenti di u produttu nantu à l'infrastruttura di u cliente utilizendu a Gestione di a Cunfigurazione di u Produttu [Installa], è ancu a cullizzioni di telemetria [Telemetria] da i prudutti installati.

In più di elli, ponu esse distinti tappe separati: monitoraghju di u statu di l'infrastruttura [InfMonitoring], versione di codice fonte [SourceCodeControl], preparazione di l'ambiente di creazione [Preparazione], gestione di prughjettu [Flussu di travagliu], furnisce i squadre cù strumenti di cumunicazione [Communication], certificazione di produttu [ Certification] è assicurendu l'autosufficienza di i prucessi CI [CISelfSufficiency] (per esempiu, l'indipendenza di l'assemblee da Internet). Decine di passi in i nostri prucessi ùn anu ancu esse cunsideratu, perchè sò assai specifichi.

Serà assai più faciule per capiscenu è vede tuttu u prucessu di produzzione s'ellu hè presentatu in a forma mappa tecnologica; Quissa hè una tavula in u quali i tappe di pruduzzione individuale è passi decomposti di u Modellu sò scritti in fila, è in culonni una discrizzione di ciò chì hè fattu in ogni stadiu o passu. L'enfasi principalu hè pusatu nantu à e risorse chì furnisce ogni stadiu, è a delimitazione di e zone di rispunsabilità.

A mappa per noi hè un tipu di classificatore. Si riflette i grandi parti tecnologica di a pruduzzioni di prudutti. Grazie à questu, hè diventatu più faciule per a nostra squadra d'automatizazione per interagisce cù i sviluppatori è pianificà inseme l'implementazione di tappe d'automatizazione, è ancu capisce ciò chì i costi di u travagliu è e risorse (umani è hardware) seranu necessarii per questu.

Dentru a nostra cumpagnia, a mappa hè generata automaticamente da u mudellu jinja cum'è un schedariu HTML regulare, è poi caricatu à u servitore GitLab Pages. Una screenshot cù un esempiu di una mappa cumpletamente generata pò esse vista Member.

Gestisce u Chaos: mette e cose in ordine cù l'aiutu di una mappa tecnologica

Cliccà nantu à l'imaghjini l'aprerà in grandezza

In corta, a mappa tecnologica hè una stampa generalizata di u prucessu di produzzione, chì riflette blocchi chjaramente classificati cù funziunalità tipica.

Struttura di a nostra mappa stradale

A mappa hè custituita da parechje parti:

  1. Zona di titulu - quì hè una descrizzione generale di a mappa, i cuncetti basi sò intrudutti, i risorsi principali è i risultati di u prucessu di produzzione sò definiti.
  2. Dashboard - quì pudete cuntrullà a visualizazione di dati per i prudutti individuali, un riassuntu di e tappe implementate è i passi in generale per tutti i prudutti hè furnitu.
  3. Mappa tecnologica - una descrizzione tabulare di u prucessu tecnologicu. Nantu à a mappa:
    • tutti i tappe, i passi è i so codici sò datu;
    • e descrizioni brevi è cumplete di e tappe sò datu;
    • i risorse di input è i servizii utilizati in ogni stadiu sò indicati;
    • i risultati di ogni tappa è un passu separatu sò indicati;
    • l'area di rispunsabilità per ogni tappa è passu hè indicatu;
    • i risorsi tecnichi, cum'è HDD (SSD), RAM, vCPU, è l'ore di l'omu necessariu per sustene u travagliu in questa fase, sia in u mumentu attuale - un fattu, è in u futuru - un pianu, sò stati determinati;
    • per ogni pruduttu, hè indicatu quali tappe tecnologiche o passi per ellu sò state implementate, pianificate per implementazione, irrilevanti o micca implementate.

A decisione basata nantu à a mappa tecnologica

Dopu avè esaminatu a mappa, hè pussibule di piglià alcune azzioni - secondu u rolu di l'impiigatu in a cumpagnia (gestore di sviluppu, direttore di produttu, sviluppatore o tester):

  • capisce quale tappe mancanu in un veru pruduttu o prughjettu, è valutà a necessità di a so implementazione;
  • delimità i zoni di rispunsabilità trà parechji dipartimenti s’elli travaglianu in diverse tappe;
  • accunsenu cuntratti à l'entrata è l'uscita di e tappe;
  • integrà a vostra tappa di u travagliu in u prucessu di sviluppu generale;
  • valutà più precisamente a necessità di risorse chì furnisce ognuna di e tappe.

Riassuntu tuttu ciò chì sopra

U routing hè versatile, estensibile è faciule da mantene. Hè assai più faciule per sviluppà è mantene una descrizzione di prucessi in questa forma cà in un mudellu strettu IDEF0 accademicu. Inoltre, una descrizzione tabulare hè più simplice, più familiare è megliu strutturata cà un mudellu funziunale.

Per l'implementazione tecnica di i passi, avemu un strumentu internu speciale CrossBuilder - un strumentu di strata trà i sistemi CI, servizii è infrastruttura. U sviluppatore ùn hà micca bisognu di taglià a so bicicletta: in u nostru sistema CI, hè abbastanza per eseguisce unu di i scripts (u cusì chjamatu compitu) di l'uttellu CrossBuilder, chì l'eseguirà currettamente, tenendu in contu e caratteristiche di a nostra infrastruttura. .

Risultati

L'articulu hè statu abbastanza longu, ma questu hè inevitabbile quandu si descrizanu u mudellu di prucessi cumplessi. In fine, mi piacerebbe correggere brevemente e nostre idee principali:

  • L'obiettivu di implementà l'idee DevOps in a nostra cumpagnia hè di riduce in modu coerente u costu di produzzione è di mantenimentu di i prudutti di a cumpagnia in termini quantitativi (ore di l'omu o ore di macchina, vCPU, RAM, Disk).
  • A manera di riduce u costu generale di u sviluppu hè di minimizzà u costu di eseguisce i travaglii di serie tipici: tappe è tappe di u prucessu tecnologicu.
  • Un compitu tipicu hè un compitu chì a suluzione hè cumplettamente o parzialmente automatizata, ùn causa micca difficultà per l'esecutori è ùn hè micca bisognu di costu di travagliu significativu.
  • U prucessu di pruduzzione hè custituitu da tappe, i tappe sò divisi in tappe indivisibili, chì sò cumpitenzi tipichi di diverse scala è ambitu.
  • Da i travaglii tipici disparati, avemu ghjuntu à catene tecnulogichi cumplessi è mudelli multi-livellu di u prucessu di produzzione, chì ponu esse discrittu da un mudellu IDEF0 funziunale o una mappa tecnologica più simplice.
  • A mappa tecnologica hè una rapprisintazioni tabulare di e tappe è i passi di u prucessu di produzzione. U più impurtante: a mappa permette di vede tuttu u prucessu in a so sanu, in pezzi grossi cù a pussibilità di dettagli.
  • Basatu nantu à a mappa tecnologica, hè pussibule di valutà a necessità di introduzione di tappe in un pruduttu particulari, delineate e zone di rispunsabilità, accunsentiscenu cuntratti à l'inputs è outputs di tappe, è valutà più precisamente a necessità di risorse.

In l'articuli seguenti, descriveremu in più dettagliu quali strumenti tecnichi sò usati per implementà certi stadi tecnologichi nantu à a nostra mappa.

Autori di l'articulu:

  • Alexander Pazdnikov - Capu di l'automatizazione (DevOps) in Positive Technologies
  • Timur Gilmullin - Diputatu Capu di u Dipartimentu di Automatizazione (DevOps) in Positive Technologies

Source: www.habr.com

Add a comment