This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
Gitlab Platform

Wstęp do Gitlab Platform
GitLab to kompleksowa platforma DevOps służąca do zarządzania cyklem życia oprogramowania – od planowania, przez wersjonowanie kodu, aż po testowanie, wdrażanie i monitorowanie. Oferuje zintegrowane narzędzia do zarządzania repozytoriami Git, ciągłej integracji i wdrażania (CI/CD), zarządzania zadaniami, a także kontroli dostępu i bezpieczeństwa. GitLab może działać jako usługa chmurowa (GitLab.com) lub być wdrożony lokalnie (self-hosted), co czyni go elastycznym rozwiązaniem zarówno dla małych zespołów, jak i dużych organizacji.
Infrastructure as a Code
---
config:
theme: neo
layout: dagre
look: neo
---
flowchart LR
subgraph s3["Repozytorium IAC"]
n12["iac-gitlab"]
end
subgraph s4["Infrastruktura"]
n13["Zarządzanie grupami i repozytoriami"]
end
n12 --> s4
s4 --> n14["Repository"] & n15["Group"]
n12@{ shape: rounded}
n14:::Pine
n15:::Pine
classDef Aqua stroke-width:1px, stroke-dasharray:none, stroke:#46EDC8, fill:#DEFFF8, color:#378E7A
classDef Sky stroke-width:1px, stroke-dasharray:none, stroke:#374D7C, fill:#E2EBFF, color:#374D7C
classDef Pine stroke-width:1px, stroke-dasharray:none, stroke:#254336, fill:#27654A, color:#FFFFFF
Poniższy schemat opisuje jak wyglada zarządzanie przestrzeńią w gitlabie. Dokładniejszy opis znajduje się tutaj
[Instalacja gitlab-runner](Instalacja Gitlab Runners.md)
Instalacja gitlab-runnera odbywa się za pomocą Terraform, którzy tworzy maszynę wirtualną (container proxmox), a instalacja usługi odbywa się za pomocą Ansible.
W projektach GitLab zaleca się stosowanie centralnego repozytorium z definicjami pipeline’ów oraz wspólnymi komponentami CI/CD, co pozwala na standaryzację i łatwiejsze zarządzanie procesami automatyzacji. Kluczowe znaczenie ma również zachowanie spójnej struktury plików .gitlab-ci.yml
, w tym prawidłowa definicja stages, co ułatwia czytelność, utrzymanie i rozwój pipeline’ów w całej organizacji.
1 - Gitlab-CI

Infrastruktura procesów gitlab-ci
GitLab CI/CD (Continuous Integration/Continuous Deployment) 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.
Pipeline składa się z jobów (zadań) pogrupowanych w stage (etapy), np. build
, test
, deploy
. GitLab CI uruchamia je w określonej kolejności, a wykonanie może odbywać się na GitLab Runnerach – agentach uruchamiających zadania.
Dzięki GitLab CI/CD możliwe jest ciągłe dostarczanie (CD), czyli automatyczne wdrażanie aplikacji na produkcję lub do środowisk testowych. Obsługuje kontenery, chmury i infrastruktury on-premise, ułatwiając zarządzanie cyklem życia oprogramowania.
---
config:
theme: neo
layout: dagre
look: neo
---
flowchart LR
subgraph s5["Przestrzeń CI/CD"]
n18["gitlab-ci"]
n19["components"]
end
n18 --> n19
s5 --> n11["containers"]
n11 --> n22["Job"]
n23["Run pipeline"] --> s5
n24["Event"] --> n23
n18@{ shape: rect}
n19@{ shape: procs}
n11@{ shape: procs}
n22@{ shape: lean-r}
n23@{ shape: in-out}
n24@{ shape: event}
n22:::Pine
n23:::Pine
classDef Aqua stroke-width:1px, stroke-dasharray:none, stroke:#46EDC8, fill:#DEFFF8, color:#378E7A
classDef Sky stroke-width:1px, stroke-dasharray:none, stroke:#374D7C, fill:#E2EBFF, color:#374D7C
classDef Pine stroke-width:1px, stroke-dasharray:none, stroke:#254336, fill:#27654A, color:#FFFFFF
Architektura projektu gitlab-ci w pl.rachuna-net/cicd
Projekt zawiera
pl.rachuna-net/cicd
├─ gitlab-ci # repozytorium z generycznymi procesami ci
├─ gitlab-profile # Dokumentacja techniczna
└─ components # grupa zawierająca komponenty (`ci/cd catalog`)
├── ast # Komponent do analizy pod kątem bezpiecezństwa (Application Security Testing).
├── containers # Komponent odpowiedzialny za budowanie i publikacje kontenerów.
├── infrastructure # Komponent odpowiedzialny za zarządzanie infrastrukturą.
├── prepare # Komponent do przygotowania procesu CI/CD.
├── release # Komponent do zarządzania wersjami i publikacji bibliotek i aplikacji na środowiska produkcyjne
└── validate # Komponent do automatycznej walidacji jakości i poprawności kodu w procesach CI/CD.
Taki układ jest korzystny, ponieważ łączy modułowość i standaryzację, umożliwiając szybkie wdrażanie spójnych procesów CI/CD we wszystkich projektach przy minimalnym nakładzie pracy.
Projekt jest podzielony na logiczne komponenty, z których każdy odpowiada za określony etap w procesie CI/CD. Oto główne katalogi i ich funkcje:
- components: Zawiera komponenty odpowiedzialne za różne zadania, takie jak analiza statyczna kodu (SAST), testy jednostkowe, walidacja konfiguracji, budowanie i publikowanie artefaktów.
- gitlab-ci: Zawiera konfiguracje pipeline’ów, w tym pliki YAML definiujące etapy i zadania.
- gitlab-profile: Dokumentacja i skrypty wspierające konfigurację GitLab CI/CD.
Dlaczego taki układ jest korzystny?
Taki podział projektu pl.rachuna-net/cicd
zapewnia:
-
Czytelność i modularność
- Każdy komponent ma jasno określoną odpowiedzialność (np.
containers
tylko dla kontenerów, validate
tylko dla walidacji kodu).
- Ułatwia to nowym członkom zespołu szybkie odnalezienie się w strukturze – nie muszą przeszukiwać jednego, wielkiego pliku
.gitlab-ci.yml
.
-
Reużywalność procesów
- Komponenty działają jak katalog CI/CD – można je wielokrotnie wykorzystywać w różnych projektach.
- Na przykład
prepare
lub release
mogą być użyte zarówno w projekcie backendowym, jak i frontendowym, bez potrzeby pisania wszystkiego od nowa.
-
Łatwa konserwacja i rozwój
- Modyfikacja lub poprawka w jednym komponencie (np.
ast
) nie wpływa bezpośrednio na inne procesy – minimalizuje to ryzyko przypadkowych błędów.
- Komponenty można rozwijać niezależnie, wprowadzając nowe funkcjonalności w sposób kontrolowany.
-
Skalowalność
- Wraz z rozwojem organizacji można dodawać kolejne komponenty (np.
performance-tests
, security-audit
) bez przebudowy całej architektury.
- Każdy komponent może być utrzymywany przez inny zespół lub osobę, co umożliwia równoległy rozwój.
-
Standaryzacja procesów
- Dzięki centralizacji komponentów wszystkie projekty w organizacji korzystają z tych samych procedur CI/CD, co zwiększa spójność i przewidywalność procesów.
- Aktualizacja standardów (np. zmiana polityki wersjonowania w
release
) jest natychmiast dostępna dla wszystkich projektów.
-
Łatwe wdrożenie nowych projektów
- Aby dodać CI/CD do nowego repozytorium, wystarczy włączyć potrzebne komponenty z katalogu – nie trzeba od zera pisać pipeline’ów.
Wady i ograniczenia takiego układu
Choć architektura oparta na modułowych komponentach CI/CD ma wiele zalet, wiąże się też z pewnymi wyzwaniami. Wymaga dyscypliny w utrzymaniu zgodności wersji komponentów pomiędzy projektami, aby uniknąć sytuacji, w której różne repozytoria korzystają z niekompatybilnych wersji tego samego procesu. Centralizacja logiki powoduje również, że błąd w jednym komponencie może wpłynąć na wiele projektów jednocześnie, jeśli zostanie wdrożony bez odpowiedniego testowania. Dodatkowo w większych organizacjach może pojawić się konieczność koordynacji prac między zespołami rozwijającymi poszczególne komponenty, co może spowalniać wdrażanie zmian.
1.1 - Pipelines

Lista pielines
Poniżej znajduje się lista stworzonych procesów
1.1.1 - Default

Default
Domyślny proces CI w GitLab automatyzuje budowanie, testowanie i wdrażanie aplikacji na podstawie zdefiniowanych etapów w pliku .gitlab-ci.yml
. Dzięki temu każda zmiana wprowadzona do repozytorium przechodzi przez powtarzalny i kontrolowany cykl weryfikacji, co zwiększa jakość oraz bezpieczeństwo wdrażanego oprogramowania.
Gitlab-ci pipeline
---
config:
theme: redux
---
flowchart LR
subgraph s1["validate"]
n1["🧑💻 YAML lint"]
end
subgraph s2["prepare"]
n2["🔍 Analyze Conventional Commits"]
n3["🔍 input parameters"]
n4["🕵 Set Version"]
end
subgraph s3["sast"]
n5["💪 sonarqube scan"]
end
subgraph s4["release"]
n6["📍 Publish Version"]
end
s2 --> s1
n2 --- n3
n3 --- n4
s3 --> s4
s1 --> s3
click n1 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/yamllint.yml?ref_type=heads"
click n2 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/conventional_commits.yml?ref_type=heads"
click n3 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n4 "hhttps://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
click n5 "https://gitlab.com/pl.rachuna-net/cicd/components/ast/-/blob/main/templates/sonarqube.yml?ref_type=heads"
click n6 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
Stage |
Job |
Opis |
prepare |
🔍 input parameters |
Wyświetlenie i weryfikacja parametrów wejściowych procesu CI |
prepare |
🔍 Analize Conventional Commits |
Analiza konwencji commitów (Conventional Commits) w celu ustalenia poprawności komunikatów |
prepare |
🕵 Set Version |
Ustalanie wersji aplikacji na podstawie commitów i reguł wersjonowania semantycznego |
validate |
🧑💻 YAML lint |
Walidacja składni plików YAML (lintowanie) |
sast |
💪 sonarqube scan |
Przeprowadzenie analizy statycznej kodu za pomocą SonarQube |
release |
📍 Publish Version |
Publikacja wersji (np. tagowanie, release na repozytorium) |
1.1.2 - Gitlab CI

