GitLab to platforma DevSecOps, która w jednym miejscu daje repozytoria Git, przeglądanie zmian w merge requestach i wbudowane CI/CD. Jest lepszym wyborem od GitHuba, gdy potrzebujesz darmowej wersji na własny serwer, chcesz mieć CI/CD i skanowanie bezpieczeństwa w jednym narzędziu albo firma tego wymaga. GitHub wygrywa, gdy zależy Ci na publicznym profilu, społeczności open source i większym darmowym limicie minut CI/CD.
GitHub zna większość początkujących programistów, ale w ogłoszeniach i firmach często pojawia się też GitLab. Ten artykuł wyjaśnia, czym jest GitLab, czym różni się od GitHuba i kiedy warto go wybrać. Nie rankuję serwisów: opisuję kryteria wyboru na podstawie oficjalnych stron i dokumentacji z 10 listopada 2026. Nie zakładałem konta GitLab ani nie uruchamiałem na nim pipeline'u, więc opisy funkcji pochodzą z dokumentacji, a przykładowy plik sprawdziłem tylko pod kątem składni YAML. Jeśli dopiero uczysz się Gita i GitHuba, zacznij od artykułów co to jest GitHub i Git i GitHub: własne repozytorium, clone, fork i pull request.
Czym jest GitLab?
GitLab opisuje siebie jako platformę DevSecOps, na której planujesz, budujesz, zabezpieczasz i uruchamiasz oprogramowanie w jednym miejscu. Na swojej stronie podkreśla, że CI/CD jest wbudowane bezpośrednio w platformę, a nie dołożone jako osobne narzędzie. Obok CI/CD strona wymienia zintegrowane z przepływem pracy narzędzia bezpieczeństwa: skanowanie kodu (SAST i DAST), skanowanie zależności, wykrywanie sekretów, skanowanie kontenerów i fuzz testing, a także planowanie w stylu Agile.
Pod spodem GitLab, tak jak GitHub, opiera się na Gicie, czyli systemie kontroli wersji. Różnica polega na tym, że GitLab stara się dać całe środowisko pracy (kod, przegląd, CI/CD, bezpieczeństwo) w jednym produkcie. O tym, jak ogólnie działa praca w zespole z gałęziami i pull requestami, piszemy w artykule o pracy zespołowej w Gicie.
Czym różni się GitLab od GitHuba w nazewnictwie?
Wiele pojęć jest takich samych, ale nazywa się je inaczej:
| Pojęcie | GitHub | GitLab |
|---|---|---|
| Przegląd i scalanie zmian | pull request | merge request |
| Plik konfiguracji CI/CD | plik YAML w .github/workflows | .gitlab-ci.yml |
| Elementy pipeline'u | workflow, job, step | pipeline, stage (etap), job |
| Maszyna wykonująca zadania | runner | runner |
Według dokumentacji GitLab merge request to „centralne miejsce, w którym zespół przegląda kod, dyskutuje i śledzi zmiany”. Zawiera opis, zmiany w kodzie, informacje o pipeline CI/CD, komentarze i listę commitów. Recenzent może poprosić o zmiany albo, jeśli ma uprawnienia, zatwierdzić zmianę, a nierozwiązane wątki dyskusji blokują scalenie. Dokumentacja GitLab nie opisuje pull requestów, więc porównanie pojęć jest moim uproszczeniem: to ta sama idea (przegląd zmian przed scaleniem) pod inną nazwą.
Jak działa CI/CD w GitLabie?
W GitLabie pipeline składa się z etapów (stages) i zadań (jobs), a konfigurację zapisujesz w pliku .gitlab-ci.yml. Według dokumentacji w tym pliku definiujesz zadania CI/CD, które tworzą pipeline. Etapy określają kolejność wykonania, np. test, potem deploy, a zadania uruchamiają skrypty na runnerach. Poniżej przykład z testami i ręcznie zatwierdzanym wdrożeniem, zbudowany z elementów opisanych w dokumentacji:
stages:
- test
- deploy
test:
stage: test
image: python:3.13
script:
- python -m pip install -r requirements.txt
- python -m pytest
deploy_prod:
stage: deploy
script:
- ./scripts/deploy.sh
environment:
name: production
when: manual
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Co robi ten plik:
stagesokreśla kolejność: najpierwtest, potemdeploy.imagewskazuje obraz Dockera, w którym wykona się zadanie, ascriptto polecenia wykonywane przez runnera.environmentto nazwa środowiska, do którego zadanie wdraża.when: manualoznacza, że zadanie wymaga ręcznego uruchomienia. Według dokumentacji takie zadania domyślnie są na starcie pipeline'u pokazywane jako pominięte.rulesz warunkiem na gałąź domyślną ogranicza wdrożenie do gałęzi głównej.
Składnię YAML tego pliku sprawdziłem parserem: struktura jest poprawna, a celowo zepsuty plik ze złym wcięciem dał błąd „bad indentation of a mapping entry”. Nie uruchamiałem go jednak w GitLabie, więc nie sprawdzałem semantyki (to robi linter GitLaba po zalogowaniu). Pojęcia CI/CD, takie jak pipeline, delivery i deployment, wyjaśniamy w artykule o CI/CD w praktyce, a serwer do samodzielnego utrzymania opisuje tekst o Jenkinsie.
GitLab.com czy własny serwer? Jakie są wersje GitLaba?
Według strony GitLab są trzy sposoby użycia:
| Wersja | Co to jest |
|---|---|
| GitLab.com | wielodzierżawna usługa chmurowa (SaaS), jak GitHub.com |
| Self-managed | wdrożenie we własnej infrastrukturze organizacji (strona używa określenia „on-premises”) |
| Dedicated | w pełni zarządzana usługa SaaS dla jednego najemcy |
Różnica względem GitHuba: według cennika GitHub wdrożenie na własnym serwerze („Enterprise Server”) jest w planie Enterprise, a w planach Free i Team oznaczone jako niedostępne. W GitLabie wersja Self-Managed ma w planie Free cenę 0 i wymaga własnego magazynu i runnerów. Cennik GitLaba nazywa ten model „bring your own storage and runners”. Jeśli myślisz o własnym serwerze, zobacz artykuł o serwerze VPS, a o zabezpieczeniu dostępu piszemy w tekstach o SSH i kopiach zapasowych. Własna instalacja oznacza, że za aktualizacje, bezpieczeństwo i kopie odpowiadasz sam.
Ile kosztuje GitLab i co daje plan Free?
GitLab ma plany Free, Premium i Ultimate. Według cennika plan Free na GitLab.com daje:
| Zasób | Limit w planie Free (GitLab.com) |
|---|---|
| Użytkownicy | 5 na grupę najwyższego poziomu |
| Minuty obliczeniowe CI/CD | 400 miesięcznie |
| Magazyn | 10 GiB |
| Funkcje | zarządzanie kodem, CI/CD i SAST |
Limit pięciu użytkowników dotyczy, według FAQ, grup najwyższego poziomu o prywatnej widoczności. Ceny Premium są podane na stronie, a Ultimate ma wycenę indywidualną, więc nie podaję kwot. Plan GitHub Free daje według cennika nieograniczone repozytoria publiczne i prywatne, 2000 minut CI/CD miesięcznie i 500 MB na pakiety. Minuty obliczeniowe GitLaba i minuty CI/CD GitHuba nie są wprost porównywalne (mogą różnić się sposobem liczenia), więc traktuj liczby jako orientacyjne i sprawdź aktualny cennik przed decyzją.
Czym jeszcze różni się GitLab od GitHuba?
| Obszar | GitHub | GitLab |
|---|---|---|
| Wersja na własny serwer | plan Enterprise (Enterprise Server) | dostępna także w planie Free (Self-Managed) |
| CI/CD | GitHub Actions, usługa z runnerami hostowanymi lub własnymi | wbudowane w platformę, konfigurowane w .gitlab-ci.yml |
| Bezpieczeństwo w platformie | zależnie od planu (nie sprawdzałem) | SAST w planie Free, inne skanery wymienione na stronie (zakres zależy od planu, którego nie sprawdzałem) |
| Darmowe minuty CI/CD | 2000 miesięcznie (Free) | 400 miesięcznie (Free, GitLab.com) |
| Użytkownicy w planie Free | bez limitu podanego na stronie | 5 na grupę najwyższego poziomu (prywatna widoczność) |
| Publiczny profil i społeczność open source | bardzo znany (wiedza ogólna, nie ze źródła) | mniej popularny w portfolio początkujących (wiedza ogólna, nie ze źródła) |
Kiedy GitLab jest lepszy od GitHuba?
To zależy od sytuacji. Poniższa tabela to moje uproszczenie na podstawie powyższych danych, a nie ranking:
| Sytuacja | Naturalny wybór | Dlaczego |
|---|---|---|
| Chcesz własny serwer i nie chcesz płacić za plan Enterprise | GitLab (Self-Managed Free) | według cenników GitHub oferuje self-hosted tylko w Enterprise |
| Firma wymaga wdrożenia na własnej infrastrukturze lub dedykowanej instancji | GitLab | wersje Self-Managed i Dedicated |
| Chcesz repozytorium, CI/CD i skanowanie bezpieczeństwa w jednej aplikacji | GitLab | wbudowane CI/CD i narzędzia bezpieczeństwa (zakres zależy od planu) |
| Budujesz portfolio i chcesz być widoczny dla rekruterów | GitHub | najczęściej tam rekruterzy szukają kodu (wiedza ogólna) |
| Zespół jest duży, a plan Free ma limit 5 użytkowników na grupę | GitHub lub płatny plan GitLaba | limit użytkowników w GitLab Free |
| Potrzebujesz więcej darmowych minut CI/CD w prywatnych projektach | GitHub | 2000 minut wobec 400 (z zastrzeżeniem różnic liczenia) |
| Wszystko już działa i nie masz powodu do zmiany | zostań tam, gdzie jesteś | koszt zmiany bywa większy niż zysk |
Uwaga mentora: wybieraj platformę po zespole i wymaganiach, nie po modzie. Zacznij tam, gdzie jest Twój kod i Twoi ludzie: projekt można przenieść później importem, a pipeline i tak zapisujesz w pliku.
Jak przenieść projekt z GitHuba do GitLaba?
Dokumentacja GitLab opisuje import projektów z GitHub.com lub GitHub Enterprise. Zaimportowane są m.in. dane repozytorium Git, issues, pull requesty i komentarze do nich, etykiety, kamienie milowe, strony wiki, reguły ochrony gałęzi (z wyjątkami), współpracownicy i obiekty Git LFS. Co nie jest importowane lub ma ograniczenia:
- grupy i organizacje z GitHuba nie są przenoszone,
- załączniki w Markdownie domyślnie nie są importowane,
- reguła „Require status checks to pass before merging” nie jest importowana,
- recenzje i zatwierdzenia z pull requestów nie są importowane, gdy nie da się zmapować użytkownika,
- outside collaborators nigdy nie są importowani,
- mirroring nie synchronizuje nowych ani zmienionych pull requestów.
Do importu potrzebujesz klasycznego osobistego tokenu z zakresem repo i roli Maintainer lub Owner w docelowej grupie GitLab. Pipeline z GitHub Actions trzeba przepisać na .gitlab-ci.yml ręcznie, bo dokumentacja importu o tym nie wspomina. Przed migracją większego projektu zrób próbę na małym repozytorium i zachowaj kopię.
Jakie błędy zdarzają się przy wyborze i używaniu GitLaba?
| Problem | Co zwykle znaczy | Co zrobić |
|---|---|---|
| Pipeline się nie uruchamia | zły plik lub składnia YAML | sprawdź nazwę .gitlab-ci.yml i składnię (np. wcięcia) |
| Zadanie wdrożenia czeka i „nic się nie dzieje” | when: manual wymaga ręcznego uruchomienia | uruchom zadanie ręcznie w pipeline |
| Wdrożenie rusza z każdej gałęzi | brak rules ograniczających gałąź | dodaj warunek na gałąź domyślną |
| Skończyły się minuty CI/CD | limit planu Free (400 minut na GitLab.com) | sprawdź zużycie, użyj własnych runnerów lub płatnego planu |
| Zespół przekroczył limit użytkowników | limit 5 w planie Free na grupę | rozważ płatny plan lub podział grup |
| Po imporcie brakuje recenzji i załączników | nie są importowane lub tylko częściowo | sprawdź listę ograniczeń importu przed migracją |
| Własny serwer GitLab jest nieaktualny | brak aktualizacji | aktualizuj i rób kopie zapasowe |
Jak sprawdzić GitLaba w praktyce? Ćwiczenie na 30 minut
To moja propozycja ćwiczenia, a nie oficjalny kurs. Zrób je na małym, nieważnym repozytorium:
- Załóż konto na GitLab.com i utwórz grupę, do której zaimportujesz projekt.
- Zaimportuj małe repozytorium z GitHuba (potrzebujesz klasycznego tokenu z zakresem
repo, jak w sekcji o imporcie) i sprawdź, co się przeniosło, a czego brakuje. - Dodaj plik
.gitlab-ci.ymlz jednym zadaniem uruchamiającym test, a potem wypchnij zmianę i obejrzyj pipeline. - Zepsuj test celowo, zobacz nieudany wynik i napraw go.
- Dodaj zadanie
deploy_prodzwhen: manuali uruchom je ręcznie. Zobacz, jak wygląda pominięte zadanie na starcie pipeline'u. - Otwórz merge request z nową gałęzią i przejdź przegląd: komentarz, rozwiązanie wątku i zatwierdzenie.
- Porównaj z GitHubem: co zajęło Ci więcej czasu i co było łatwiejsze.
Od czego zacząć z GitLabem?
- Zdecyduj, gdzie trzymasz projekt. Jeśli uczysz się i budujesz portfolio, zostań przy GitHubie, a GitLaba poznaj na osobnym małym projekcie.
- Załóż konto na GitLab.com i zaimportuj małe repozytorium z GitHuba.
- Dodaj
.gitlab-ci.ymlz jednym zadaniem uruchamiającym testy, a dopiero potem ręczne wdrożenie. - Poznaj merge requesty i spróbuj zatwierdzić zmianę.
- Jeśli potrzebujesz własnego serwera, najpierw przemyśl utrzymanie: aktualizacje, bezpieczeństwo i kopie.
Wdrożenie aplikacji w chmurze i na serwerze ćwiczysz w module wdrożenie produkcyjne w chmurze w kursie AI Engineer.
Podsumowanie
- GitLab to platforma DevSecOps z wbudowanym CI/CD, w której zmiany przeglądasz w merge requestach, a pipeline opisujesz w pliku
.gitlab-ci.yml. - Wersje: GitLab.com (SaaS), Self-Managed na własnym serwerze (Free ma cenę 0) i Dedicated. W GitHubie wersja na własny serwer jest w planie Enterprise.
- Plan Free GitLab.com: 5 użytkowników na grupę, 400 minut obliczeniowych i 10 GiB, a GitHub Free daje 2000 minut CI/CD i nieograniczone repozytoria.
- Wybór to kryteria, nie ranking: GitLab przy własnym serwerze i potrzebie wszystkiego w jednym, GitHub przy portfolio i większym darmowym limicie minut.
- Import z GitHuba obejmuje repozytorium, issues i pull requesty, ale nie przenosi m.in. grup, części zatwierdzeń i pipeline'ów.
- GitLaba nie uruchamiałem, a plik
.gitlab-ci.ymlsprawdziłem tylko pod kątem składni YAML.


