TSM - Automatizează toate lucrurile!

Attila-Mihaly Balazs - Software Panther @ Synapp.io



Acest articol își propune să ofere un plan de nivel înalt pentru automatizarea unei mare părți a ciclului de viață al software-ului. De asemenea va arăta, pe baza unui exemplu concret, cum poate fi implementat un astfel de plan.

Ideile fundamentale

Mai întâi să menționăm ideile fundamentale pe care se bazează planul. Postulăm că următoarele idei sunt "bune". Pe acestea ar trebui să le implementăm sau să ne străduim să implementăm și care ne ajută să avem un ciclu de viață software lin:

Din lista de mai sus aș dori să subliniez în mod special importanța revizuirii de cod: conform [CC2nd] revizuirea codului de o altă persoană este de cel puțin de două ori mai eficient în găsirea defectelor comparativ cu testarea (unit-teste sau de altă natură). De asemenea, este un mod excelent de a răspândi cunoștințe despre sistemul aflat sub dezvoltare în interiorul echipei, reducând riscul de eșec în cazul în care cineva devine indisponibil (nu mai există problema că o anumită bucată de cod este cunoscută de o singură persoană).

Din păcate revizuirea codului poate fi foarte lentă (o estimare pune viteză optimă la aproximativ 150 de linii/oră) și consumatoare de timp. Acesta este un alt motiv bun pentru automatizarea proceselor: eliberează timpul dezvoltatorilor în favoarea revizuirii de cod.

Ce este livrarea continua?

Livrare continuă (continuous delivery) înseamnă că organizația are o modalitate relativ automată de a pune software-ul dezvoltat în producție. În termeni mai concreți, dacă avem în vedere procesul de dezvoltare software din figura de mai jos, se poate vorbi despre un proces continuu de livrare dacă domeniile evidențiate sunt automatizate.

Acest plan exemplificativ funcționează în următorul fel:

Probabil sunteți deja familiari cu integrarea continuă și vă întrebați: care este diferența? Și, într-adevăr, există foarte puține - livrarea continuă este integrare continuă dusă la concluzia sa logică: automatizarea tuturor etapelor după integrare.

Dacă aveți ezitări în legătură cu răspunsul la întrebrea: "pot să am încredere într-o mașină să aibă aceeași grijă ca un inginer de instalare (deployment engineer) cu experiență?", următoarele idei vă pot oferi unele clarificări:

De asemenea v-ați putea simț îngrijorați că procesul de implementare este atât de complicat încât nu se poate automatiza. Relaxați-vă, respirați adânc și faceți următorii pași:

Instrumente folosite

"Inima" unui proces de implementare continuă este un sistem care poate reacționa la evenimente externe (cum ar fi disponibilitatea unei noi bucăți de cod sursă) care execută pașii necesari. O soluție frecvent utilizată este Jenkins (cunoscut anterior sub numele de Hudson) care este foarte versatil și poate interacționa cu o mulțime de sisteme prin intermediul plugin-urilor. Câteva sfaturi legate de configurarea Jenkins-ului:

Alte variante în afară de Jenkins ar fi: TeamCity, CruiseControl și Travis-CI.

Cea de-a doua parte a unui astfel de configurări este un loc pentru a ține codul și comentariile legate de revizii. Acest lucru poate fi un sistem sau două sisteme distincte (în cazul în acesta aveți nevoie să le sincronizați - probabil folosind Jenkins). Câteva variante:

A treia piesă a puzzle-ului este un sistem care efectuează analiza statică pe cod pentru a oferi feedback despre problemele care pot fi detectate în mod automat. Pentru aceasta recomand SonarQube (cunoscut anterior sub numele Sonar). Ea nu face analiză statică pe cont propriu, ci consumă rapoartele create de alte instrumente (cum ar fi FindBugs, FxCop, Pylint, etc) și le prezintă într-o interfață web frumoasă, oferind o clasificare a problemelor, statistici, rapoarte cu schimbări și așa mai departe. Câteva sfaturi legate de folosirea SonarQube:

Concluzii

Existența unui "deployment pipeline" are multe beneficii. Se eliberează timpul pe echipe. Instalarea se face mai repede și garantează rezultate consistente. Asigură că procesul de instalare este definit cu precizie (suficient de precis ca să-l poate executa un calculator). De asemenea, ne învață despre instrumentele de bază și despre linia de comandă, un lucru indispensabil pentru a depana problemele de producție.

Puteți aplica livrarea continuă la toate tipurile de sisteme software, nu doar site-uri sau servicii găzduite (acolo unde este cel mai ușor). Pipeline-ul poate produce installkit-uri sau chiar mașini virtuale complete cu software-ul preinstalat. Livrarea continuă nu înseamnă neapărat că trebuie livrat noul software-ul la client de fiecare dată când se schimbă ceva. Înseamnă doar că aveți opțiunea de a face acest lucru la orice moment în timp.

O carte bună (deși ușor depășită) este "Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation" de Jez Humble și David Farley. De asemenea, puteți arunca o privire asupra unei prezentări cu acest subiect sau puteți să mă contactați pentru întrebări / sfaturi sau chiar să veniți la următoarea întâlnire Cluj.PM unde voi vorbi despre acest subiect.