gitlab-ci
Proces gitlab CI dla gitlab-ci.
Gitlab-ci pipeline
---
config:
theme: redux
---
flowchart LR
subgraph s1["validate"]
n1["🧑💻 YAML lint"]
end
subgraph s2["prepare"]
n2["🔍 Analyze Conventional Commits"]
n3["🔍 input parameters"]
n4["🕵 Set Version"]
end
subgraph s3["sast"]
n5["💪 sonarqube scan"]
end
subgraph s4["release"]
n6["📍 Publish Version"]
end
s2 --> s1
n2 --- n3
n3 --- n4
s3 --> s4
s1 --> s3
click n1 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/yamllint.yml?ref_type=heads"
click n2 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/conventional_commits.yml?ref_type=heads"
click n3 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n4 "hhttps://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
click n5 "https://gitlab.com/pl.rachuna-net/cicd/components/ast/-/blob/main/templates/sonarqube.yml?ref_type=heads"
click n6 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
Stage |
Job |
Opis |
prepare |
🔍 input parameters |
Wyświetlenie i weryfikacja parametrów wejściowych procesu CI |
prepare |
🔍 Analize Conventional Commits |
Analiza konwencji commitów (Conventional Commits) w celu ustalenia poprawności komunikatów |
prepare |
🕵 Set Version |
Ustalanie wersji aplikacji na podstawie commitów i reguł wersjonowania semantycznego |
validate |
🧑💻 YAML lint |
Walidacja składni plików YAML (lintowanie) |
sast |
💪 sonarqube scan |
Przeprowadzenie analizy statycznej kodu za pomocą SonarQube |
release |
📍 Publish Version |
Publikacja wersji (np. tagowanie, release na repozytorium) |
1.1.3 - Gitlab Component

gitlab-component
Proces gitlab CI dla gitlab-componentów.
Gitlab-ci pipeline
---
config:
theme: redux
---
flowchart LR
subgraph s1["validate"]
n1["🧑💻 YAML lint"]
end
subgraph s2["prepare"]
n2["🔍 Analyze Conventional Commits"]
n3["🔍 input parameters"]
n4["🕵 Set Version"]
end
subgraph s3["sast"]
n5["💪 sonarqube scan"]
end
subgraph s4["release"]
n6["📍 Publish Version"]
end
s2 --> s1
n2 --- n3
n3 --- n4
s3 --> s4
s1 --> s3
click n1 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/yamllint.yml?ref_type=heads"
click n2 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/conventional_commits.yml?ref_type=heads"
click n3 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n4 "hhttps://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
click n5 "https://gitlab.com/pl.rachuna-net/cicd/components/ast/-/blob/main/templates/sonarqube.yml?ref_type=heads"
click n6 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
Stage |
Job |
Opis |
prepare |
🔍 input parameters |
Wyświetlenie i weryfikacja parametrów wejściowych procesu CI |
prepare |
🔍 Analize Conventional Commits |
Analiza konwencji commitów (Conventional Commits) w celu ustalenia poprawności komunikatów |
prepare |
🕵 Set Version |
Ustalanie wersji aplikacji na podstawie commitów i reguł wersjonowania semantycznego |
validate |
🧑💻 YAML lint |
Walidacja składni plików YAML (lintowanie) |
sast |
💪 sonarqube scan |
Przeprowadzenie analizy statycznej kodu za pomocą SonarQube |
release |
📍 Publish Version |
Publikacja wersji (np. tagowanie, release na repozytorium) |
1.1.4 - Image builder

Image builder
Proces gitlab CI dla image builder (budowanie kontenerów)
Gitlab-ci pipeline
---
config:
theme: redux
---
flowchart LR
subgraph s1["prepare"]
n1["🔍 Analyze Conventional Commits"]
n2["⚙️ Input Parameters"]
n3["🕵 Set Version"]
end
subgraph s2["validate"]
n4["🧪 Validate files (conftest)"]
n11@{ label: "<div style=\"color:\"><span style=\"color:\">🧑💻 YAML lint</span></div>" }
end
subgraph s3["build"]
n5["🚀 build container image"]
end
subgraph s4["publish"]
n6["🌐 publish container image"]
end
subgraph s5["release"]
n8["📍 Publish Version"]
end
subgraph s6["integration-test"]
n9["🔬 trivy (dast)"]
n10["🧪 test docker image"]
end
s1 --> s2
s2 --> s3
s3 --> s4
s4 --> s5
s5 --> s6
n1 --- n2
n2 --- n3
n9 --- n10
n4 --> n11
n11@{ shape: rect}
click n1 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/conventional_commits.yml?ref_type=heads"
click n2 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n3 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/set_version.yml?ref_type=heads"
click n4 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/contrest.yml"
click n5 "https://gitlab.com/pl.rachuna-net/cicd/components/containers/-/blob/main/templates/image-builder.yml"
click n6 "https://gitlab.com/pl.rachuna-net/cicd/components/containers/-/blob/main/templates/image-builder.yml"
click n8 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
click n9 "https://gitlab.com/pl.rachuna-net/cicd/components/ast/-/blob/main/templates/trivy.yml?ref_type=heads"
click n10 "https://gitlab.com/pl.rachuna-net/cicd/components/containers/-/blob/main/templates/image-builder.yml"
click n11 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/yamllint.yml?ref_type=heads"
Stage |
Job |
Opis |
prepare |
🔍 Analyze Conventional Commits |
Analiza konwencji commitów (Conventional Commits) w celu ustalenia poprawności komunikatów |
prepare |
⚙️ Input Parameters |
Wyświetlenie i weryfikacja parametrów wejściowych procesu CI |
prepare |
🕵 Set Version |
Ustalanie wersji aplikacji na podstawie commitów i reguł wersjonowania semantycznego |
validate |
🧪 Validate files (conftest) |
Walidacja plików YAML/JSON w oparciu o polityki OPA/Conftest |
validate |
🧑💻 YAML lint |
Walidacja składni plików YAML(lintowanie) |
build |
🚀 build container image |
Budowanie obrazu kontenera z użyciem Buildah |
publish |
🌐 publish container image |
Publikacja obrazu kontenera do rejestru Docker/GitLab |
release |
🎉 Publish version in vault |
Zapisanie informacji o wydanej wersji w systemie Vault |
release |
📍 Publish Version |
Publikacja wersji (np. tagowanie, release na repozytorium) |
integration-test |
🔬 trivy (dast) |
Skanowanie obrazu kontenera pod kątem luk bezpieczeństwa przy użyciu Trivy |
integration-test |
🧪 test docker image |
Testy integracyjne gotowego obrazu kontenera |
1.1.5 - docs

docs
Domyślny proces CI w GitLab automatyzuje budowanie, testowanie i wdrażanie aplikacji na podstawie zdefiniowanych etapów w pliku .gitlab-ci.yml
. Dzięki temu każda zmiana wprowadzona do repozytorium przechodzi przez powtarzalny i kontrolowany cykl weryfikacji, co zwiększa jakość oraz bezpieczeństwo wdrażanego oprogramowania.
Gitlab-ci pipeline
---
config:
theme: redux
---
flowchart LR
subgraph s1["validate"]
n1["🧑💻 YAML lint"]
end
subgraph s2["prepare"]
n2["🔍 Analyze Conventional Commits"]
n3["🔍 input parameters"]
n4["🕵 Set Version"]
end
subgraph s3["sast"]
n5["💪 sonarqube scan"]
end
subgraph s4["release"]
n6["📍 Publish Version"]
end
s2 --> s1
n2 --- n3
n3 --- n4
s3 --> s4
s1 --> s3
click n1 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/yamllint.yml?ref_type=heads"
click n2 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/conventional_commits.yml?ref_type=heads"
click n3 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n4 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n5 "https://gitlab.com/pl.rachuna-net/cicd/components/sast/-/blob/main/templates/sonarqube.yml?ref_type=heads"
click n6 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
Stage |
Job |
Opis |
prepare |
🔍 input parameters |
Wyświetlenie i weryfikacja parametrów wejściowych procesu CI |
prepare |
🔍 Analize Conventional Commits |
Analiza konwencji commitów (Conventional Commits) w celu ustalenia poprawności komunikatów |
prepare |
🕵 Set Version |
Ustalanie wersji aplikacji na podstawie commitów i reguł wersjonowania semantycznego |
validate |
🧑💻 YAML lint |
Walidacja składni plików YAML (lintowanie) |
sast |
💪 sonarqube scan |
Przeprowadzenie analizy statycznej kodu za pomocą SonarQube |
release |
📍 Publish Version |
Publikacja wersji (np. tagowanie, release na repozytorium) |
1.1.6 - opentofu

