This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
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 - Pipelines

Lista pielines
Poniżej znajduje się lista stworzonych procesów
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.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.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.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.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.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.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.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) |
2 - Components

Lista komponentów
Poniżej znajduje się lista stworzonych komponentów
2.1 - prepare
Komponent do przygotowania procesu CI/CD.
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
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
2.2 - validate
Komponent do automatycznej walidacji jakości i poprawności kodu w procesach CI/CD.
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.
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
.
2.3 - release
Komponent do zarządzania wersjami i publikacji bibliotek i aplikacji.
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
2.4 - Application Security Testing

- Application Security Testing
Komponent do analizy pod kątem bezpiecezństwa (Application Security Testing).
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
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
2.5 - containers
Komponentu odpowiedzialne za budowanie i publikacje kontenerów.
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
2.6 - infrastructure
Komponentu odpowiedzialne za zarządzanie infrastrukturą.
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"
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"
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.
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"