Skip to content
GitLabGitHub

Architektura rozwiązania

GitLab CI

GitLab CI (Continuous Integration) to wbudowany w GitLab system automatyzacji procesów budowania, testowania i wdrażania kodu. Działa na podstawie pliku konfiguracyjnego .gitlab-ci.yml, który definiuje pipeline – zestaw zadań wykonywanych automatycznie po zmianach w repozytorium.

.
├── .gitlab-ci.yml 
├── configs                              # konfiguracja dla całego procesu
│   ├── stages.yml
│   ├── variables.yml
│   └── workflow.yml
├── ci_jobs                              # wspólne ci_joby
│   ├── analyze_conventional_commits
│   ├── code_review
│   ├── versioning
│   └── yamllint
├── ci_pipelines                         # pipeline dla procesów CI
│   ├── gitlab-ci
│   ├── image-builder
│   ├── opentofu
│   └── opentofu-module
└── scripts                              # skrypty wspomagające
    ├── helper_gitlab-ci.yml
    └── helper_readme.yml
---
stages:
    ### Standard w ramach dyscypliny
    - prepare           # przygotowanie środowiska, instalacja zależności, inicjalizacja.
    - dependency        # pobieranie zależności (biliotek, funkcji, komponentów)
    - validate          # weryfikacja poprawności konfiguracji, linting, planowanie zmian (Terraform, Ansible), pre-commit checks.
    - unit-test         # testy jednostkowe dla kodu (Go, .NET, Node.js itp.).
    - sast              # analiza statyczna kodu (Static Application Security Testing).
    - dast              # analiza dynamiczna aplikacji (Dynamic Application Security Testing).
    - build             # budowanie artefaktów (Packer, kontenery, kod źródłowy).
    - publish           # publikacja artefaktów, obrazów kontenerowych, paczek NuGet, npm itp.
    - release           # Wydawanie wersji
    - deploy            # wdrażanie aplikacji, infrastruktury, konfiguracji.
    - integration-test  # testy integracyjne, e2e, testy akceptacyjne.
    - cleanup           # usuwanie tymczasowych zasobów, sprzątanie środowiska.
---
workflow:
  rules:
    - if: '$CI_COMMIT_TAG'
      when: never
    - if: $CI_PIPELINE_SOURCE == "push" && $CI_OPEN_MERGE_REQUESTS
      when: never
    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /^(\[Draft\]|\(Draft\)|Draft:)/
      when: never
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_PIPELINE_SOURCE == "web"
    - if: $CI_PIPELINE_SOURCE == "push"
    - if: $CI_COMMIT_BRANCH