OpenTofu
Ten pipeline GitLab CI/CD został zaprojektowany do kompleksowej obsługi projektów OpenTofu - Infrastructure as a Code.
Celem jest zapewnienie wysokiej jakości kodu, spójności dokumentacji oraz bezpiecznego wdrażania infrastruktury.
Gitlab-ci pipeline
---
config:
theme: redux
---
flowchart LR
subgraph s1["validate"]
n1["🧑💻 YAML lint"]
n8@{ label: "<code><span class=\"hljs-string\">🕵</span><span class=\"\"> </span><span class=\"hljs-attr\">opentofu fmt</span></code>" }
n9@{ label: "<code><span class=\"hljs-string\">✅</span><span class=\"\"> </span><span class=\"hljs-attr\">opentofu validate</span></code>" }
n10@{ label: "<code><span class=\"hljs-string\">✅</span><span class=\"\"> </span><span class=\"hljs-attr\">tflint</span></code>" }
n11@{ label: "<code><span class=\"hljs-string\">✅</span><span class=\"\"> </span><span class=\"hljs-attr\">opentofu-docs</span></code>" }
end
subgraph s2["prepare"]
n2["🔍 Analyze Conventional Commits"]
n3["🔍 input parameters"]
n4["🕵 Set Version"]
end
subgraph s3["sast"]
n5["💪 sonarqube scan"]
end
subgraph s4["release"]
n6["📍 Publish Version"]
end
subgraph s5["unit-test"]
n12@{ label: "<span style=\"color:\" color=\"\">🧪 opentofu plan</span>" }
end
subgraph s6["deploy"]
n13@{ label: "<span style=\"color:\" color=\"\">💥 opentofu apply</span>" }
end
s2 --> s1
n2 --- n3
n3 --- n4
s3 --> s4
s1 --> s5
n1 --- n8
n8 --> n9
n9 --> n10
n10 --> n11
s5 --> s3
s4 --> s6
n8@{ shape: rect}
n9@{ shape: rect}
n10@{ shape: rect}
n11@{ shape: rect}
n12@{ shape: rect}
n13@{ shape: rect}
click n1 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/yamllint.yml?ref_type=heads"
click n8 "https://gitlab.com/pl.rachuna-net/cicd/components/infrastructure/-/blob/main/templates/opentofu.yml?ref_type=heads"
click n9 "https://gitlab.com/pl.rachuna-net/cicd/components/infrastructure/-/blob/main/templates/opentofu.yml?ref_type=heads"
click n10 "https://gitlab.com/pl.rachuna-net/cicd/components/infrastructure/-/blob/main/templates/opentofu.yml?ref_type=heads"
click n11 "https://gitlab.com/pl.rachuna-net/cicd/components/infrastructure/-/blob/main/templates/opentofu.yml?ref_type=heads"
click n2 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/conventional_commits.yml?ref_type=heads"
click n3 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n4 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
click n5 "https://gitlab.com/pl.rachuna-net/cicd/components/ast/-/blob/main/templates/sonarqube.yml?ref_type=heads"
click n6 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
click n12 "https://gitlab.com/pl.rachuna-net/cicd/components/infrastructure/-/blob/main/templates/opentofu.yml?ref_type=heads"
click n13 "https://gitlab.com/pl.rachuna-net/cicd/components/infrastructure/-/blob/main/templates/opentofu.yml?ref_type=heads"
Stage |
Job |
Opis |
prepare |
🔍 input parameters |
Wyświetlenie i weryfikacja parametrów wejściowych procesu CI. |
prepare |
🔍 Analyze Conventional Commits |
Analiza konwencji commitów (Conventional Commits) w celu oceny poprawności i wyznaczenia zmian (feat/fix/chore). |
prepare |
🕵 Set Version |
Ustalanie wersji aplikacji na podstawie commitów i reguł wersjonowania semantycznego. |
validate |
🧑💻 YAML lint |
Lintowanie i walidacja składni plików YAML. |
validate |
🕵 opentofu fmt |
Formatowanie plików OpenTofu/Terraform zgodnie ze standardem. |
validate |
✅ opentofu validate |
Walidacja konfiguracji OpenTofu (składnia, zależności, providerzy). |
validate |
✅ tflint |
Lint reguł dla Terraform/OpenTofu (best practices, błędy konfiguracyjne). |
validate |
✅ opentofu-docs |
Generowanie/aktualizacja dokumentacji modułów OpenTofu (np. README, zmienne, wyjścia). |
unit-test |
🧪 opentofu plan |
„Suchy bieg” – plan zmian infrastruktury jako test poprawności i wpływu zmian. |
sast |
💪 sonarqube scan |
Analiza statyczna kodu (SAST) z wykorzystaniem SonarQube. |
release |
📍 Publish Version |
Publikacja wersji (tagowanie, release, ewentualny upload artefaktów). |
deploy |
💥 opentofu apply |
Zastosowanie planu zmian infrastruktury (wdrożenie) w środowisku. |
1.1.7 - opentofu module

OpenTofu Module
Ten pipeline GitLab CI/CD został zaprojektowany do kompleksowej obsługi projektów OpenTofu Module
Celem jest zapewnienie wysokiej jakości kodu, spójności dokumentacji oraz bezpiecznego wdrażania infrastruktury.
Gitlab-ci pipeline
---
config:
theme: redux
---
flowchart LR
subgraph s1["validate"]
n1["🧑💻 YAML lint"]
n8@{ label: "<code><span class=\"hljs-string\">🕵</span><span class=\"\"> </span><span class=\"hljs-attr\">opentofu fmt</span></code>" }
n10@{ label: "<code><span class=\"hljs-string\">✅</span><span class=\"\"> </span><span class=\"hljs-attr\">tflint</span></code>" }
n11@{ label: "<code><span class=\"hljs-string\">✅</span><span class=\"\"> </span><span class=\"hljs-attr\">terraform-docs</span></code>" }
end
subgraph s2["prepare"]
n2["🔍 Analyze Conventional Commits"]
n3["🔍 input parameters"]
n4["🕵 Set Version"]
end
subgraph s3["sast"]
n5["💪 sonarqube scan"]
end
subgraph s4["release"]
n6["📍 Publish Version"]
end
s2 --> s1
n2 --- n3
n3 --- n4
s3 --> s4
n1 --- n8
n8 --- n10
n10 --- n11
s1 --> s3
n8@{ shape: rect}
n10@{ shape: rect}
n11@{ shape: rect}
click n1 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/yamllint.yml?ref_type=heads"
click n8 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/terraform.yml?ref_type=heads"
click n10 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/terraform.yml?ref_type=heads"
click n11 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/terraform.yml?ref_type=heads"
click n2 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/conventional_commits.yml?ref_type=heads"
click n3 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n4 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
click n5 "https://gitlab.com/pl.rachuna-net/cicd/components//-/blob/main/templates/sonarqube.yml?ref_type=heads"
click n6 "https://gitlab.com/pl.rachuna-net/cicd/components/release/-/blob/main/templates/versioning.yml"
Stage |
Job |
Opis |
prepare |
🔍 input parameters |
Wyświetlenie i weryfikacja parametrów wejściowych procesu CI. |
prepare |
🔍 Analyze Conventional Commits |
Analiza konwencji commitów (Conventional Commits) w celu oceny poprawności i wyznaczenia zmian (feat/fix/chore). |
prepare |
🕵 Set Version |
Ustalanie wersji aplikacji na podstawie commitów i reguł wersjonowania semantycznego. |
validate |
🧑💻 YAML lint |
Lintowanie i walidacja składni plików YAML. |
validate |
🕵 opentofu fmt |
Formatowanie plików OpenTofu/Terraform zgodnie ze standardem. |
validate |
✅ tflint |
Lint reguł dla Terraform/OpenTofu (best practices, błędy konfiguracyjne). |
validate |
✅ opentofu-docs |
Generowanie/aktualizacja dokumentacji modułów OpenTofu (np. README, zmienne, wyjścia). |
sast |
💪 sonarqube scan |
Analiza statyczna kodu (SAST) z wykorzystaniem SonarQube. |
release |
📍 Publish Version |
Publikacja wersji (tagowanie, release, ewentualny upload artefaktów). |
1.1.8 - renovate

renovate
Domyślny proces CI w GitLab automatyzuje budowanie, testowanie i wdrażanie aplikacji na podstawie zdefiniowanych etapów w pliku .gitlab-ci.yml
. Dzięki temu każda zmiana wprowadzona do repozytorium przechodzi przez powtarzalny i kontrolowany cykl weryfikacji, co zwiększa jakość oraz bezpieczeństwo wdrażanego oprogramowania.
Gitlab-ci pipeline
---
config:
theme: redux
---
flowchart LR
subgraph s1["validate"]
n1["🧑💻 YAML lint"]
end
subgraph s2["prepare"]
n2["🔍 Analyze Conventional Commits"]
n3["🔍 input parameters"]
n4["🕵 Set Version"]
end
subgraph s3["sast"]
n5["💪 sonarqube scan"]
end
subgraph s4["release"]
n6["📍 Publish Version"]
end
s2 --> s1
n2 --- n3
n3 --- n4
s3 --> s4
s1 --> s3
click n1 "https://gitlab.com/pl.rachuna-net/cicd/components/validate/-/blob/main/templates/yamllint.yml?ref_type=heads"
click n2 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/conventional_commits.yml?ref_type=heads"
click n3 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n4 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
click n5 "https://gitlab.com/pl.rachuna-net/cicd/components/sast/-/blob/main/templates/sonarqube.yml?ref_type=heads"
click n6 "https://gitlab.com/pl.rachuna-net/cicd/components/prepare/-/blob/main/templates/input_parameters.yml?ref_type=heads"
Stage |
Job |
Opis |
prepare |
🔍 input parameters |
Wyświetlenie i weryfikacja parametrów wejściowych procesu CI |
prepare |
🔍 Analize Conventional Commits |
Analiza konwencji commitów (Conventional Commits) w celu ustalenia poprawności komunikatów |
prepare |
🕵 Set Version |
Ustalanie wersji aplikacji na podstawie commitów i reguł wersjonowania semantycznego |
validate |
🧑💻 YAML lint |
Walidacja składni plików YAML (lintowanie) |
sast |
💪 sonarqube scan |
Przeprowadzenie analizy statycznej kodu za pomocą SonarQube |
release |
📍 Publish Version |
Publikacja wersji (np. tagowanie, release na repozytorium) |
1.2 - Components

