3.1 Wprowadzamy zmiany w kodzie
Jak już wspomniałem wcześniej, rozwój oprogramowania sprowadza się do wprowadzania drobnych zmian w kodzie. Tysiące programistów zajmuje się tym procesem od dziesięcioleci, co doprowadziło do jego starannego dopracowania, standaryzacji i formalizacji na wszelkie możliwe sposoby.
Do przechowywania kodu jest specjalny program – Git. Git – to rozproszony system kontroli wersji. Nie tylko przechowuje kod, ale również śledzi wszystkie zmiany w nim i pomaga programistom pracować nad projektami razem, nie przeszkadzając sobie nawzajem.
Z Git developery mogą tworzyć różne wersje projektu (gałęzie), przechowywać pełną historię zmian, a nawet cofnąć się do dowolnego momentu w przeszłości. To jak maszyna czasu dla kodu! Git pomaga w łączeniu zmian i rozwiązywaniu konfliktów, dlatego stał się głównym narzędziem do pracy zespołowej w nowoczesnym programowaniu.
3.2 Montujemy projekt
Zanim projekt zostanie przetestowany lub załadowany na serwer, musi zostać zmontowany.
Montowanie projektów – to proces kompilacji kodu źródłowego projektu do programów wykonywalnych lub innych uruchamianych formatów, często z włączeniem testowania i wdrażania. To kluczowy aspekt rozwoju oprogramowania, zapewniający gotowość programu do użycia.
Montowanie – to nie tylko kompilacja, chociaż kompilacja często jest częścią procesu montażu. Po zakończeniu montażu możesz mieć dziesiątki lub nawet setki plików, które trzeba przesłać na różne serwery.
Kompilatory mogą być niskopoziomowe, takie jak:
Maven i Gradle – szeroko stosowane w projektach na Java do zarządzania zależnościami i montażem projektów.
Apache Ant – jeszcze jedno narzędzie do montażu projektów na Java, oferuje dużą elastyczność w pisaniu skryptów montażu.
MSBuild – używane do montażu projektów stworzonych przy użyciu Microsoft Visual Studio.
Make – klasyczne narzędzie montażowe, używa Makefile do definiowania reguł montażu, szczególnie popularne w projektach na C i C++.
Webpack – często stosowane do montażu aplikacji JavaScript, zarządzając zależnościami i modułami.
Gulp i Grunt – narzędzia, które pomagają zautomatyzować często wykonywane zadania w rozwijaniu aplikacji webowych, takie jak minifikacja plików i kompilacja SCSS do CSS.
Są też kompilatory wysokopoziomowe. O nich – poniżej.
3.3 CI/CD
CI/CD (Continuous Integration/Continuous Delivery) – metodologia, która zakłada ciągłą integrację zmian ze wszystkich gałęzi rozwoju do głównej gałęzi, a także automatyczne testowanie i wdrażanie tych zmian. To pozwala szybko wykrywać i naprawiać błędy, zwiększając efektywność i szybkość rozwoju.
Jednym z najczęściej spotykanych, choć nieco przestarzałych, systemów CI/CD jest Jenkins. Jeśli pracujesz w małej firmie, prawdopodobieństwo wynosi 80%, że będzie on używany.
Jenkins – popularny zautomatyzowany system, używany do ciągłej integracji i dostarczania (CI/CD). Jenkins pozwala automatyzować różne etapy rozwoju oprogramowania, w tym montaż, testowanie i wdrażanie, co poprawia jakość kodu i przyspiesza proces rozwoju.
Jeśli trafisz do dużej firmy, mogą tam być jeszcze inne opcje do wyboru:
TeamCity – potężny komercyjny system produkcji od JetBrains. Oferuje głęboką integrację z różnymi środowiskami rozwoju i testowania.
GitLab CI – wbudowana część GitLab, zapewnia ciągłą integrację i dostarczanie z możliwością konfiguracji za pomocą plików YAML.
CircleCI – serwis w chmurze CI/CD, wspiera automatyzację testowania i wdrażania dla wielu projektów.
Travis CI – jeden z pierwszych serwisów chmurowych CI, używany w wielu projektach open source. Dobrze integruje się z GitHub.
Bamboo – produkt Atlassian, blisko integruje się z innymi narzędziami tej firmy, takimi jak Jira i Bitbucket.
Nie musisz ich znać ani umieć z nimi pracować – zazwyczaj w firmach są specjaliści DevOps, którzy konfigurują te wszystkie procesy. Musisz tylko wiedzieć, że istnieją, i rozumieć, o co chodzi, jeśli w rozmowie wspominane są Jenkins, CI/CD lub „ciągła integracja”.
3.4 Dostarczamy projekt na serwer
Napisać projekt to mało – musi on jeszcze znaleźć się na twoim serwerze. W ogóle wdrożenie (deployment) projektu na serwer – to proces umieszczania i aktywowania aplikacji webowej na serwerze w taki sposób, że jest dostępna dla użytkowników przez internet.
Proces ten obejmuje przesyłanie plików projektu na serwer, konfigurację środowiska serwera, baz danych, zależności, a także konfigurację ustawień sieciowych i bezpieczeństwa.
A jak myślisz, twój kod trafi na serwer? Ktoś go tam wrzuci? Albo może podłączysz się przez SSH do zdalnego serwera, wrzucisz tam kilka plików i będziesz wszystko konfigurować? Spokojnie: tak się już nie robi. Teraz jest Docker.
Docker – to platforma do tworzenia, dostarczania i uruchamiania aplikacji za pomocą kontenerów. Docker ułatwia tworzenie, wdrażanie i wykonywanie aplikacji, pakując je razem z wszystkimi zależnościami i środowiskiem w jeden kompaktowy obiekt. To zapewnia spójność środowiska na wszystkich etapach: od rozwoju po testowanie i produkcję.
Docker pozwala zapakować twój projekt lub projekty w kontener Docker. To coś jakby wirtualna maszyna.
I chociaż na każdym forum o Dockerze zasypią cię kapciami, jeśli nazwiesz go "wirtualną maszyną", można myśleć o kontenerze Docker właśnie jak o wirtualnej maszynie. Tylko znacznie lżejszej.
W istocie, kontener Docker to wirtualna „wirtualna maszyna”. Wirtualne maszyny zawierają pełną kopię systemu operacyjnego, jądra OS, i wirtualny sprzęt, podczas gdy kontenery Docker współdzielą jądro hosta i mogą być lżejsze i szybsze.
Wdrożenie projektu za pomocą Docker znacznie upraszcza proces, zapewniając szybkość i niezawodność. Projekt jest pakowany do kontenerów Docker, które można łatwo przenosić i uruchamiać na każdym systemie wspierającym Docker.
To eliminuje problemy związane z różnicami w środowiskach serwerowych, i pozwala łatwo skalować aplikację, dodając lub usuwając kontenery w zależności od obciążenia. Wszyscy przeszli na Docker – to bardzo wygodne i bardzo proste.
GO TO FULL VERSION