This is an old revision of the document!


Cursul 01 - Git/BitBucket, Nexus

1. Context DevOps

DevOps = Development & Operations Echipele de development coopereaza cu cele de suport sisteme si au de obicei motivatii, terminologii, tool-uri diferite. In timp ce echipele de development vor viteza si flexibilitate, cele de suport sistem vor sisteme stabile, standardizate. Conceptul DevOps urmareste sa gaseasca o punte comuna si un compromis intre cele doua directii printr-o cultura comuna, un set de principii de operare si set de “best practices” astfel incat fiecare parte implicata sa isi indeplineasca rolul cu un impact minim asupra celeilalte.

Metoda principala este un set de practici care sa automatizeze pasii operationali si sa asigurare configuratii standardizate:

  • Dev: standardizeaza si automatizeaza pasii de la development la testare, securizare si executie peste mai multe medii
  • Ops: automatizeaza configurarea si deploymentul infrastructurii, monitorizand peste mai multe domenii si permitand rezolvarea rapida a eventualelor probleme
Practici DevOps
  • Controlul versiunilor si strategii de branching
  • Pipeline-uri de CI/CD
  • Containere care standardizeaza si izoleaza mediile de executie
  • Scriptarea infrastructurii IaC
  • Monitorizarea pipeline-urilor si integritatii aplicatiilor
CI/CD Pipeline

Continuous Integration - Continuous Development = CI/CD Un pipeline CI/CD este un proces segmentat in mai multi pasi (“stages”) de livrare a unei noi versiuni de software. Introduce automatizarea si monitorizarea pe fiecare din acesti pasi mai ales privind fazele de integrare si testare dar si in timpul livrarii produsului. Desi este posibila executia manuala a fiecarui pas din pipeline, adevarata valoare este adusa prin automatizare.

Elemente tipice ale unui pipeline CI/CD: * Versionarea codului - * Build - compilarea aplicatiei * Test - testare: unitare, functionala, de integrare, end-to-end * Release - livrarea aplicatiei in repository * Deploy- instalare * Validation & Compliance - verificare vulnerabilitati/ conformitate

2. Controlul Versiunii codului

Sistemul de control al versiunii codului inregistreaza schimbarile asupra unui fisier sau set de fisiere astfel incat s aputem accesa versiuni anterioare ale codului. Dezvoltarea de software fiind un domeniu foarte dinamic,aplicatiile si codul sunt constant supuse modificarilor. Astfel incat monitorizarea acestor modificari este un aspect esential.

De obicei orice proiect software este gestionat de o echipa de developeri. Fiecare din ei lucreaza pe un anumit topic al proiectului general.Fiecare trebuie sa scrie cod si sa il testeze pe taskul asociat fara sa impacteze munca celorlalti colegi.

In plus fata de facilitarea lucrului in paralel pe orice proiect, cand s-a comis o greseala, putem folosi versionarea sa identificam problema si sa ne intoarcem la ultima versiune functionala a codului. Cu cat un proiect devine mai mare, mai complex si mai versatil, cu atat devine mai important sa stapanim si sa dezvolatm acest skill.

2.1 Beneficii
  1. Genereaza puncte de backup: probabil cel mai vital beneficiu, fiecare contribuitor creaza un backup al proiectului de fiecare data cand face o clona. Mai multe backup-uri pe mai multe masini asigura faptul ca proiectul poate fi recuperat in cazul unei probleme
  2. Testare si experimentare : functionalitati noi, dezvoltate si testate individual intr-un mediu izolat
  3. Transparenta : istoricul proiectului si asocierea modificarilor cu fiecare utilizator responsabil asigura o dezvoltare transparenta si usor de urmarit
  4. Colaborare : in special prin prisma faptului ca fiecare contribuitor poate lucra local, fara sa fie conectat in permanenta la server, dar si prin crearea workflowului care asigura implicarea mai multor membri ai echipei mai ales in proiecte mari si complexe
2.2 Concepte
  1. Repository - baza de date incluzand schimbarile asupra proiectului
  2. Commit - un snapshot al proiectului la un animit moment
  3. Checkout - copie locala a proiectului
  4. Branch - pointer la un commit
  5. Upstream/ downstream - remote vs local
  6. HEAD - pointer la branch-ul curent
2.3 Tipuri de sisteme de control versiune

1. Sisteme de versionare centralizate [Perforce, ClearCase, SVN, CVS]- un singur server contine toate versiunile codului, administreaza accesul la fisiere si stocheaza backup

  • [+] Stim cine este autoritatea la un anumit proiect
  • [-] Nevoie de conexiune la server, permisii centralizate, downtime
  • [-] single point of failure

2. Sisteme de versionare decentralizate [git, Mercurial, Bazaar] – mai multe servere contin versiunile codului alaturi de copii locale pentru fiecare din contribuitori.

  • [+] Aproape toate operatiile, mai putin sync-ul, sunt locale ceea ce inseamna operatii rapide (commit, diff, history)
  • [+] control al versiunii personal
  • [+] nu este nevoie de conexiune la server
  • [+] fiecare clona este un backup
  • [-?] este nevoie de un workflow pentru coordonare

4. Managementul Outputului: Nexus

5. Resurse utile

devops/cursuri/01.1626699453.txt.gz · Last modified: 2021/07/19 15:57 by laura.stoilescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0