Lista komponentów
Poniżej znajduje się lista stworzonych komponentów
1.2.1 - prepare
Komponent do przygotowania procesu CI/CD.
1.2.1.1 - 🛠 Job template: Input Parameters
🔍 Input parameters
Job print-input-parameters
umożliwia czytelne i uporządkowane wyświetlenie zmiennych procesu gitlab-ci, w tym wersji komponentów CI/CD oraz obrazów kontenerowych. Jest szczególnie przydatny podczas wczesnych etapów pipeline’a (etap prepare
) do weryfikacji, czy zmienne zostały poprawnie przekazane i rozwinięte.

Job, który wyświetla informacje o zmiennych procesowych CI
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/python:2.0.0 |
Obraz Dockera z interpreterem Pythona lub shellem |
🧬 Zmienne środowiskowe obsługiwane przez skrypt
Komponent wypisuje wartości m.in. następujących zmiennych:
GITLAB_CI_VERSION
COMPONENT_VERSION_*
COMPONENT_VERSION_DEPLOY
CONTAINER_IMAGE_*
CONTAINER_IMAGE_PYTHON
VAULT_ADDR
SONAR_HOST_URL
📤 Output
Skrypt wypisuje dane w formie tabeli ASCII w logach pipeline’u, np.:
===> 💾 Print set inputs Variables
┌────────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Variable │ Value │
├────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ CONTAINER_IMAGE_TERRAFORM │ registry.gitlab.com/pl.rachuna-net/containers/terraform:1.0.0 │
│ COMPONENT_VERSION_DEPLOY │ v1.2.3 │
...
└────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────┘
🧪 Przykład użycia
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/prepare/input_parameters@$COMPONENT_VERSION_PREPARE
inputs:
docker_image: $CONTAINER_IMAGE_PYTHON
🔍 input parameters:
stage: prepare
rules:
- when: on_success
1.2.1.2 - 🛠 Job template: Analyze Conventional Commits
🔍 Analyze Conventional Commits
Job Analyze Conventional Commits
, który automatycznie weryfikuje komunikaty commitów pod kątem zgodności z konwencją Conventional Commits, pomijając commity typu Merge i Revert oraz przerywając pipeline w przypadku wykrycia niezgodności.
🔍 Analyze Conventional Commits
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/prepare/conventional_commits@$COMPONENT_VERSION_PREPARE
inputs:
docker_image: $CONTAINER_IMAGE_PYTHON
🔍 Analyze Conventional Commits:
stage: prepare
rules:
- when: on_success
1.2.2 - validate
Komponent do automatycznej walidacji jakości i poprawności kodu w procesach CI/CD.
1.2.2.1 - 🛠 Job template: 🔬 Validate files (conftest)
🔍 Pipeline do walidacji plików za pomocą Conftest
Job Validate files (conftest)
pozwala na automatyczną walidację plików YAML/JSON w oparciu o polityki OPA/Conftest.
Pipeline pobiera repozytorium z politykami, przygotowuje środowisko i uruchamia testy w zadanym namespace
.
Idealnie sprawdza się na etapie validate
w pipeline’ach CI/CD.
Wymagania wstępne
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/conftest:1.0.0 |
Obraz Dockera z narzędziem Conftest |
logo_url |
string |
https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
repository_policies |
string |
git@gitlab.com:pl.rachuna-net/discipline.git |
Repozytorium GitLab z politykami OPA/Conftest |
repository_policies_branch |
string |
main |
Branch repozytorium z politykami |
repository_policies_path |
string |
policies/conftest |
Ścieżka katalogu polityk w repozytorium |
source_files |
string |
*.yml |
Pliki w repozytorium, które mają być testowane |
namespace_policy |
string |
(puste) |
Przestrzeń nazw dla polityk Conftest (namespace) |
🧬 Zmienne środowiskowe ustawiane w jobie
CONTAINER_IMAGE_CONFTEST
– obraz Dockera Conftest (na podstawie inputs.docker_image
)
LOGO_URL
– ścieżka do logo (na podstawie inputs.logo_url
)
REPOSITORY_POLICIES
– repozytorium z politykami
REPOSITORY_POLICIES_BRANCH
– branch repozytorium z politykami
REPOSITORY_POLICIES_PATH
– katalog polityk w repozytorium
SOURCE_FILES
– pliki do testowania
NAMESPACE_POLICY
– przestrzeń nazw polityk Conftest
📤 Output
Job wykonuje następujące kroki:
- Pobranie logo (jeżeli
LOGO_URL
jest ustawiony).
- Wyświetlenie informacji o przekazanych parametrach (
_function_print_row
).
- Klonowanie repozytorium z politykami (
repository_policies
) w odpowiednim branchu.
- Uruchomienie Conftest z wykorzystaniem wskazanych plików (
source_files
) i polityk (repository_policies_path
) w przestrzeni nazw namespace_policy
.
Przykład logu:
===> 🔬 Conftest Validate - Parameters
┌───────────────────────────────────┬─────────────────────────────────────────────────────┐
│ Variable │ Value │
├───────────────────────────────────┼─────────────────────────────────────────────────────┤
│ REPOSITORY_POLICIES │ git@gitlab.com:pl.rachuna-net/discipline.git │
│ REPOSITORY_POLICIES_PATH │ policies/conftest │
│ SOURCE_FILES │ *.yml │
└───────────────────────────────────┴─────────────────────────────────────────────────────┘
🧪 Dostępne joby
🔬 Validate files (conftest)
Waliduje wskazane pliki repozytorium względem polityk Conftest:
🔬 Validate files (conftest):
stage: validate
image: $CONTAINER_IMAGE_CONFTEST
before_script:
- git config --global --add safe.directory ${CI_PROJECT_DIR}
- [ ! -z "${LOGO_URL}" ] && curl -s "${LOGO_URL}"
- !reference [.validate:_function_print_row]
- !reference [.validate:conftest_input_variables]
- !reference [.validate:conftest_prepare]
script:
- conftest test $SOURCE_FILES --policy $REPOSITORY_POLICIES_PATH --namespace $NAMESPACE_POLICY
🧪 Przykład użycia w pipeline
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/validate/conftest@$COMPONENT_VERSION_VALIDATE
inputs:
repository_policies: git@gitlab.com:pl.rachuna-net/discipline.git
repository_policies_path: policies/k8s
source_files: "config.yml"
namespace_policy: image_builder
⚡ Dzięki temu szablonowi szybko weryfikujesz zgodność konfiguracji z politykami OPA/Conftest bez ręcznej konfiguracji za każdym razem w pipeline’ach.
1.2.2.2 - 🛠 Job template: 🕵 yamllint
🕵 YAML lint
Komponent Yamllint jest odpowiedzialny za walidację wszystkich plików YAML w repozytorium w ramach stage validate.
Wykorzystuje narzędzie yamllint
oraz centralny plik konfiguracyjny .yamllint.yml
, aby zapewnić spójność stylu i poprawności składniowej plików YAML.
- Uruchamiany w ramach jobu 🕵 YAML lint
- Możliwość pełnej parametryzacji obrazu Dockera i ścieżek
- Automatycznie dołącza pliki pomocnicze (
function_print_row.yml
, logo.yml
, itp.)
- Można go łatwo zaimportować do dowolnego pipeline za pomocą sekcji include

Job, który wykonuje walidację składni plików YAML w repozytorium przy użyciu narzędzia yamllint.
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/python:2.0.0 |
Obraz Dockera z interpreterem Pythona lub shellem. |
logo_url |
string |
https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
URL logotypu wyświetlanego w logach joba. |
validate_repo_namespace |
string |
pl.rachuna-net/cicd/components/validate |
Namespace i ścieżka do repozytorium komponentu validate. |
validate_repo_branch |
string |
main |
Gałąź komponentu validate, z której pobierane są pliki. |
yamllint_path |
string |
_configs/validate/.yamllint.yml |
Ścieżka do pliku konfiguracyjnego yamllint. |
🧬 Zmienne środowiskowe obsługiwane przez skrypt
Job ustawia i wykorzystuje poniższe zmienne środowiskowe:
CONTAINER_IMAGE_PYTHON
– wybrany obraz Dockera.
LOGO_URL
– adres logotypu, który jest opcjonalnie pobierany w trakcie uruchamiania joba.
VALIDATE_REPO_NAMESPACE
– namespace repozytorium komponentu validate.
VALIDATE_REPO_BRANCH
– gałąź repozytorium komponentu validate.
YAMLLINT_PATH
– ścieżka do pliku konfiguracyjnego yamllint.
📤 Output
Job wykonuje linting plików YAML i wypisuje wyniki w logach pipeline’u w formie standardowej dla narzędzia yamllint, np.:
===> 🔍 YAML lint results
source/ci-template.yml
10:3 warning missing document start "---" (document-start)
22:1 error too many blank lines (1 > 0) (empty-lines)
W przypadku błędów job kończy się statusem failed
.
1.2.3 - release
Komponent do zarządzania wersjami i publikacji bibliotek i aplikacji.
1.2.3.1 - 🛠 Job template: Publish Version

