Automatyczne zarządzanie repozytoriami

IAC do zarządzania środowiskiem GitLab.

OpenTofu coraz częściej wykorzystywany jest nie tylko do budowy infrastruktury chmurowej, lecz także do zarządzania całym ekosystemem usług.
W repozytorium iac-gitlab przygotowałem modułowy zestaw definicji, który pozwala w deklaratywny sposób tworzyć i utrzymywać grupy oraz projekty w GitLabie.


Po co IaC dla GitLaba?

  • Automatyzacja: grupy i projekty tworzą się automatycznie na podstawie kodu.
  • Powtarzalność: każda zmiana jest opisana w repozytorium, a tofu plan pokazuje różnice.
  • Rozliczalność: pełna historia zmian wraz z informacją kto, gdzie i kiedy je zlecił.
  • Porządek: struktura katalogów odpowiada strukturze GitLaba, co ułatwia nawigację i odnalezienie definicji konkretnej grupy czy projektu.

Jak zbudowane jest repozytorium?

Struktura katalogów odzwierciedla hierarchię GitLaba:

iac-gitlab
├── data/                # listy do walidacji (typy projektów, avatary, etykiety)
├── pl.rachuna-net/      # główna grupa i jej podgrupy
│   ├── containers/      # definicje projektów kontenerowych
│   ├── cicd/            # ustawienia CI/CD
│   └── infrastructure/  # infrastruktura (np. opentofu)
└── _providers.tf        # konfiguracja providerów (m.in. GitLab)

Architektura rozwiązania

flowchart TB
 subgraph s1["opentofu module"]
        n2["gitlab-group"]
        n1("gitlab-project")
  end
    A["iac-gitlab"] --> n1
    A --> n2
    n2@{ shape: rounded}

Tworzenie grupy repozytoriów

Definicja grupy korzysta z modułu gitlab-group:

module "_containers" {
  source         = "git@gitlab.com:pl.rachuna-net/infrastructure/opentofu/modules/gitlab-group.git?ref=v1.0.0"
  name           = "containers"
  description    = "Repozytoria z obrazami kontenerowymi."
  parent_group   = local.parent_name
  visibility     = "public"
  default_branch = "main"
  avatar         = "containers"
}

module "containers" {
  source = "./containers/"
}

Pierwszy moduł tworzy grupę, a drugi ładuje definicje jej podprojektów. W pliku _locals.tf przechowuję wspólne parametry, aby uniknąć powielania konfiguracji.


Tworzenie projektu

Moduł gitlab-project umożliwia definiowanie parametrów projektu:

module "opentofu" {
  source        = "git@gitlab.com:pl.rachuna-net/infrastructure/opentofu/modules/gitlab-project.git?ref=v1.0.0"
  name          = "opentofu"
  description   = "Obraz Dockerowy z narzędziem opentofu."
  visibility    = "public"
  parent_group  = local.parent_name
  project_type  = "container"
  avatar        = "opentofu"
}

Jak pracować z iac-gitlab w praktyce?

  1. Dodaj definicję grupy lub projektu w odpowiednim katalogu.
  2. Wyślij Merge Request — pipeline wykona tylko plan
  3. Po mergu GitLab automatycznie tworzy lub aktualizuje grupy, projekty, etykiety, avatary oraz zmienne CI.

Co jeszcze znajduje się w repozytorium?

  • data/allowed_* — walidacja dozwolonych typów projektów i avatarów; spina IaC z politykami organizacji.
  • images/ — katalog z avatarami dla grup i projektów.

Szybki start

Last modified December 19, 2025: docs: Update (72bba37)