12.1 Koda dəyişikliklər edirik
Yuxarıda dediyim kimi, müasir proqramlaşdırma — koda kiçik dəyişikliklər etməkdən ibarətdir. Bununla onilliklərdir milyonlarla proqramçı məşğul olur, buna görə də bu proses artıq hər mümkün şəkildə tənzimlənmiş, standartlaşdırılmış və formallaşdırılmışdır.
Birincisi, kodun saxlanılması üçün xüsusi bir proqram var — Git. Git — versiyaların idarə olunması üzrə paylanmış sistemdir, hansı ki kodda dəyişiklikləri izləmək və proqramçılar arasında birgə layihələr üzərində işi koordinasiya etmək üçün istifadə olunur.
Git proqramçılara layihədə branch-lər yaratmağa imkan verir, eyni zamanda bütün dəyişikliklərin tarixini saxlayır və faylın istənilən vəziyyətinə geri qayıtmağa şərait yaradır. Bu, dəyişikliklərin effektiv şəkildə birləşdirilməsini və konfliktlərin həllini təmin edir, Git-i müasir proqram təminatlarının birgə hazırlanması üçün əsas alətə çevirir.
İkincisi, koda dəyişikliklərin daxil edilməsi prosesi də standartlaşdırılmışdır. Adətən hər yeni funksiya (new feature) üçün gitte yeni branch yaradırsınız, dəyişikliklərinizi commit-lər seriyası şəklində həmin branch-ə daxil edirsiniz və sonra Pull Request yaradaraq onu komanda liderinizə (team lead) və ya komanda üzvünüzə göndərirsiniz ki, o, Code Review edib dəyişikliklərinizi təsdiqləsin.
Əgər hər şey yaxşı keçərsə, həmin dəyişikliklər dev branch-ə merge olunur, layihənin avtomatik build prosesləri və testlər işə düşür. Çoxlu testlər.
12.2 Layihəni yığırıq
Layihəni test etmək və ya serverə yükləməzdən əvvəl onu yığmaq lazımdır.
Layihələrin yığılması — bu, layihənin mənbə kodunu işlədilə bilən proqramlara və ya digər işə salına bilən formatlara kompilyasiya etmək prosesidir, çox vaxt test və deploy elementlərini də əhatə edir. Bu, proqram təminatı hazırlamağın əsas aspektidir və proqramın istifadəyə hazır olduğunu təmin edir.
Yığma — kompilyasiya deyil, amma kompilyasiya çox vaxt yığma prosesinin bir hissəsi olur. Yığma tamamlandıqdan sonra çox vaxt müxtəlif serverlərə yüklənməsi lazım olan onlarca və ya hətta yüzlərlə faylınız ola bilər.
Yığıcılar aşağı səviyyəli ola bilər:
Maven və Gradle — Java layihələrində asılılıqları idarə etmək və layihələri yığmaq üçün geniş istifadə olunur.
Apache Ant — Java layihələrini yığmaq üçün başqa bir alətdir, yığma ssenarilərinin yazılmasında böyük çeviklik təmin edir.
MSBuild — Microsoft Visual Studio ilə yaradılmış layihələri yığmaq üçün istifadə olunur.
Make — Makefile istifadə edən klassik yığıcı alətdir, xüsusilə C və C++ layihələrində çox populyardır.
Webpack — JavaScript tətbiqlərinin yığılmasında tez-tez istifadə olunur, asılılıqlar və modulları idarə edir.
Gulp və Grunt — veb tətbiqləri hazırlama zamanı tez-tez edilən tapşırıqları avtomatlaşdırmağa kömək edən alətlərdir, məsələn, faylların minimallaşdırılması və SCSS-dən CSS-ə kompilyasiya olunması.
Yığıcılar yüksək səviyyəli də ola bilər. Bu barədə — aşağıda.
12.3 CI/CD
CI/CD (Continuous Integration/Continuous Delivery) — metodologiyadır, hansı ki, bütün inkişaf şaxələrindən əsas şaxəyə dəyişikliklərin fasiləsiz merge (birləşdirmə) edilməsini, eləcə də bu dəyişikliklərin avtomatik test və yerləşdirilməsini nəzərdə tutur. Bu, səhvləri tez bir zamanda aşkarlamağa və düzəltməyə imkan verir, inkişafın effektivliyini və sürətini artırır.
Ən çox yayılmış, hərçənd bir az köhnəlmiş CI/CD sistemlərindən biri Jenkins-dir. Kiçik bir şirkətdə işləyirsinizsə, onu istifadə etmə ehtimalı 80%-dir.
Jenkins — populyar avtomatlaşdırılmış sistemdir, fasiləsiz inteqrasiya və çatdırılma (CI/CD) üçün istifadə olunur. Jenkins software development-in müxtəlif mərhələlərini, o cümlədən build (yığma), test və deploy (yerləşdirmə) mərhələlərini avtomatlaşdırmağa imkan verir, bu da kod keyfiyyətini artırır və inkişaf prosesini sürətləndirir.
Böyük bir şirkətə düşsəniz, orada daha 5 seçim ola bilər:
TeamCity — JetBrains-dən olan güclü kommersiya sistemi, müxtəlif inkişaf və test mühitləri ilə dərin inteqrasiya təklif edir.
GitLab CI — GitLab-ın bir hissəsi olaraq gəlir, YAML faylları vasitəsilə tənzimləmə imkanı ilə fasiləsiz inteqrasiya və çatdırılma təmin edir.
CircleCI — bulud əsaslı CI/CD servisi, bir çox layihələr üçün test və deploy mərhələlərini avtomatlaşdıra bilir.
Travis CI — ilk bulud CI servislərindən biridir, bir çox açıq layihədə istifadə olunur və GitHub ilə yaxşı inteqrasiya olunur.
Bamboo — Atlassian məhsuludur, bu şirkətin digər alətləri, məsələn, Jira və Bitbucket ilə sıx şəkildə inteqrasiya olunur.
Onları bilmək və onlarla işləmək bacarığınızın olması lazım deyil: adətən şirkətdə bu build proseslərini tənzimləyən DevOps mütəxəssisi olur. Siz sadəcə bu vasitələrin olduğunu bilmək və əgər Jenkins, CI/CD və ya "continuous integration" söhbətlərdə qeyd olunursa, nədən danışıldığını başa düşmək kifayətdir.
12.4 Layihəni serverə çatdırırıq
Layihəni yazmaq yetərli deyil, o həm də sizin serverdə olmalıdır. Ümumiyyətlə layihənin serverə deploy edilməsi — bu layihənin serverdə yerləşdirilməsi və aktivləşdirilməsi prosesidir ki, istifadəçilər internet vasitəsilə ona daxil ola bilsinlər.
Bu, layihə fayllarını serverə köçürməyi, server mühitini, məlumat bazalarını, asılılıqları sazlamağı, həmçinin şəbəkə ayarlarını və təhlükəsizliyi konfiqurasiya etməyi özündə birləşdirir.
Sizcə, kodunuz serverə necə yerləşdiriləcək? Kiminsə onu ora yükləyəcəyini düşünürsünüz? Yoxsa, siz SSH vasitəsilə uzaq serverə qoşulub, bir neçə fayl yükləyib hər şeyi manuel şəkildə ayarlamaq fikrindəsiniz? Narahat olmayın: artıq belə işlər heç kim etmir. Artıq Docker var.
Docker — bu, konteynerizasiya vasitəsilə proqramlar hazırlamaq, çatdırmaq və işə salmaq üçün platformadır. Docker, proqramların konteynerlərdən istifadə edərək yaradılmasını, yerləşdirilməsini və icrasını asanlaşdırır, proqramı və onun bütün mühitini, asılılıqları bir yığcam obyekt olaraq paketlər və inkişaf, test və production mərhələlərində mühitin ardıcıllığını təmin edir.
Docker layihənizi və ya layihələrinizi Docker-konteynerə paketləməyə imkan verir. Bu, bir növ virtual maşın kimidir, amma çox yüngüldür.
Hərçənd ki, əgər hansısa Docker forumunda ona virtual maşın adlandırsanız, sizi tənqid edərlər, amma əgər virtual maşının nə olduğunu bilirsinizsə, Docker konteyneri haqqında virtual maşın kimi düşünə bilərsiniz. Amma çox yüngül virtual maşın.
Əslində, Docker konteyneri elə "virtual maşın"ın virtual versiyasıdır. Virtual maşınlar tam bir əməliyyat sisteminin nüsxəsini, OS nüvəsini və virtual aparat təminatını əhatə etsə də, Docker konteynerləri host nüvəsini paylaşır və daha yüngül və tezdir.
Həm də Docker ilə layihənin deploy edilməsi tətbiqlərin yerləşdirilməsi prosesini çox asanlaşdırır, sürət və etibarlılığı təmin edir. Layihə Docker-konteynerlərə paketlənir, hansı ki, onları asanlıqla hər hansı bir Docker-i dəstəkləyən sistemdə köçürmək və işə salmaq mümkündür.
Bu, server mühitlərində olan müxtəlifliklə bağlı olan problemlərdən azad edir və tətbiqin yükə uyğun olaraq konteynerləri əlavə və ya çıxararaq asanlıqla miqyasını artırmağa imkan verir. Hamı Docker-ə keçib — bu, çox rahat və çox sadədir.
GO TO FULL VERSION