Github

DevOps dla początkujących: CI/CD z użyciem GitHub Actions i Dockera

Zdarzyło nam się nie raz napisać świetny kawałek kodu, który działał idealnie lokalnie, ale sprawiał niespodziewane problemy po przeniesieniu na serwer. Kiedy próbowaliśmy go wdrożyć ręcznie, każda zmiana stawała się potencjalnym źródłem błędów, nieporozumień, a czasem nawet przestojów w działaniu aplikacji. Z czasem zrozumieliśmy, że nie chodzi tylko o sam kod — chodzi o cały proces dostarczania oprogramowania. I tu właśnie pojawia się DevOps.

DevOps, w swojej esencji, to most między zespołem developerskim a operacyjnym. To podejście, które zakłada automatyzację, przejrzystość i ciągłość w dostarczaniu wartości użytkownikom. W tym artykule chcemy przybliżyć Wam, jak zacząć z CI/CD — czyli Continuous Integration i Continuous Deployment — korzystając z dwóch potężnych narzędzi: GitHub Actions i Dockera.

Czym właściwie jest CI/CD?

Zanim przejdziemy do narzędzi, zatrzymajmy się na chwilę przy samej idei. CI/CD to skrót, który coraz częściej pojawia się w ogłoszeniach o pracę, dokumentacji projektów open-source, a także w rozmowach między programistami. Ale co dokładnie oznacza?

Continuous Integration (ciągła integracja) polega na tym, że każdy fragment kodu, który dodajemy do głównej gałęzi projektu, jest natychmiast automatycznie testowany i weryfikowany. Dzięki temu wiemy, że projekt działa nie tylko lokalnie, ale również w środowisku testowym.

Continuous Deployment (ciągłe wdrażanie) to z kolei proces, w którym zaakceptowane zmiany są automatycznie wysyłane na produkcję. Bez potrzeby ręcznego kopiowania plików, bez logowania się na serwer, bez „magicznych” skryptów gdzieś na pulpicie jednego z członków zespołu.

GitHub Actions — automatyzacja z poziomu repozytorium

Kiedy pierwszy raz odkryliśmy GitHub Actions, poczuliśmy ulgę. Nie trzeba już było konfigurować zewnętrznych serwerów, instalować dodatkowego oprogramowania czy zakładać kont na kolejnych platformach. Wszystko, co potrzebowaliśmy, znajdowało się w jednym miejscu — bezpośrednio w repozytorium na GitHubie.

GitHub Actions to system automatyzacji, który pozwala nam reagować na różne zdarzenia — takie jak wypchnięcie kodu, utworzenie pull requesta czy publikacja wersji. Możemy dzięki temu stworzyć tzw. pipeline, czyli ścieżkę kroków, które będą wykonywane automatycznie za każdym razem, gdy coś się zmieni w naszym projekcie. Testy, budowanie obrazu Dockera, publikacja — wszystko może dziać się samo, według ustalonego scenariusza.

Docker — spójność środowiska to podstawa

Jeśli GitHub Actions to nasz „reżyser”, to Docker jest sceną, na której wszystko się rozgrywa. Dzięki Dockerowi możemy zdefiniować środowisko uruchomieniowe naszej aplikacji w jednym pliku. Bez względu na to, czy korzystamy z Windowsa, Maca czy Linuksa — kontener Dockera zachowa się identycznie. To koniec wymówek typu „u mnie działa”.

W połączeniu z CI/CD Docker zyskuje jeszcze większe znaczenie. Za każdym razem, gdy nasza aplikacja przejdzie pomyślnie testy, możemy zbudować nowy obraz Dockera i opublikować go np. w Docker Hubie lub od razu wdrożyć na serwer. Co więcej — nie musimy nawet otwierać terminala. Wszystko wykona się automatycznie, zgodnie z harmonogramem i regułami zdefiniowanymi w naszym pipeline.

Jak wygląda taki proces w praktyce?

Wyobraźmy sobie scenariusz: pracujemy nad aplikacją webową. Tworzymy nową funkcjonalność, testujemy ją lokalnie, a następnie wypychamy kod na GitHub. W tym momencie GitHub Actions uruchamia zdefiniowane wcześniej kroki:

  1. Sprawdzenie poprawności kodu.

  2. Uruchomienie testów jednostkowych.

  3. Budowanie obrazu Dockera.

  4. Publikacja obrazu w rejestrze kontenerów.

  5. Automatyczne wdrożenie nowej wersji na serwerze.

Co najważniejsze — ten proces dzieje się w tle, nie angażując nas bezpośrednio. Dzięki temu możemy skupić się na tym, co naprawdę ważne: pisaniu dobrego kodu i rozwijaniu produktu.

Dlaczego warto zacząć już dziś?

Wdrożenie CI/CD z użyciem GitHub Actions i Dockera nie tylko podnosi jakość naszego oprogramowania, ale również oszczędza czas, eliminuje błędy i daje większe poczucie kontroli nad tym, co dzieje się z naszym projektem. Nie musimy już martwić się, czy na produkcji znajduje się najnowsza wersja aplikacji, czy ktoś nie zapomniał odpalić testów albo zaktualizować zależności.

Oczywiście, początki mogą wydawać się skomplikowane. My też mieliśmy chwile zwątpienia, gdy konfiguracja nie działała tak, jak byśmy chcieli. Ale każdy kolejny krok przybliżał nas do pełnej automatyzacji i zrozumienia, jak potężne są narzędzia, które mamy dziś w zasięgu ręki — często całkowicie za darmo.

Podsumowanie

DevOps to nie tylko moda czy buzzword — to realna zmiana w sposobie, w jaki tworzymy i dostarczamy oprogramowanie. Dzięki GitHub Actions i Dockerowi możemy wprowadzić tę zmianę nawet w małym zespole, przy jednym projekcie. I choć z pozoru może wydawać się to skomplikowane, z czasem staje się naturalnym, nieodłącznym elementem codziennej pracy.

Jeśli dopiero zaczynacie swoją przygodę z DevOps — zachęcamy, by się nie bać. Warto spróbować, warto testować, warto się uczyć. Bo choć automatyzacja wymaga trochę wysiłku na początku, to w dłuższej perspektywie zwraca się z nawiązką.