3.1 Koda dəyişikliklərin edilməsi
Yuxarıda dediyim kimi, proqram təminatının hazırlanması koda kiçik dəyişikliklərin edilməsinə gəlir. Bu proseslə on illərdir milyonlarla proqramçı məşğuldur, bu isə onun hərtərəfli test edilməsinə, standartlaşdırılmasına və mümkün olan bütün yollarla formallaşdırılmasına gətirib çıxarıb.
Kodun saxlanılması üçün xüsusi bir proqram var – Git. Git – versiyaların idarə olunması üçün paylanmış sistemdir. O sadəcə kodu saxlamır, həm də onun bütün dəyişikliklərini izləyir və proqramçılara layihələr üzərində birgə işləməyə, bir-birinə mane olmamağa imkan yaradır.
Git vasitəsilə developerlər layihənin müxtəlif versiyalarını (şaxələri) yarada bilər, tam dəyişiklik tarixçəsini saxlaya bilər və hətta keçmişdəki istənilən məqama qayıda bilərlər. Bu, kod üçün sanki zaman maşınıdır! Git dəyişiklikləri birləşdirməyə və konfliktləri həll etməyə kömək edir. Buna görə də, müasir developmentdə komanda işi üçün əsas alətə çevrilib.
3.2 Layihəni yığırıq
Layihəni test etməzdən əvvəl və ya serverə yükləməzdən əvvəl onu yığmaq lazımdır.
Layihələrin yığılması – layihənin orijinal kodunu icra edilə bilən proqramlara və ya digər icra formalarına çevirmə prosesidir, çox vaxt test etmə və deploy ilə birgə olur. Bu proses proqram təminatının hazırlanmasında əsas mərhələlərdən biri olub, proqramın istifadəyə hazır olmasını təmin edir.
Yığılma – sadəcə kompilyasiya deyil, baxmayaraq ki, kompilyasiya tez-tez yığılma prosesinin bir hissəsi olur. Yığılma prosesindən sonra onlarla və ya hətta yüzlərlə faylınız ola bilər ki, onları müxtəlif serverlərə yükləmək lazımdır.
Yığma alətləri aşağı səviyyəli ola bilər, məsələn:
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ərini yazmaqda çox böyük elastiklik təmin edir.
MSBuild – Microsoft Visual Studio ilə yaradılmış layihələri yığmaq üçün istifadə olunur.
Make – klassik yığma alətidir, C və C++ layihələrində çox məşhurdur və Makefile vasitəsilə yığma qaydalarını müəyyən edir.
Webpack – JavaScript tətbiqlərini yığmaq üçün tez-tez istifadə olunur, asılılıqları və modulları idarə edir.
Gulp və Grunt – web tətbiqlərin inkişafında tez-tez yerinə yetirilən tapşırıqları avtomatlaşdırmağa kömək edən alətlərdir, məsələn, faylların minimizasiyası və SCSS-dən CSS-ə çevrilməsi.
Yüksək səviyyəli yığma alətləri də mövcuddur. Onlar haqqında – aşağıda.
3.3 CI/CD
CI/CD (Continuous Integration/Continuous Delivery) – bu, kod dəyişikliklərini bütün inkişaf branch-lərindən əsas branch-ə fasiləsiz birləşdirmək, həmçinin bu dəyişiklikləri avtomatik test etmək və yerləşdirmək metodologiyasıdır. Bu yanaşma, səhvləri daha tez aşkarlamaq və düzəltmək, inkişafın effektivliyini və sürətini artırmaq üçün imkan verir.
Ən geniş yayılmış, amma bir az köhnəlmiş, CI/CD sistemi Jenkins-dir. Əgər siz daha kiçik bir şirkətdə işləyirsinizsə, böyük ehtimalla (80% ehtimal) məhz bu sistemi istifadə edəcəklər.
Jenkins – populyar avtomatlaşdırılmış sistemdir, fasiləsiz inteqrasiya və çatdırılma üçün (CI/CD) istifadə olunur. Jenkins proqram təminatının inkişafının müxtəlif mərhələlərini, o cümlədən build, test və deployment-i avtomatlaşdırmağa imkan verir ki, bu da kodun keyfiyyətini artırır və inkişaf prosesini sürətləndirir.
Əgər siz böyük bir şirkətə düşsəniz, orada seçim üçün daha 5 variant ola bilər:
TeamCity – JetBrains-in istehsalı olan güclü və kommersiya sistemidir. Müxtəlif inkişaf və test mühitləri ilə dərin inteqrasiyanı təmin edir.
GitLab CI – GitLab-ın tərkib hissəsidir, YAML-fayllar vasitəsilə sazlama imkanları ilə fasiləsiz inteqrasiya və çatdırılma təmin edir.
CircleCI – CI/CD üçün bulud xidməti, bir çox layihələr üçün test və yerləşdirməni avtomatlaşdırmağı dəstəkləyir.
Travis CI – ilk bulud CI xidmətlərindən biridir, bir çox açıq mənbə layihələrində istifadə olunur və GitHub ilə yaxşı inteqrasiya olunur.
Bamboo – Atlassian-ın məhsuludur, Jira və Bitbucket kimi bu şirkətin digər alətləri ilə sıx inteqrasiya olunur.
Onları bilmək və ya onlarla işləməyi bacarmaq sizin üçün vacib deyil – adətən şirkətdə bu prosesləri quran DevOps mütəxəssisləri olur. Siz sadəcə onların mövcud olduğunu bilməlisiniz və söhbətdə Jenkins, CI/CD ya da "continuous integration" deyildiyi zaman nə haqda danışıldığını anlamalısınız.
3.4 Layihəni serverə çatdırırıq
Sadəcə layihə yazmaq kifayət etmir – o, həm də sizin serverinizdə olmalıdır. Ümumiyyətlə, layihənin serverə deploy edilməsi – bu veb tətbiqin serverdə yerləşdirilməsi və istifadəyə verilməsi prosesidir ki, istifadəçilər internet vasitəsilə ona daxil ola bilsinlər.
Bu proses layihə fayllarını serverə köçürməni, server mühitinin, verilənlər bazalarının, asılılıqların qurulmasını, həmçinin şəbəkə parametrlərinin və təhlükəsizliyin tənzimlənməsini əhatə edir.
Fikirləşirsiniz ki, kodunuz serverə necə gedib çatacaq? Kimsə onu ora göndərəcək? Yoxsa siz SSH vasitəsilə uzaq serverə qoşulub, ora bir neçə fayl yükləyib, hər şeyi tənzimləyəcəksiniz? Narahat olmayın: artıq heç kim bunu belə etmir. İndi Docker var.
Docker – proqramların konteynerlər vasitəsilə hazırlanması, çatdırılması və işə salınması üçün platformadır. Docker, tətbiqləri bütün asılılıqları və mühiti ilə birlikdə bir yığcam obyekt kimi qablaşdıraraq onların yaradılmasını, deploy edilməsini və icrasını asanlaşdırır. Bu, bütün mərhələlərdə – hazırlanması, test edilməsi və production mühitində mühitin konsistensiyasını təmin edir.
Docker sizin layihənizi və ya layihələrinizi Docker konteynerinə qablaşdırmağa imkan verir. Bu, bir növ virtual maşına bənzəyir.
Yeri gəlmişkən, Docker-i "virtual maşın" adlandırsanız, hər hansı Docker forumunda sizə qəzəblənəcəklər, amma Docker konteynerlərini virtual maşın kimi düşünmək olar. Sadəcə çox daha yüngül.
Əslində, Docker konteyner virtual "virtual maşın"dır. Virtual maşınlar tam əməliyyat sisteminin bir nüsxəsini, OS nüvəsini və virtual aparat təminatını ehtiva edərkən, Docker konteynerlər host nüvəsini paylaşır və daha yüngül və sürətli ola bilər.
Docker vasitəsilə layihənin deploy edilməsi prosesi çox sadələşdirir, sürət və etibarlılıq təmin edir. Layihə Docker konteynerlərə qablaşdırılır və asanlıqla hər hansı Docker dəstəkləyən sistemdə hərəkət etdirilib işə salına bilər.
Bu, server mühitlərindəki fərqlərlə bağlı problemləri aradan qaldırır və tətbiqi asanlıqla miqyaslandırmağa, yükə uyğun konteynerlər əlavə etməyə və ya çıxarmağa imkan verir. Hamı Docker-ə keçib – bu çox rahat və çox sadədir.
GO TO FULL VERSION