GitLab: CI/CD

Jak korzystać z GitLab CI/CD

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie GitLab cloud, stworzone z myślą o zespołach potrzebujących szybkiego, bezpiecznego i skalowalnego środowiska:

  • Nieograniczona liczba użytkowników, repozytoriów, transferów danych oraz czasu przetwarzania CI/CD – pełna elastyczność.
  • Bezproblemowe aktualizacje jednym kliknięciem – Twoje środowisko zawsze aktualne, bez przestojów.
  • Własna nazwa domeny zabezpieczona HTTPS (np. https://git.twoja-firma.com) – profesjonalny wizerunek i bezpieczeństwo.
  • Stała wydajność i wysoki poziom bezpieczeństwa na Twojej prywatnej, dedykowanej infrastrukturze. Brak "głośnych sąsiadów" i pełna izolacja.
  • Wybór lokalizacji hostingu: 🇪🇺 Europa lub 🇺🇸 USA – zgodnie z wymaganiami dotyczącymi zgodności lub opóźnień.

Zacznij szybko i skup się na swoim kodzie. Rozwiązanie GitLab cloud hosting od Stackhero jest gotowe do użycia w około 5 minut.

GitLab CI/CD to zaawansowana i zintegrowana funkcjonalność platformy GitLab, popularnego, otwartego oprogramowania do kontroli wersji i współpracy zespołowej. Narzędzie to umożliwia automatyzację i usprawnienie kluczowych etapów budowania, testowania oraz wdrażania oprogramowania, zapewniając szybszą i bardziej niezawodną dostawę wysokiej jakości aplikacji.

Na przykład, dzięki GitLab CI/CD można skonfigurować automatyczne testy jednostkowe, które uruchamiają się przy każdym nowym commicie wypchniętym do repozytorium GitLab. Po pomyślnym przejściu tych testów kod może zostać zbudowany i wdrożony na środowisko stagingowe w celu dalszej weryfikacji. Po zaliczeniu wszystkich testów na środowisku staging, system może promować kod na środowisko produkcyjne, udostępniając go użytkownikom końcowym.

Jedną z kluczowych zalet GitLab CI/CD jest jego ścisła integracja z samym GitLabem. Pozwala to definiować i zarządzać pipeline'ami CI/CD bezpośrednio w repozytoriach projektowych, co upraszcza orkiestrację i monitorowanie całego procesu pracy.

GitLab CI/CD obsługuje szeroką gamę języków programowania, frameworków i narzędzi, dzięki czemu jest na tyle uniwersalny, by sprostać wymaganiom różnych projektów. System konfigurowalnych pipeline'ów pozwala dostosować każdy etap procesu CI/CD do własnych potrzeb — niezależnie czy chodzi o budowanie, testowanie, czy wdrażanie na wiele środowisk.

Podsumowując, GitLab CI/CD to kompleksowe rozwiązanie zaprojektowane do automatyzacji i usprawniania procesów dostarczania oprogramowania. Pozwala deweloperom skupić się na pisaniu i ulepszaniu kodu, podczas gdy platforma efektywnie zarządza zadaniami operacyjnymi.

Jeśli repozytorium projektu zawiera pliki Dockerfile, można zautomatyzować proces budowania, uruchamiania oraz – w razie potrzeby – publikowania obrazów Docker do rejestru.

Na początek należy włączyć obsługę "Docker in Docker" (DinD) w panelu Stackhero.

Włączenie obsługi DinD wiąże się z ryzykiem bezpieczeństwa, zwłaszcza jeśli zależy Państwu na izolacji użytkowników i uniemożliwieniu im dostępu do projektów innych osób.

Następnie należy zaktualizować plik gitlab-ci.yml, aby dodać konfigurację pipeline'u budującego Dockerfile z wykorzystaniem DinD. Przykładowa konfiguracja poniżej:

image: docker:29

build:
  stage: build
  services:
    - name: docker:29-dind
      alias: docker
  variables:
    # Ustawia CLI dockera na usługę Docker-in-Docker przez jej zwykły
    # (nie-TLS) port. Zobacz poniższą uwagę, dlaczego DOCKER_HOST jest istotny.
    DOCKER_HOST: "tcp://docker:2375"
    DOCKER_TLS_CERTDIR: ""
  before_script:
    - docker info
  script:
    # Zamień "my-docker-image" na nazwę wybranego obrazu:
    - docker build -t my-docker-image .
    # Opcjonalnie, przetestuj obraz Docker:
    # - docker run my-docker-image /script/to/run/tests

Usługa docker:29-dind uruchamia demona Docker obok zadania, a DOCKER_HOST wskazuje CLI dockera, aby z niego korzystał. Zawsze ustawiaj DOCKER_HOST, gdy deklarujesz usługę docker:dind: jeśli tego nie zrobisz, CLI po cichu połączy się z innym demonem, a build może się powieść nawet przy błędnej konfiguracji usługi, co ukrywa rzeczywiste problemy. DOCKER_TLS_CERTDIR: "" pozwala korzystać ze zwykłego portu 2375 (bez TLS) w wewnętrznej sieci zadania.

Jako prostszą alternatywę można całkowicie pominąć blok services i obie zmienne: runner Stackhero udostępnia już gotowego demona Docker przez zamontowany socket, więc zwykłe docker build działa od razu.

Dodatkowe informacje na temat budowania obrazów Docker z GitLab CI można znaleźć w oficjalnej dokumentacji GitLab.

Jeśli Państwa zestaw testów korzysta z Testcontainers, biblioteki uruchamiającej rzeczywiste usługi (bazy danych, message brokers i inne) jako tymczasowe kontenery Docker podczas testów, powyższa konfiguracja jest już odpowiednia. Należy pozostawić usługę docker:29-dind oraz obie zmienne: Testcontainers używa DOCKER_HOST do połączenia z demonem Docker i kontenerami, które uruchamia, więc nie są wymagane żadne dodatkowe ustawienia.

Brak ustawienia DOCKER_HOST to najczęstsza przyczyna niepowodzeń Testcontainers w CI. Biblioteka wtedy korzysta z socketa Docker zamontowanego przez runnera i nie może połączyć się z własnymi kontenerami testowymi, co zwykle objawia się timeoutem kontenera pomocniczego Ryuk.