CodeGym /Kursy /Frontend SELF PL /Wdrażanie kodu na serwer

Wdrażanie kodu na serwer

Frontend SELF PL
Poziom 48 , Lekcja 2
Dostępny

12.1 Wprowadzanie zmian w kodzie

Jak już wcześniej wspominałem, cała nowoczesna programistyka to wprowadzanie drobnych zmian w kodzie. Zajmują się tym od dekad miliony programistów, dlatego ten proces jest już dopracowany, znormalizowany i sformalizowany na wszystkie możliwe sposoby.

Po pierwsze, do przechowywania kodu jest specjalny program — Git. Git — to rozproszony system kontroli wersji, używany do śledzenia zmian w kodzie i koordynacji pracy programistów nad wspólnymi projektami.

Git umożliwia deweloperom tworzenie gałęzi w projekcie, zachowując przy tym pełną historię zmian i możliwość powrotu do dowolnego stanu pliku. To zapewnia efektywne scalanie zmian i rozwiązywanie konfliktów, czyniąc Git podstawowym narzędziem do wspólnej pracy nad kodem w nowoczesnym programowaniu.

Po drugie, proces wprowadzania zmian w kodzie także jest znormalizowany. Zwykle dla każdej nowej funkcji tworzysz w git nową gałąź, wprowadzasz do niej swoje zmiany w postaci serii commitów, a następnie wysyłasz Pull Request do twojego team leadera lub kolegi z zespołu, aby przeprowadził Code Review i zatwierdził twoje zmiany.

Jeśli wszystko poszło dobrze, to twoje zmiany są wchłaniane do gałęzi dev, uruchamia się automatyczna kompilacja projektu i testy. Wiele testów.

12.2 Kompilujemy projekt

Zanim projekt będzie testowany lub ładowany na serwer, musi zostać skompilowany.

Kompilacja projektów — to proces kompilacji kodu źródłowego projektu do programów wykonywalnych lub innych formatów uruchamianych, często z uwzględnieniem testowania i wdrażania. To kluczowy aspekt tworzenia oprogramowania, zapewniający gotowość programu do użycia.

Kompilacja — to nie kompilowanie, ale kompilowanie jest często częścią procesu kompilacji. Po zakończeniu kompilacji możesz mieć często dziesiątki a nawet setki plików, które trzeba przesłać na różne serwery.

Kompilatory mogą być niskopoziomowe:

Maven i Gradle — są szeroko stosowane w projektach Java do zarządzania zależnościami i kompilacją projektów.

Apache Ant — kolejny narzędzie do kompilacji projektów Java, oferuje dużą elastyczność w pisaniu skryptów kompilacji.

MSBuild — używane do kompilacji projektów tworzonych z wykorzystaniem Microsoft Visual Studio.

Make — klasyczne narzędzie kompilacji, używające Makefile do definiowania zasad kompilacji, szczególnie popularne w projektach C i C++.

Webpack — często stosowany do kompilacji aplikacji JavaScript, zarządzający zależnościami i modułami.

Gulp i Grunt — narzędzia, które pomagają zautomatyzować często wykonywane zadania w rozwoju aplikacji webowych, takie jak minifikacja plików i kompilacja SCSS do CSS.

Kompilatory mogą być też wysokopoziomowe. O nich — poniżej.

12.3 CI/CD

CI/CD (Continuous Integration/Continuous Delivery) — metodologia, która obejmuje ciągłe scalenie zmian ze wszystkich gałęzi rozwoju do głównej gałęzi i automatyczne testowanie oraz wdrażanie tych zmian. To pozwala szybko identyfikować i naprawiać błędy, zwiększając efektywność i szybkość rozwoju.

Jednym z najpopularniejszych, choć nieco przestarzałych systemów CI/CD jest Jenkins. Jeśli pracujesz w małej firmie, będą go używać z prawdopodobieństwem 80%.

Jenkins — popularny zautomatyzowany system używany do integracji i dostarczania ciągłego (CI/CD). Jenkins pozwala automatyzować różne etapy przygotowania oprogramowania, w tym kompilację, testowanie i wdrażanie, co poprawia jakość kodu i przyspiesza proces rozwoju.

Jeśli trafisz do dużej firmy, tam może być jeszcze 5 dodatkowych opcji do wyboru:

TeamCity — potężny komercyjny system 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 przez pliki YAML.

CircleCI — chmurowa usługa CI/CD, wspiera automatyzację testowania i wdrażania dla wielu projektów.

Travis CI — jeden z pierwszych chmurowych serwisów CI, używany w wielu otwartych projektach, dobrze integruje się z GitHub.

Bamboo — produkt od Atlassian, ściśle zintegrowany z innymi narzędziami tej firmy, takimi jak Jira i Bitbucket.

Nie musisz ich znać ani umieć z nimi pracować: zwykle w firmie jest specjalista DevOps, który konfiguruje wszystkie te procesy kompilacji. Wystarczy, że wiesz, że istnieją, i rozumiesz, o czym mowa, gdy w rozmowie pojawia się Jenkins, CI/CD lub „continuous integration”.

12.4 Dostarczamy projekt na serwer

Napisanie projektu to za mało, musi on jeszcze znaleźć się na twoim serwerze. W zasadzie wdrożenie (deploy) projektu na serwer — to proces umieszczania i aktywacji aplikacji webowej na serwerze w taki sposób, aby była dostępna dla użytkowników przez internet.

Obejmuje to przenoszenie plików projektu na serwer, konfigurację środowiska serwerowego, baz danych, zależności oraz konfigurację ustawień sieciowych i bezpieczeństwa.

A jak myślisz, jak twój kod trafi na serwer? Ktoś go tam wrzuci? Albo może podłączysz się przez SSH do zdalnego serwera, wrzucisz tam parę plików i wszystko skonfigurujesz? Spokojnie: tak już nikt nie robi. Teraz jest Docker.

Docker — to platforma do tworzenia, dostarczania i uruchamiania aplikacji za pomocą konteneryzacji. Docker upraszcza tworzenie, wdrażanie i działanie aplikacji przy użyciu kontenerów, które pozwalają na zapakowanie aplikacji wraz z całym środowiskiem i zależnościami w jeden kompaktowy obiekt, zapewniający spójność środowiska na wszystkich etapach rozwoju, testowania i produkcji.

Docker pozwala zapakować twój projekt lub projekty w kontener Docker. To coś w rodzaju maszyny wirtualnej, tylko bardzo lekkiej.

I choć na każdym forum o Docker, jeśli nazwiesz go maszyną wirtualną, zostaniesz zarzucony obuwiem, ale jeśli wiesz, czym jest maszyna wirtualna, to możesz myśleć o kontenerze Docker jako o maszynie wirtualnej. Tylko bardzo lekkiej.

W istocie, kontener Docker to wirtualna „maszyna wirtualna”. Maszyny wirtualne zawierają pełną kopię systemu operacyjnego, jądra OS i wirtualny sprzęt, podczas gdy kontenery Docker dzielą jądro hosta i mogą być lżejsze i szybsze.

Także wdrożenie projektu przy użyciu Docker znacznie upraszcza proces wdrażania aplikacji, zapewniając szybkość i niezawodność. Projekt jest pakowany w kontenery Docker, które można łatwo przenosić i uruchamiać na dowolnym systemie wspierającym Docker.

To eliminuje problemy związane z różnicami w środowiskach serwerowych, a także umożliwia łatwe skalowanie aplikacji poprzez dodawanie lub usuwanie kontenerów w zależności od obciążenia. Wszyscy przeszli na Docker — jest to bardzo wygodne i bardzo proste.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION