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

Return to the regular view of this page.

iac-gitlab

IAC do zarządzania środowiskiem GitLab.

Repozytorum: iac-gitlab

Repozytorium zawierające infrastrukturę jako kod (IaC) do zarządzania środowiskiem GitLab przy użyciu OpenTofu. Umożliwia automatyzację tworzenia, konfiguracji i utrzymania zasobów 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}

Przykładowy układ plików

Jak można zauważyć katalogi i pliki odzwierciedlają ułożenie repozytoriów w rzeczywistości.

.
├── data
│   ├── allowed_avatar_group_types.json
│   ├── allowed_avatar_project_types.json
│   ├── allowed_project_types.json
│   ├── group_badges.json
│   └── labels.json
├── _data.tf
├── images
│   ├── group
│   │   └── *.png
│   └── project
│       └── *.png
├── _locals.tf
├── pl.rachuna-net
│   ├── apps
│   │   ├── docs.tf
│   │   └── _locals.tf
│   ├── apps.tf
│   ├── cicd
│   │   ├── gitlab-ci.tf
│   │   └── _locals.tf
│   ├── cicd.tf
│   ├── containers
│   │   ├── buildah.tf
│   │   ├── gohugo.tf
│   │   ├── _locals.tf
│   │   ├── opentofu.tf
│   │   ├── python.tf
│   │   ├── semantic-release.tf
│   │   └── trivy.tf
│   ├── containers.tf
│   ├── infrastructure
│   │   ├── _locals.tf
│   │   ├── opentofu
│   │   │   ├── iac-gitlab.tf
│   │   │   ├── _locals.tf
│   │   │   ├── modules
│   │   │   │   ├── gitlab-group.tf
│   │   │   │   ├── gitlab-project.tf
│   │   │   │   └── _locals.tf
│   │   │   └── modules.tf
│   │   └── opentofu.tf
│   ├── infrastructure.tf
│   └── _locals.tf
├── pl.rachuna-net.tf
└── _providers.tf

1 - Grupy repozytoriów

Tworzenie grupy repozytoriów w GitLab za pomocą OpenTofu

Niniejsza sekcja dokumentacji opisuje proces tworzenia grupy repozytoriów w GitLab przy użyciu OpenTofu. Prezentowane podejście umożliwia automatyczne zarządzanie strukturą repozytoriów, co wspiera podejście Infrastructure as Code (IaC).

Repozytorium GitLab zawierające definicję
🔗 GitLab: pl.rachuna-net/infrastructure/opentofu/iac-gitlab

Repozytorium modułu opentofu - gitlab-group
🔗 GitLab: pl.rachuna-net/infrastructure/opentofu/modules/gitlab-group

Korzyści wynikające z użycia OpenTofu

OpenTofu pozwala na:

  • Automatyzację tworzenia i zarządzania grupami repozytoriów,
  • Wersjonowanie konfiguracji, co ułatwia kontrolę zmian,
  • Powtarzalność konfiguracji, eliminując błędy manualne.

Definiowanie grupy w OpenTofu

Aby utworzyć grupę repozytoriów w GitLab, należy dodać odpowiednią definicję do pliku konfiguracyjnego OpenTofu.

Przykładowy plik konfiguracyjny OpenTofu

Definicja grupy

📄 Ścieżka pliku: pl.rachuna-net/containers.tf

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/"
}

Definicja parametrów dla dzieci

📄 Ścieżka pliku: pl.rachuna-net/containers/_locals.tf

locals {
  parent_name  = "pl.rachuna-net/containers"
  project_type = "container"
}

2 - Repozytorium kodu

Tworzenie repozytorium w GitLab za pomocą OpenTofu

Niniejsza sekcja dokumentacji opisuje proces tworzenia repozytoriów w GitLab przy użyciu OpenTofu. Prezentowane podejście umożliwia automatyczne zarządzanie repozytoriami, co wspiera podejście Infrastructure as Code (IaC).

Repozytorium GitLab zawierające definicję
🔗 GitLab: pl.rachuna-net/infrastructure/opentofu/iac-gitlab

Repozytorium modułu opentofu - gitlab-group
🔗 GitLab: pl.rachuna-net/infrastructure/opentofu/modules/gitlab-project

Korzyści wynikające z użycia OpenTofu

OpenTofu pozwala na:

  • Automatyzację tworzenia i zarządzania grupami repozytoriów,
  • Wersjonowanie konfiguracji, co ułatwia kontrolę zmian,
  • Powtarzalność konfiguracji, eliminując błędy manualne.

Definiowanie grupy w OpenTofu

Aby utworzyć repozytorium w GitLab, należy dodać odpowiednią definicję do pliku konfiguracyjnego OpenTofu.

📄 Ścieżka pliku: pl.rachuna-net/containers/opentofu

module "opentofu" {
  source = "git@gitlab.com:pl.rachuna-net/infrastructure/opentofu/modules/gitlab-project.git?ref=v1.0.0"

  name               = "opentofu"
  archived           = false
  description        = "Obraz Dockerowy z narzędziem opentofu."
  visibility         = "public"
  tags               = ["docker", "opentofu"]
  avatar             = "opentofu"
  parent_group       = local.parent_name
  project_type       = "container"
  build_git_strategy = "clone"
  gitlab_ci_path     = "containers/docker.yml@pl.rachuna-net/cicd/gitlab-ci"

  # sonarqube
  is_enabled_sonarqube       = true
  sonarqube_cloud_project_id = "pl.rachuna-net_opentofu"

  # mirror to github
  mirror_url = format(
    "https://%s:%s@github.com/%s/%s.git",
    data.vault_kv_secret_v2.github.data["owner"],
    data.vault_kv_secret_v2.github.data["token"],
    data.vault_kv_secret_v2.github.data["owner"],
    "pl.rachuna-net.containers.opentofu"
  )

  variables = {
    PUBLISH_VAULT_SECRET_PATH = {
      description = "Ścieżka do sekrety Vault, gdzie będą publikowane zmienne środowiskowe",
      value       = "pl.rachuna-net/containers/opentofu:CONTAINER_IMAGE_OPENTOFU"
    }
    PUBLISH_VAULT_VALUE_VARIABLE = {
      description = "Nazwa zmiennej środowiskowej, która będzie publikowana w Vault",
      value       = "CONTAINER_IMAGE_VERSION"
    }
  }
}