Skip to content
GitLabGitHub

Zarządzanie projektami w gitlab

W poprzednim poście opisałem jak zarządzać grupami za pomocą opentofu. Dziś opowiem jak to robić z projektami.


Wymagania

  • zainstalowany opentofu
  • repozytorium iac-gitlab z zestawem definicji, który pozwala w deklaratywny sposób tworzyć i utrzymywać grupy oraz projekty w GitLabie.
  • Dwa moduły:

  1. Wydanie wersji vagrat 1.1.0

  2. Napisanie logiki dla modułu gitlab-project

    Section titled “Napisanie logiki dla modułu gitlab-project”

    Wydanie wersji v1.0.0

  3. Utworzenie definicji w iac-gitlab-com dla grup

    Section titled “Utworzenie definicji w iac-gitlab-com dla grup”

Jak zbudowane jest repozytorium iac-gitlab-com ?

Section titled “Jak zbudowane jest repozytorium iac-gitlab-com ?”

Struktura katalogów odzwierciedla hierarchię GitLaba:

iac-gitlab-com
├── data/                # listy do walidacji (typy projektów, avatary, etykiety)
├── pl.rachuna-net/      # główna grupa i jej podgrupy
│   ├── apps/        
│   │   └── docs.tf
│   ├── artifacts/
│   │    └── opentofu/
│   │         ├── gitlab-group.tf
│   │         └── gitlab-project.tf
│   ├── devtools/        
│   │   └── vagrant.tf
│   └── infrastructure/
│       └── gitlab-com/
│           └── iac-gitlab.tf
└── _providers.tf        # konfiguracja providerów (m.in. GitLab)

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


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

  name        = "iac-gitlab-com"
  description = "IAC do zarządzania obiektami GitLab (gitlab.rachuna-net.pl)."
  visibility  = "public"
  avatar      = "opentofu"

  parent_group = local.parent_name
  project_type = "opentofu"

  ci_schedules = [
    {
      name          = "Nightly"
      description   = "Nightly patch management"
      ref           = "main"
      cron          = "0 1 * * *"
      cron_timezone = "Europe/Warsaw"
      variables     = {}
    }
  ]
}