Przejdź do treści
Jakub Zając

04 / Wybrane wdrożenia CI/CD, automatyzacji i infrastruktury

DevOps Engineering

Przekrój wdrożeń DevOps: od wydań robionych ręcznie „po godzinach” do powtarzalnych pipeline'ów, infrastruktury opisanej w kodzie i monitoringu, który zgłasza problemy przed użytkownikami.

Klient
Różne organizacje — od małych zespołów produktowych po projekty realizowane w środowiskach enterprise
Usługi
DevOps i chmuraAutomatyzacja i integracje

Przegląd

To nie jest opis jednego produktu, tylko przekrój podobnych problemów, które rozwiązuję u różnych klientów. W kolejnych firmach powtarza się ten sam obraz: wdrożenia robione ręcznie przez jedną osobę, serwer, którego nikt nie odważa się dotknąć, i środowiska, których nie da się odtworzyć. Zebrałem tu wybrane realizacje z tego obszaru.

Łączy je jedno podejście: droga od commita do produkcji zostaje zautomatyzowana, infrastruktura jest opisana w kodzie, a monitoring odpowiada na pytanie „co się dzieje”, zanim zada je klient. Zamiast bohaterskich akcji przy każdym wydaniu — nudny, powtarzalny proces, który po prostu działa.

Część tych praktyk wyniosłem z projektów realizowanych w środowiskach enterprise — m.in. związanych z międzynarodowymi organizacjami takimi jak PwC, Roche czy E.ON — i przenoszę je w skali dopasowanej do mniejszych zespołów, bez korporacyjnego narzutu.

Wyzwanie

Typowy punkt startowy wygląda podobnie: wydania rzadkie i stresujące, konfiguracja rozjechana między środowiskami, klasyczne „u mnie działa” i błędy wykrywane przez użytkowników zamiast przez system. Wiedza o tym, jak wdrożyć aplikację, mieszka w głowie jednej osoby — co jest ryzykiem dla firmy, a nie tylko niewygodą.

Prawdziwym wyzwaniem nie są narzędzia, tylko zmiana procesu bez zatrzymywania pracy. Automatyzację trzeba wprowadzać do żywego projektu — etapami, bez wielotygodniowego zamrożenia rozwoju — i tak, żeby po zakończeniu współpracy zespół umiał ten proces samodzielnie utrzymać.

Moja rola

W tych projektach jestem inżynierem, który projektuje i własnoręcznie wdraża rozwiązanie: pipeline'y, definicje infrastruktury, konfigurację środowisk i monitoring. Pracuję bezpośrednio z programistami i właścicielami systemów, bez warstwy pośredników.

Równie ważna jest część, którą zostawiam po sobie: dokumentacja, przejrzyste definicje w repozytorium i sesje przekazania wiedzy, po których proces należy do zespołu, a nie do mnie.

Rozwiązanie

01

Pipeline'y CI/CD w GitHub Actions

Każda zmiana w kodzie przechodzi automatycznie przez budowanie, testy i kontrole jakości, a wdrożenie na środowisko sprowadza się do zatwierdzenia. Definicje pipeline'ów żyją w repozytorium obok kodu, więc podlegają review i mają pełną historię zmian.

02

Konteneryzacja z Dockerem

Aplikacje pakuję w obrazy Dockera, dzięki czemu ten sam artefakt przechodzi od maszyny programisty, przez testy, aż na produkcję. Problem „u mnie działa” znika, bo wszędzie uruchamiany jest dokładnie ten sam obraz.

03

Infrastruktura jako kod z Terraform

Zasoby chmurowe w AWS opisuję w Terraformie: sieci, usługi, uprawnienia i konfiguracja powstają z kodu, a nie z klikania w konsoli. Nowe środowisko można postawić z tych samych modułów, a każda zmiana infrastruktury przechodzi przez review jak zwykły kod.

04

Środowiska, konfiguracja i sekrety

Porządkuję podział na środowiska deweloperskie, testowe i produkcyjne, z konfiguracją zależną od środowiska i sekretami trzymanymi w dedykowanych mechanizmach zamiast w plikach i wiadomościach. Dzięki temu wiadomo, co gdzie działa i z jakimi ustawieniami.

05

Monitoring i alerty

Systemy dostają metryki, zbieranie logów i alerty oparte m.in. o Amazon CloudWatch — skonfigurowane tak, żeby powiadomienie trafiało do właściwej osoby z informacją, co zrobić. Celem jest dowiadywać się o problemach od monitoringu, a nie od klientów.

06

Proces wydań i wycofywania zmian

Wydania stają się małe, częste i wersjonowane, z jasno opisaną procedurą powrotu do poprzedniej wersji. Kiedy wycofanie zmiany zajmuje minuty i nie wymaga nerwów, zespół przestaje bać się wdrażać — i paradoksalnie popełnia mniej błędów.

Stos technologiczny

CI/CD i automatyzacja

  • GitHub Actions
  • Docker
  • Bash

Chmura i infrastruktura jako kod

  • AWS
  • Terraform

Monitoring i obserwowalność

  • Amazon CloudWatch

Warsztat codzienny

  • Git
  • GitHub

Decyzje inżynierskie

  • 01

    Cała automatyzacja mieszka w repozytorium obok kodu — bez konfiguracji wyklikanej w panelach, której nikt później nie potrafi odtworzyć ani zaudytować.

  • 02

    Terraform od pierwszego dnia, nawet przy małej infrastrukturze. Opisanie trzech zasobów w kodzie kosztuje godziny; importowanie po roku ręcznych zmian — tygodnie.

  • 03

    Artefakt budowany jest raz i promowany przez kolejne środowiska — na produkcję trafia dokładnie to, co przeszło testy, a nie „to samo, zbudowane jeszcze raz”.

  • 04

    Wybieram sprawdzone, dobrze udokumentowane usługi zamiast modnych nowości. Ten proces ma utrzymywać zespół klienta po moim wyjściu, więc próg wejścia ma znaczenie.

  • 05

    Alerty projektuję pod działanie: każdy ma odbiorcę i opisany pierwszy krok reakcji. Alarm, który tylko szumi, uczy zespół ignorowania alarmów.

Bezpieczeństwo i niezawodność

  • Uprawnienia według zasady najmniejszego dostępu: pipeline'y i usługi dostają dokładnie te uprawnienia w AWS, których potrzebują — bez współdzielonych kluczy administratora.

  • Sekrety nigdy nie trafiają do repozytorium. Żyją w dedykowanych magazynach sekretów, z możliwością rotacji bez zmian w kodzie.

  • Środowiska są od siebie odizolowane — produkcja nie dzieli zasobów ani danych ze środowiskami testowymi „dla wygody”.

  • Zmiany w infrastrukturze przechodzą przez review kodu, co daje pełny ślad audytowy: kto, co i dlaczego zmienił.

Efekt

Wdrożenie przestaje być wydarzeniem. Wydania stają się rutyną: małe, odwracalne i możliwe do wykonania przez każdą uprawnioną osobę w zespole, nie tylko przez „tego jednego admina”.

Środowiska dają się odtworzyć z kodu — postawienie nowego środowiska albo odbudowa po awarii to procedura, a nie archeologia po ręcznie konfigurowanych serwerach.

Zespół klienta rozumie i samodzielnie utrzymuje cały proces, bo dostaje go z dokumentacją i przekazaniem wiedzy, a nie jako czarną skrzynkę.

Galeria

Inne realizacje

Porozmawiajmy o Twoim projekcie

Chętnie opowiem, jak podobne podejście sprawdziłoby się w Twoim przypadku — i czego bym uniknął.