1. Wprowadzamy zmiany w kodzie
Jak już mówiłem wcześniej, tworzenie oprogramowania sprowadza się do wprowadzania niewielkich zmian w kodzie. Tym procesem zajmują się miliony programistów od dziesięcioleci, co doprowadziło do jego starannego dopracowania, standaryzacji i sformalizowania na wszelkie możliwe sposoby.
Do przechowywania kodu jest specjalny program – Git. Git to rozproszony system kontroli wersji. Nie tylko przechowuje kod, ale śledzi wszystkie zachodzące w nim zmiany i pomaga programistom pracować nad projektami wspólnie, nie przeszkadzając sobie nawzajem 🤝.
Z Git deweloperzy mogą tworzyć różne wersje projektu (gałęzie), przechowywać pełną historię zmian, a nawet wracać do dowolnego momentu w przeszłości. To jak maszyna czasu dla kodu! Git pomaga łączyć zmiany i rozwiązywać konflikty, dlatego stał się głównym narzędziem pracy zespołowej we współczesnym wytwarzaniu oprogramowania. 👩💻
2. Budujemy projekt
Zanim projekt będzie testowany lub trafi na serwer, trzeba go zbudować.
🏗️ Budowanie projektów – to proces kompilacji kodu źródłowego projektu do programów wykonywalnych lub innych formatów uruchamialnych, często z włączeniem testowania i wdrażania. To kluczowy aspekt tworzenia oprogramowania, zapewniający gotowość programu do użycia.
Budowanie to nie tylko kompilacja, choć kompilacja często jest częścią procesu budowania. Po zakończeniu budowania możesz mieć dziesiątki, a nawet setki plików, które trzeba wgrać na różne serwery.
Narzędzia do budowania mogą być niskopoziomowe, takie jak:
- ☕ Maven i Gradle – szeroko używane w projektach Java do zarządzania zależnościami i budowania projektów.
- 🐜 Apache Ant – kolejne narzędzie do budowania projektów w Javie, zapewnia dużą elastyczność w pisaniu skryptów budowania.
- 🖥️ MSBuild – używany do budowania projektów tworzonych w Microsoft Visual Studio.
- ⚙️ Make – klasyczne narzędzie do budowania, używające Makefile do definiowania reguł, szczególnie popularne w projektach C i C++.
- 🌐 Webpack – często stosowany do budowania aplikacji JavaScript, zarządzając zależnościami i modułami.
- 📜 Gulp i Grunt – narzędzia pomagające automatyzować często wykonywane zadania w tworzeniu aplikacji webowych, takie jak minifikacja plików i kompilacja SCSS do CSS.
Są także wysokopoziomowe narzędzia do budowania. O nich – poniżej.
3. CI/CD
🔄 CI/CD (Continuous Integration/Continuous Delivery) – metodologia, która zakłada ciągłe scalanie zmian ze wszystkich gałęzi rozwojowych do głównej gałęzi, a także automatyczne testowanie i wdrażanie tych zmian. Pozwala to szybko wykrywać i naprawiać błędy, zwiększając efektywność i tempo prac.
Jednym z najpowszechniejszych, choć nieco przestarzałych, systemów CI/CD jest Jenkins. Jeśli pracujesz w małej firmie, z prawdopodobieństwem 80 % będą używać właśnie jego.
🤖 Jenkins – popularny zautomatyzowany system używany do ciągłej integracji i dostarczania (CI/CD). Jenkins pozwala automatyzować różne etapy wytwarzania oprogramowania, w tym budowanie, testowanie i wdrażanie, co poprawia jakość kodu i przyspiesza proces developmentu.
Jeśli trafisz do dużej firmy, do wyboru może być jeszcze 5 opcji:
- 🚦 TeamCity – potężny komercyjny system od JetBrains. Oferuje głęboką integrację z różnymi środowiskami tworzenia i testowania.
- 📝 GitLab CI – wbudowana część GitLab, zapewnia ciągłą integrację i dostarczanie z możliwością konfiguracji poprzez 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 projektach open source. Dobrze integruje się z GitHub.
- 🎍 Bamboo – produkt Atlassian, ściśle integruje się z innymi narzędziami tej firmy, takimi jak Jira i Bitbucket.
Nie musisz ich znać ani umieć z nimi pracować – zwykle w firmie są specjaliści DevOps, którzy konfigurują te procesy. Wystarczy, że wiesz, że istnieją, i rozumiesz, o co chodzi, jeśli w rozmowie pojawia się Jenkins, CI/CD lub „continuous integration”.
4. Dostarczamy projekt na serwer
Samo napisanie projektu to za mało – musi on jeszcze trafić na Twój serwer. Ogólnie wdrożenie (deploy) projektu na serwer to proces umieszczenia i uruchomienia aplikacji webowej na serwerze w taki sposób, aby była dostępna dla użytkowników przez internet 🚚.
Proces ten obejmuje przeniesienie plików projektu na serwer, konfigurację środowiska serwerowego, baz danych, zależności, a także ustawienia sieciowe i bezpieczeństwo 😅.
A jak myślisz, jak Twój kod trafi na serwer? Czy ktoś go tam wgra? A może połączysz się przez SSH zdalnie, wrzucisz 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ą kontenerów. Docker upraszcza tworzenie, wdrażanie i uruchamianie aplikacji, pakując je razem ze wszystkimi zależnościami i środowiskiem w jeden zwarty obiekt. Zapewnia to spójność środowiska na wszystkich etapach: od developmentu przez testowanie po produkcję.
Docker pozwala spakować Twój projekt lub projekty do kontenera Docker. To coś w rodzaju maszyny wirtualnej.
I chociaż na każdym forum o Dockerze skrytykują Cię, jeśli nazwiesz go „maszyną wirtualną”, można myśleć o kontenerze Dockera właśnie jak o maszynie wirtualnej – tylko znacznie lżejszej.
W gruncie rzeczy kontener Docker to „maszyna wirtualna”. Maszyny wirtualne zawierają pełną kopię systemu operacyjnego, jądro OS i wirtualny sprzęt, podczas gdy kontenery Dockera współdzielą jądro hosta i mogą być lżejsze oraz szybsze ⚡.
Wdrożenie projektu przy użyciu Dockera mocno upraszcza proces, zapewniając szybkość i niezawodność. Projekt pakuje się do kontenerów Dockera, które można łatwo przenosić i uruchamiać na dowolnym systemie obsługującym Docker 🚢.
To eliminuje problemy związane z różnicami środowisk serwerowych i pozwala łatwo skalować aplikację, dodając lub usuwając kontenery w zależności od obciążenia. Wszyscy przeszli na Dockera – to bardzo wygodne i bardzo proste.
GO TO FULL VERSION