Wersjonowania kodu
SemVer - (Semantic Versioning) to standard wersjonowania oprogramowania, który określa sposób nadawania numerów wersji w formacie MAJOR.MINOR.PATCH.
Job, który odpowiada za wersjonowanie i publikację zmian w repozytorium za pomocą narzędzia semantic-release.
Szablon składa się z dwóch kroków:
- 🕵 Set Version – ustawia wersję w trybie dry-run (przygotowanie).
- 📍 Publish Version – publikuje nową wersję (release).
[!NOTE]
Wymagania:
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/semantic-release:2.0.0 |
Obraz Dockera zawierający semantic-release. |
logo_url |
string |
https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
URL logotypu wyświetlanego w logach joba. |
debug |
string |
false |
Włącza tryb debugowania (--debug ). |
dry_run |
string |
false |
Uruchamia semantic-release w trybie dry-run (--dry-run ). |
component_repo_namespace |
string |
pl.rachuna-net/cicd/components/release |
Namespace i ścieżka do repozytorium komponentu. |
component_repo_branch |
string |
main |
Gałąź repozytorium komponentu. |
releaserc_path |
string |
_configs/release/.releaserc.js |
Ścieżka do pliku konfiguracyjnego semantic-release. |
🧬 Zmienne środowiskowe obsługiwane przez skrypt
Job ustawia i wykorzystuje poniższe zmienne środowiskowe:
CONTAINER_IMAGE_SEMANTIC_RELEASE
– obraz Dockera z semantic-release.
LOGO_URL
– adres logotypu.
DEBUG
– flaga debugowania (dziedziczona z inputs.debug
).
VERSIONING_DEBUG
– włącza dodatkowy debug semantic-release.
VERSIONING_DRY_RUN
– uruchamia semantic-release w trybie dry-run.
COMPONENT_REPO_NAMESPACE
– namespace repozytorium komponentu.
COMPONENT_REPO_BRANCH
– gałąź repozytorium komponentu.
RELEASERC_FILE
– ścieżka do pliku .releaserc.js
.
📤 Output
Job generuje:
-
Plik CHANGELOG.md
– zawierający opis zmian.
-
Plik versioning.env
(zapisany jako artifact dotenv
) z informacjami o wersji, np.:
VERSION=1.2.3
VERSION_MAJOR=1
VERSION_MINOR=2
VERSION_PATCH=3
-
Logi semantic-release z informacją o wygenerowanej wersji i ewentualnie o publikacji.
📝 Przykładowe użycie w pipeline
include:
- component: '$CI_SERVER_FQDN/pl.rachuna-net/cicd/components/release@$COMPONENT_VERSION_RELEASE'
inputs:
docker_image: "registry.gitlab.com/pl.rachuna-net/containers/semantic-release:2.0.0"
debug: "true"
dry_run: "false"
🔎 Kroki joba
🕵 Set Version
- Stage:
prepare
- Uruchamia semantic-release w trybie dry-run (
VERSIONING_DRY_RUN: "true"
) w celu przygotowania wersji i changeloga.
📍 Publish Version
- Stage:
release
- Uruchamia semantic-release w trybie pełnym (publikacja wersji i generacja changeloga).
Jak działa komponent?
Analiza brancha
W pierwszej kolejności sprawdzane jest - czy można zwersjonować aplikacje na odpowiednim branchu
"branches": [
{
"name": "feature/*",
"channel": "feat-${name.replace(/^feature\\//, '').substring(0, 20)}",
"prerelease": "feat-${name.replace(/^feature\\//, '').substring(0, 20)}"
},
{
"name": "epic/*",
"channel": "epic-${name.replace(/^epic\\//, '').replace(/[^A-Za-z0-9]/, '').substring(0, 20)}",
"prerelease": "epic-${name.replace(/^epic\\//, '').replace(/[^A-Za-z0-9]/, '').substring(0, 20)}"
},
{ "name": "alpha", "channel": "alpha", "prerelease": true },
{ "name": "release", "channel": "rc", "prerelease": true },
{ "name": "hotfix", "channel": "ht", "prerelease": true },
{ "name": "main" }
],
Sprawdzanie convensional commits
Komponent sprawdza, czy czyta wszystkie informacje o commitach zgodnie z standardem Conventional Commits
"plugins": [
[ "@semantic-release/commit-analyzer",
{
"preset": "conventionalcommits",
"releaseRules": [
{ "breaking": true, "release": "major" },
{ "type": "feat", "release": "minor" },
{ "type": "fix", "release": "patch" },
{ "type": "style", "release": "patch" },
{ "type": "perf", "release": "patch" },
{ "type": "test", "release": "patch" },
{ "type": "docs", "release": "patch" },
{ "type": "sec", "release": "patch" }
]
}
],
Generowanie releases notes
Następnie generuje release notes
[
"@semantic-release/release-notes-generator",
{
"preset": "conventionalcommits",
"presetConfig": {
"types": [
{ "type": "feat", "section": "✨ Features ✨" },
{ "type": "fix", "section": "🐛 Bug Fixes 🐛" },
{ "type": "revert", "section": "⏮️️ Reverts ⏮️️" },
{ "type": "perf", "section": "🔧 Performance Improvements 🔧" },
{ "type": "docs", "section": "📝 Documentation 📝" },
{ "type": "build", "section": "📀 Build 📀" },
{ "type": "test", "section": "💚 Tests 💚" },
{ "type": "ci", "section": "🏁 CI/CD 🏁" }
]
}
}
],
Generowanie chandelog.md
Generowanie localnie pliku CHANGELOG.md
[
"@semantic-release/changelog",
{
"changelogFile": "CHANGELOG.md"
}
],
Integracja z gitlab
Integracja z gitab
[
"@semantic-release/gitlab"
]
Ustawienie zmiennych środowiskowych
{
name: "versioning-variables",
generateNotes: (pluginConfig, context) => {
const releaseNote = context.nextRelease.notes;
const nextVersion = context.nextRelease.version;
// Check if the version is a final version or a snapshot
const finalVersionRegex = /(\d+\.\d+\.\d+)/;
const matchFinalVersion = nextVersion.match(finalVersionRegex);
let artifactType = "snapshot";
if (matchFinalVersion) {
artifactType = "release";
}
// Extract JIRA issues from commits
const jiraRegexp = /\b[A-Z][A-Z0-9_]+-[1-9][0-9]*/g;
const jiraSet = new Set();
for (const commit of context.commits) {
if (commit.message) {
const matchJIRA = commit.message.match(jiraRegexp);
if (matchJIRA) {
matchJIRA.forEach(jira => jiraSet.add(match));
}
}
}
// Create a file with the environment variables
const uniqJiraList = Array.from(jiraSet)
const environmentList = [
{ key: "RELEASE_CANDIDATE_VERSION", value: nextVersion },
{ key: "ARTIFACTS_TYPE", value: artifactType },
{ key: "JIRA_ISSUES_IDS", value: uniqJiraList.join(", ") }
]
const fileContent = environmentList.map(env => `${env.key}=${env.value}`).join("\n");
fs.writeFileSync("versioning.env", fileContent);
}
}
Linki
1.2.4 - Application Security Testing

- Application Security Testing
Komponent do analizy pod kątem bezpiecezństwa (Application Security Testing).
1.2.4.1 - 🛠 Job template: 💪 SonarQube Scanner (SAST)
💪 SonarQube Scanner (SAST)
Job SonarQube Scanner (SAST)
umożliwia analizę jakości kodu źródłowego oraz wykrywanie błędów z wykorzystaniem platformy SonarQube/SonarCloud. Szablon należy uruchamiać w etapie sast
, aby mieć pewność, że jakość kodu spełnia wymagania organizacji.
Wymagania wstępne
- SonarQube Scanner – dostępny w obrazie Dockera ustawianym przez
inputs.docker_image
.
- Skonfigurowane konto w SonarCloud lub własnej instancji SonarQube (parametry:
sonar_host_url
, sonar_token
, sonar_project_key
).
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/sonar-scanner:2.0.0 |
Obraz Dockera zawierający SonarQube Scanner |
logo_url |
string |
https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
sonar_user_home |
string |
${CI_PROJECT_DIR}/.sonar |
Lokalny katalog roboczy SonarQube |
sonar_host_url |
string |
https://sonarcloud.io |
Adres instancji SonarQube lub SonarCloud |
sonar_organization |
string |
pl-rachuna-net |
Nazwa organizacji w SonarCloud |
sonar_project_name |
string |
(puste) |
Nazwa projektu analizowanego w SonarQube |
sonar_project_key |
string |
(puste) |
Klucz projektu w SonarQube (unikalny identyfikator) |
sonar_token |
string |
(puste) |
Token uwierzytelniający do SonarQube |
sonar_project_description |
string |
(puste) |
Opis projektu w SonarQube |
sonar_project_version |
string |
1.0.0 |
Wersja analizowanego projektu |
sonar_sources |
string |
. |
Ścieżka do katalogu ze źródłami do analizy |
🧬 Zmienne środowiskowe ustawiane w jobie
CONTAINER_IMAGE_SONAR_SCANNER
– obraz Dockera SonarQube Scanner (na podstawie inputs.docker_image
)
SONAR_USER_HOME
– katalog roboczy SonarQube
SONAR_HOST_URL
– adres instancji SonarQube/SonarCloud
SONAR_ORGANIZATION
– nazwa organizacji
SONAR_PROJECT_KEY
– klucz projektu w SonarQube
SONAR_PROJECT_NAME
– nazwa projektu
SONAR_PROJECT_DESCRIPTION
– opis projektu
SONAR_PROJECT_VERSION
– wersja projektu
SONAR_SOURCES
– ścieżki źródeł do analizy
SONAR_TOKEN
– token uwierzytelniający do SonarQube
📤 Output
Job wykonuje następujące kroki:
-
Wyświetlenie zmiennych wejściowych i konfiguracji SonarQube.
-
Uruchomienie SonarQube Scanner z zadeklarowanymi parametrami:
- analiza kodu z podanych źródeł (
SONAR_SOURCES
),
- przesłanie wyników do wskazanej instancji (
SONAR_HOST_URL
).
Pipeline zakończy się niepowodzeniem, jeśli analiza SonarQube wykryje błędy jakościowe powodujące blokadę (quality gate failure).
🧪 Dostępny job
💪 sonarqube scanner (sast)
Analizuje kod źródłowy i przesyła wyniki do SonarQube/SonarCloud:
💪 sonarqube scanner:
stage: sast
image: $CONTAINER_IMAGE_SONAR_SCANNER
before_script:
- git config --global --add safe.directory ${CI_PROJECT_DIR}
- [ ! -z "${LOGO_URL}" ] && curl -s "${LOGO_URL}"
- !reference [.ast:_function_print_row]
- !reference [.ast:sonarqube_input_variables]
- !reference [.ast:sonarqube-init]
script:
- |
sonar-scanner \
-Dsonar.projectKey="${SONAR_PROJECT_KEY}" \
-Dsonar.organization="${SONAR_ORGANIZATION}" \
-Dsonar.projectName="${SONAR_PROJECT_NAME}" \
-Dsonar.projectDescription="${CI_PROJECT_DESCRIPTION}" \
-Dsonar.projectVersion="${SONAR_PROJECT_VERSION}" \
-Dsonar.sources="${SONAR_SOURCES}" \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.token="${SONAR_TOKEN}"
rules:
- when: on_success
🧪 Przykład użycia w pipeline
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/ast/sonarqube@$COMPONENT_VERSION_SONARQUBE
💪 sonarqube scanner:
variables:
SONAR_PROJECT_KEY: $CI_PROJECT_NAME
SONAR_PROJECT_NAME: "Project $CI_PROJECT_NAME"
SONAR_TOKEN: $SONAR_TOKEN
rules:
- when: on_success
1.2.4.2 - 🛠 Job template: 🔬 Trivy image scan (DAST)
🔬 Trivy image scan (DAST)
Job Trivy image scan (DAST)
umożliwia automatyczne skanowanie obrazów kontenerów pod kątem luk bezpieczeństwa przy użyciu narzędzia Trivy.
Szablon można uruchamiać w etapie integration-test
, aby upewnić się, że obraz nie zawiera znanych podatności o poziomie HIGH lub
CRITICAL.
Wymagania wstępne
- Trivy – wbudowany w używany obraz Dockera (ustawiany przez
inputs.docker_image
).
- Obraz kontenera, który ma zostać przeskanowany (ustawiany przez
inputs.container_to_analyze
).
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/buildah:1.0.0 |
Obraz Dockera zawierający narzędzie Trivy |
logo_url |
string |
https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
container_to_analyze |
string |
(puste) |
Pełna nazwa obrazu, który ma być skanowany |
🧬 Zmienne środowiskowe ustawiane w jobie
CONTAINER_IMAGE_TRIVY
– obraz Dockera Trivy (na podstawie inputs.docker_image
)
CONTAINER_TO_ANALYZE
– nazwa obrazu kontenera do przeskanowania (na podstawie inputs.container_to_analyze
)
TRIVY_NO_PROGRESS
– wyłącza pasek postępu w logach (domyślnie true
)
TRIVY_CACHE_DIR
– lokalny katalog cache Trivy (domyślnie .trivycache/
)
📤 Output
Job wykonuje następujące kroki:
-
Uruchomienie skanowania obrazu kontenera (CONTAINER_TO_ANALYZE
) z użyciem Trivy:
- Najpierw wyszukiwanie luk o poziomie HIGH – raport ostrzegawczy (
--exit-code 0
).
- Następnie wyszukiwanie luk o poziomie CRITICAL – pipeline zakończy się niepowodzeniem, jeśli takie wystąpią (
--exit-code 1
).
-
Wykorzystanie cache Trivy w katalogu .trivycache/
w celu przyspieszenia kolejnych skanów.
🧪 Dostępny job
🔬 trivy (dast)
Skanuje wskazany obraz kontenera i kończy pipeline, jeśli znajdzie luki o poziomie CRITICAL:
🔬 trivy (dast):
image: $CONTAINER_IMAGE_TRIVY
stage: integration-test
services:
- name: $CONTAINER_IMAGE_TRIVY
alias: buildah-dind
allow_failure: true
before_script:
- git config --global --add safe.directory ${CI_PROJECT_DIR}
- [ ! -z "${LOGO_URL}" ] && curl -s "${LOGO_URL}"
- !reference [.ast:trivy_input_variables]
script:
- trivy image --exit-code 0 --severity HIGH $CONTAINER_TO_ANALYZE
- trivy image --exit-code 1 --severity CRITICAL $CONTAINER_TO_ANALYZE
cache:
paths:
- .trivycache/
🧪 Przykład użycia w pipeline
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/ast/trivy@$COMPONENT_VERSION_TRIVY
🔬 trivy (dast):
allow_failure: true
variables:
CONTAINER_TO_ANALYZE: $CI_REGISTRY_IMAGE:$RELEASE_CANDIDATE_VERSION
rules:
- when: on_success
1.2.5 - containers
Komponentu odpowiedzialne za budowanie i publikacje kontenerów.
1.2.5.1 - 🛠 Job template: 🚀 Image bulder
🚀 Image bulder
Job Build & publish container image
umożliwia budowanie i publikację obrazów kontenerów w rejestrze Docker/GitLab z użyciem narzędzia Buildah. Szablon wspiera wieloetapowy proces: budowanie, publikowanie i testowanie obrazu. Idealny do wykorzystania w etapach build
, publish
i integration-test
w pipeline’ach CI/CD.
Wymagania wstępne
- Buildah – wbudowany w używany obraz Dockera (ustawiany przez
inputs.docker_image
).
- Dostęp do rejestru Docker/GitLab (
CI_REGISTRY
, CI_REGISTRY_USER
, CI_REGISTRY_PASSWORD
).
- Plik konfiguracyjny obrazu kontenera (
buildah_config_path
).
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/buildah:1.0.0 |
Obraz Dockera zawierający narzędzie Buildah |
logo_url |
string |
https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
buildah_config_path |
string |
config.yml |
Ścieżka do definicji obrazu kontenera w formacie YAML |
container_version |
string |
latest |
Wersja obrazu kontenera, który będzie budowany |
docker_test_script_path |
string |
container_test.sh |
Ścieżka do skryptu testowego uruchamianego w zbudowanym obrazie (job 🧪 test docker image ) |
🧬 Zmienne środowiskowe ustawiane w jobie
CONTAINER_IMAGE_BUILDAH
– obraz Dockera Buildah (na podstawie inputs.docker_image
)
LOGO_URL
– ścieżka do logo (na podstawie inputs.logo_url
)
CONTAINER_VERSION
– wersja obrazu (na podstawie inputs.container_version
)
FULL_IMAGE_NAME
– pełna nazwa obrazu: $CI_REGISTRY_IMAGE:$CONTAINER_VERSION
BUILDAH_CONFIG_FILE_PATH
– ścieżka do pliku konfiguracji Buildah (na podstawie inputs.buildah_config_path
)
DOCKER_TEST_SCRIPT_PATH
– skrypt testowy do uruchomienia w kontenerze
- Dodatkowe zmienne konfiguracyjne Buildah:
STORAGE_DRIVER
, BUILDAH_FORMAT
, BUILDAH_ISOLATION
, BUILDAH_STORAGE_ROOT
, BUILDAH_STORAGE_RUNROOT
📤 Output
Szablon wykonuje następujące kroki:
-
Budowanie obrazu kontenera na podstawie buildah_config_path
:
- Pobranie obrazu bazowego (
base_image
)
- Instalacja pakietów i certyfikatów
- Dodanie repozytoriów (
custom_repos
)
- Kopiowanie plików i ustawienie zmiennych środowiskowych
- Tworzenie użytkownika nie-root (opcjonalnie)
- Ustawienie
ENTRYPOINT
oraz CMD
-
Zapis obrazu do tarballa (container-image.tar
).
-
Publikacja obrazu w rejestrze Docker/GitLab (job 🌐 publish container image
).
-
Testowanie obrazu z wykorzystaniem skryptu testowego (job 🧪 test docker image
).
🧪 Dostępne joby
🚀 build container image
Buduje obraz kontenera na podstawie pliku konfiguracyjnego config.yml
Przykładowy plik config yml:
---
base_image: ubuntu:noble
labels:
maintainer: "Maciej Rachuna <rachuna.maciej@gmail.com>"
version: "1.0.0"
image_source: "https://gitlab.com/pl.rachuna-net/containers/terraform"
env:
DEBIAN_FRONTEND: noninteractive
TF_IN_AUTOMATION: "true"
LANG: C.UTF-8
before_build_commands:
## terraform docs
- curl -sLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.20.0/terraform-docs-v0.20.0-linux-amd64.tar.gz
- tar -xzf terraform-docs.tar.gz
- chmod +x terraform-docs
## terraform lint
- curl -sLo ./tflint_linux_amd64.zip https://github.com/terraform-linters/tflint/releases/download/v0.58.1/tflint_linux_amd64.zip
- unzip tflint_linux_amd64.zip
- chmod +x tflint
packages:
- bash
- curl
- git
- gnupg2
- jq
- libssl3
- lsb-release
- openssh-client
- ca-certificates
- gnupg
- terraform
custom_repos:
- name: hashicorp
key_url: https://apt.releases.hashicorp.com/gpg
key_path: /usr/share/keyrings/hashicorp-archive-keyring.gpg
repo_entry: >-
deb [arch=amd64 signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg trusted=yes] https://apt.releases.hashicorp.com noble main
extra_commands:
- chmod 777 /opt/scripts
- chmod 777 /opt/scripts/*
- terraform --version
- terraform-docs -v
- tflint --version
copy:
- source: scripts/
destination: /opt/scripts/
- source: terraform-docs
destination: /usr/local/bin/terraform-docs
- source: tflint
destination: usr/local/bin/tflint
user:
name: nonroot
shell: /bin/bash
home: /home/nonroot
chown: /opt/scripts/
entrypoint: "/opt/scripts/entrypoint.bash"
cmd: "/bin/bash"
🌐 publish container image
Publikuje zbudowany obraz do gitlab registry:
🧪 test docker image
Testuje opublikowany obraz kontenera uruchamiając w nim skrypt bashowy domyślnie container_test.sh
:
🧪 Przykład użycia w pipeline
---
default:
tags:
- process-ci
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/containers/image-builder@$COMPONENT_VERSION_CONTAINERS
🚀 build container image:
needs:
- job: 🕵 YAML lint
optional: true
- job: 🔬 Validate files (conftest)
- job: 🕵 Set Version
artifacts: true
stage: build
rules:
- when: on_success
🌐 publish container image:
stage: publish
variables:
CONTAINER_VERSION: 1.2.3
needs:
- job: 🕵 Set Version
artifacts: true
- job: 🚀 build container image
artifacts: true
rules:
- when: on_success
🧪 test docker image:
variables:
CONTAINER_VERSION: 1.2.3
needs:
- job: 📍 Publish Version
artifacts: true
- job: 🌐 publish container image
artifacts: true
rules:
- when: on_success
1.2.6 - infrastructure
Komponentu odpowiedzialne za zarządzanie infrastrukturą.
1.2.6.1 - 🛠 Job template: OpenTofu
🔍 Joby bazowe i walidacyjne dla OpenTofu
Joby .infrastructure:opentofu:base
oraz ich rozszerzenia pozwalają na spójną inicjalizację środowiska OpenTofu w GitLab CI, w tym przekazanie tokenów, nazw stanów, walidację oraz generowanie dokumentacji.
Wszystkie joby korzystają z jednolitego zestawu zmiennych wejściowych i mogą być używane w różnych etapach pipeline’a.
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/opentofu:2.0.0 |
Obraz Dockera z OpenTofu i niezbędnymi narzędziami |
logo_url |
string |
https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
tf_state_name |
string |
default |
Nazwa pliku stanu OpenTofu |
debug |
bool |
false |
Flaga debugowania (rozszerzone logi) |
🧬 Zmienne środowiskowe ustawiane w jobach
Komponent ustawia następujące zmienne w środowisku CI:
CONTAINER_IMAGE_OPENTOFU
– obraz Dockera OpenTofu (na podstawie inputs.docker_image
)
LOGO_URL
– ścieżka do logo (na podstawie inputs.logo_url
)
TF_STATE_NAME
– nazwa stanu OpenTofu
TF_VAR_gitlab_token
– token GitLab przekazywany do OpenTofu
DEBUG
– flaga debug
📤 Output
Joby wykonują:
- Pobranie i wyświetlenie logo (jeżeli
LOGO_URL
jest ustawiony).
- Wyświetlenie informacji o wejściowych parametrach.
- Inicjalizację środowiska OpenTofu (
tofu init
) oraz odpowiednie akcje (fmt
, validate
, tflint
, plan
, apply
).
Przykład logu:
===> 💾 OpenTofu Base Job - Parameters
┌──────────────────────────────┬───────────────────────────────────────────────────────┐
│ Variable │ Value │
├──────────────────────────────┼───────────────────────────────────────────────────────┤
│ TF_STATE_NAME │ default │
│ CONTAINER_IMAGE_OPENTOFU │ registry.gitlab.com/pl.rachuna-net/...:2.0.0 │
└──────────────────────────────┴───────────────────────────────────────────────────────┘
🧪 Dostępne joby
🕵 opentofu fmt
Sprawdza formatowanie plików OpenTofu:
🕵 opentofu fmt:
stage: validate
extends: ['.infrastructure:opentofu:base']
script:
- tofu fmt -recursive -check
✅ opentofu validate
Wykonuje walidację konfiguracji OpenTofu:
✅ opentofu validate:
stage: validate
extends: ['.infrastructure:opentofu:base']
script:
- !reference [.infrastructure:opentofu_init]
- tofu validate
✅ tflint
Uruchamia lintera tflint
:
✅ tflint:
stage: validate
extends: ['.infrastructure:opentofu:base']
script:
- tflint
Generuje dokumentację modułu Terraform:
✅ terraform-docs:
stage: validate
extends: ['.infrastructure:terraform:base']
script:
- terraform-docs md . > README.md
🧪 opentofu plan
Wykonuje plan wdrożenia OpenTofu:
🧪 opentofu plan:
stage: unit-test
extends: ['.infrastructure:opentofu:base']
script:
- tofu plan
💥 opentofu apply
Wdraża infrastrukturę OpenTofu:
💥 opentofu apply:
stage: deploy
extends: ['.infrastructure:opentofu:base']
script:
- tofu apply -auto-approve
🧪 Przykład użycia w pipeline
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/infrastructure/opentofu@$COMPONENT_VERSION_INFRASTRUCTURE
inputs:
docker_image: $CONTAINER_IMAGE_OPENTOFU
tf_state_name: production
debug: "true"
1.2.6.2 - 🛠 Job template: Terraform
🔍 Joby bazowe i walidacyjne dla Terraform
Joby .infrastructure:terraform:base
oraz ich rozszerzenia pozwalają na spójną inicjalizację środowiska Terraform w GitLab CI, w tym przekazanie tokenów, nazw stanów, walidację oraz generowanie dokumentacji.
Wszystkie joby korzystają z jednolitego zestawu zmiennych wejściowych i mogą być używane w różnych etapach pipeline’a.
Nazwa |
Typ |
Domyślna wartość |
Opis |
docker_image |
string |
registry.gitlab.com/pl.rachuna-net/containers/terraform:2.0.0 |
Obraz Dockera z Terraform i niezbędnymi narzędziami |
logo_url |
string |
https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
tf_state_name |
string |
default |
Nazwa pliku stanu Terraform |
debug |
bool |
false |
Flaga debugowania (rozszerzone logi) |
🧬 Zmienne środowiskowe ustawiane w jobach
Komponent ustawia następujące zmienne w środowisku CI:
CONTAINER_IMAGE_TERRAFORM
– obraz Dockera Terraform (na podstawie inputs.docker_image
)
LOGO_URL
– ścieżka do logo (na podstawie inputs.logo_url
)
TF_STATE_NAME
– nazwa stanu Terraform
TF_VAR_gitlab_token
– token GitLab przekazywany do Terraform
DEBUG
– flaga debug
📤 Output
Joby wykonują:
- Pobranie i wyświetlenie logo (jeżeli
LOGO_URL
jest ustawiony).
- Wyświetlenie informacji o wejściowych parametrach.
- Inicjalizację środowiska Terraform (
terraform init
) oraz odpowiednie akcje (fmt
, validate
, tflint
, plan
, apply
).
Przykład logu:
===> 💾 Terraform Base Job - Parameters
┌──────────────────────────────┬───────────────────────────────────────────────────────┐
│ Variable │ Value │
├──────────────────────────────┼───────────────────────────────────────────────────────┤
│ TF_STATE_NAME │ default │
│ CONTAINER_IMAGE_TERRAFORM │ registry.gitlab.com/pl.rachuna-net/...:2.0.0 │
└──────────────────────────────┴───────────────────────────────────────────────────────┘
🧪 Dostępne joby
Sprawdza formatowanie plików Terraform:
🕵 terraform fmt:
stage: validate
extends: ['.infrastructure:terraform:base']
script:
- terraform fmt -recursive -check
Wykonuje walidację konfiguracji Terraform:
✅ terraform validate:
stage: validate
extends: ['.infrastructure:terraform:base']
script:
- !reference [.infrastructure:terraform_init]
- terraform validate
✅ tflint
Uruchamia lintera tflint
:
✅ tflint:
stage: validate
extends: ['.infrastructure:terraform:base']
script:
- tflint
Generuje dokumentację modułu Terraform:
✅ terraform-docs:
stage: validate
extends: ['.infrastructure:terraform:base']
script:
- terraform-docs md . > README.md
Wykonuje plan wdrożenia Terraform:
🧪 terraform plan:
stage: unit-test
extends: ['.infrastructure:terraform:base']
script:
- terraform plan
Wdraża infrastrukturę Terraform:
💥 terraform apply:
stage: deploy
extends: ['.infrastructure:terraform:base']
script:
- terraform apply -auto-approve
🧪 Przykład użycia w pipeline
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/infrastructure/terraform@$COMPONENT_VERSION_INFRASTRUCTURE
inputs:
docker_image: $CONTAINER_IMAGE_TERRAFORM
tf_state_name: production
debug: "true"
1.3 - Definicja stages

Definicja stages
W ramach dyscypliny ustalono standard stages, w którym deweloper powinien się poruszać _stages/_definitions.yml
Przykładowa zawartość pliku:
---
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.
1.4 - ☠️ Wersjonowanie

Definicja stages
Racja – poprzednia odpowiedź była bardziej ogólna niż powinna. Skupmy się teraz na technicznej dokumentacji wersjonowania dokładnie w kontekście Twojego rysunku. Oto spójny opis, który możesz wkleić do dokumentacji:
Wersjonowanie w projekcie
W projekcie wykorzystujemy semantic-release do w pełni zautomatyzowanego nadawania wersji, tagowania oraz generowania changeloga. Proces opiera się na strukturze gałęzi main
/ develop
/ feature
oraz na konwencji commitów (Conventional Commits).
1. Gałęzie w repozytorium
-
main
– zawiera stabilne wydania produkcyjne.
- Każdy merge z
develop
powoduje wygenerowanie pełnego release (1.0.0
, 1.1.0
itd.).
-
develop
– zawiera kod przeznaczony do testów wewnętrznych.
- Każdy merge z gałęzi feature powoduje wygenerowanie pre-release (
1.1.0-dev.1
, 1.1.0-dev.2
itd.).
-
Gałęzie funkcjonalne (feat/<JIRA-ID>
) – zawierają zmiany pojedynczych funkcjonalności.
- Nie generują wersji samodzielnie.
- Wersja jest podbijana dopiero po merge do
develop
.
2. Jak semantic-release nadaje wersje?
-
Semantic-release analizuje commity od ostatniego taga.
-
Na podstawie typów commitów automatycznie decyduje o nowej wersji:
fix:
/ chore:
– patch (np. 1.0.0 → 1.0.1
)
feat:
– minor (np. 1.0.0 → 1.1.0
)
BREAKING CHANGE:
– major (np. 1.0.0 → 2.0.0
)
-
Dla develop
każda zmiana jest oznaczana jako pre-release z przyrostowym numerem dev:
1.1.0-dev.1
1.1.0-dev.2
-
Merge develop
→ main
tworzy pełny release:
1.1.0
3. Przykład na podstawie diagramu
-
Tag 1.0.0
istnieje na gałęzi main
.
-
Tworzymy gałąź develop
– kolejne zmiany są tu wersjonowane jako pre-release:
- Merge
feat/JIRA-1234
→ develop
:
wersja 1.1.0-dev.1
- Merge
feat/JIRA-2345
→ develop
:
wersja 1.1.0-dev.2
-
Gdy kod na develop
jest stabilny:
- Merge do
main
→ semantic-release tworzy pełny release:
wersja 1.1.0
oraz changelog.
4. Konfiguracja (.releaserc)
{
"branches": [
"main",
{ "name": "develop", "prerelease": "dev" }
],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/gitlab"
]
}
- Gałąź
main
generuje pełne wydania.
- Gałąź
develop
generuje pre-release z dopiskiem -dev.X
.
Czy chcesz, żebym przygotował wersję dokumentacji z diagramem w SVG/PNG, gdzie będzie oznaczony każdy krok (merge, tag, pre-release)?
Mogę też dodać sekcję o commitach (wzorce feat
, fix
itd.) albo schemat krok-po-kroku pipeline’u CI/CD (np. GitLab CI). Chcesz, żeby to była pełna sekcja “Wersjonowanie” w stylu dokumentacji technicznej projektu?
gitGraph
commit id: "latest" tag: "1.0.0"
branch "develop"
branch "feat/JIRA-1234"
branch "feat/JIRA-2345"
checkout "develop"
checkout "feat/JIRA-1234"
commit id: "feat: JIRA-1234"
checkout develop
merge "feat/JIRA-1234" id: "FEAT-1234" tag: "1.1.0-dev.1"
checkout main
checkout "feat/JIRA-2345"
commit id: "fix: JIRA-2345"
checkout develop
merge "feat/JIRA-2345" id: "FEAT-2345" tag: "1.1.0-dev.2"
checkout main
merge "develop" id: "New Version" tag: "1.1.0"
gitGraph
commit id: "latest" tag: "1.0.0"
branch "develop"
branch "feat/JIRA-1234"
branch "feat/JIRA-2345"
checkout "develop"
checkout "feat/JIRA-1234"
commit id: "feat: JIRA-1234"
checkout develop
merge "feat/JIRA-1234" id: "FEAT-1234" tag: "1.0.0-dev.1"
checkout main
checkout "feat/JIRA-2345"
commit id: "feat: JIRA-2345"
checkout develop
merge "feat/JIRA-2345" id: "FEAT-2345" tag: "1.0.0-dev.2"
checkout main
merge "develop" id: "New Feat" tag: "1.1.0"
branch "hotfix"
checkout "hotfix"
commit id: "fix: JIRA-9999"
checkout main
merge "hotfix" id: "Hotfix" tag: "1.1.1"
2 - 🌐 Gitlab pages

🌐 Gitlab pages
Celem niniejszego dokumentu jest przedstawienie kompletnego procesu uruchomienia strony internetowej opartej na MkDocs za pomocą GitLab Pages oraz podłączenia jej do własnej domeny, np. docs.rachuna-net.pl lub rachuna-net.pl.
Wymagania
- GitLab repository z plikami markdown zgodnymi z framweork gohugo i template docsy
- Dostęp do panelu zarządzania DNS
1. Przygotowanie repozytorium z dokumentacją
-
Zainicjalizuj projekt MkDocs (jeśli jeszcze nie istnieje):
hugo new my-project
cd my-project
-
Dodaj plik .gitlab-ci.yml
do repozytorium:
image: $CONTAINER_IMAGE_GOHUGO
🚀 build gohugo project:
stage: build
script:
- npm install
- hugo
artifacts:
paths:
- public
rules:
- when: on_success
pages:
stage: deploy
dependencies:
- 🚀 build gohugo project
script:
- echo "publish pages"
pages: true
rules: !reference [.rule:deploy:gohugo, rules]
environment:
name: Production
url: https://$CI_PROJECT_NAMESPACE.gitlab.io/
only:
- main
-
Wypchnij zmiany do GitLaba:
git add .
git commit -m "Init hugo site"
git push origin main
-
Po chwili strona powinna być dostępna pod adresem domyślnym:
https://<nazwa-użytkownika>.gitlab.io/<nazwa-repozytorium>
2. Podłączenie subdomeny docs.rachuna-net.pl
-
Repozytorium → Settings → Pages → kliknij New Domain

-
Ustawienie domeny np. docs.rachuna-net.pl
-
GitLab wygeneruje dwa rekordy DNS:
-
ustawienie rekordów do strefy DNS domeny.
-
GitLab automatycznie zweryfikuje rekordy i wygeneruje certyfikat SSL (Let’s Encrypt)
- Wystaw swoją aplikacje na gitlab-pages ✅ https://docs-7c5e90.gitlab.io
- W ustawieniach pages należy wybrać
Deploy
→ page
→ new domain
:

Po wypełnieniu formularza otrzymasz wpisy do rekordów DNS
docs.rachuna-net.pl ALIAS pl.rachuna-net.gitlab.io.
_gitlab-pages-verification-code.docs.rachuna-net.pl TXT gitlab-pages-verification-code=XYZ
- Po chwili następuje aktualizacja domeny
- Utworzenie Certyfikatu SSL z Let’s Encrypt
3. Podłączenie domeny głównej
Dla domen głównych nie można użyć ALIAS/CNAME
, należy użyć rekordu A
.
-
W ustawieniach Pages → New Domain
→ dodaj rachuna-net.pl
-
Skonfiguruj DNS:
rachuna-net.pl. A 35.185.44.232
_gitlab-pages-verification-code.rachuna-net.pl. TXT gitlab-pages-verification-code=<kod>
-
Po propagacji DNS i weryfikacji – certyfikat SSL zostanie wystawiony automatycznie.
4. Efekt końcowy
Po wykonaniu powyższych kroków, strona MkDocs będzie dostępna pod Twoją własną domeną z certyfikatem SSL, np.:
https://docs.rachuna-net.pl
Przydatne linki
3 - Conventional Commits
🖊️ Standard opisywania commitów
Conventional Commits w organizacji rachuna-net
. Wdrożenie tej konwencji umożliwia uporządkowaną historię zmian, automatyzację wersjonowania i łatwiejszą współpracę zespołową.
Wiadomość commita powinna być zgodna z poniższym schematem:
<typ>[!][(zakres)]: krótki opis zmiany
Przykłady
feat: dodano obsługę logowania
fix(auth): naprawiono błąd walidacji tokenu
refactor!: przebudowano system autoryzacji (breaking change)
chore(ci): aktualizacja pipeline’a GitLab CI
Typy commitów
Typ |
Opis |
feat |
Nowa funkcjonalność |
fix |
Poprawka błędu |
docs |
Zmiany w dokumentacji |
style |
Formatowanie (np. spacje, przecinki) |
refactor |
Refaktoryzacja kodu (bez zmiany zachowania) |
test |
Dodanie lub zmiana testów |
chore |
Zadania techniczne (np. zmiany w CI/CD) |
params |
[dodane w organizacji pl.rachuna-net ] - Parametryzacja |
Breaking changes
Aby oznaczyć zmianę łamiącą kompatybilność wsteczną, należy dodać wykrzyknik (!
) po typie commita.
git commit -m 'refactor!: zmieniono sposób uwierzytelniania'
Korzyści ze stosowania
- ✅ Spójna i czytelna historia commitów
- ✅ Automatyczne generowanie changelogów
- ✅ Wsparcie dla
semantic-release
i automatycznego wersjonowania
- ✅ Łatwiejsze code review i analiza zmian
- ✅ Możliwość automatycznej walidacji commitów w CI/CD
Podsumowanie
Wdrożenie Conventional Commits to szybki krok w stronę lepszej automatyzacji, przejrzystości i jakości pracy w projektach GitLab. Rekomendujemy uwzględnienie tej konwencji w każdym nowym repozytorium oraz integrację z commitlint
, semantic-release
i husky
.
regexp:
(build|chore|ci|docs|params|feat|fix|perf|refactor|style|test|revert|merge|release|hotfix|fixup|squash|wip|BREAKING CHANGE)(\\(.+\\))?: .+