🛠 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.


⚙️ Parametry wejściowe (inputs)

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ą:

  1. Pobranie i wyświetlenie logo (jeżeli LOGO_URL jest ustawiony).
  2. Wyświetlenie informacji o wejściowych parametrach.
  3. 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

🕵 terraform fmt

Sprawdza formatowanie plików Terraform:

🕵 terraform fmt:
  stage: validate
  extends: ['.infrastructure:terraform:base']
  script:
    - terraform fmt -recursive -check

✅ terraform validate

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

✅ terraform-docs

Generuje dokumentację modułu Terraform:

✅ terraform-docs:
  stage: validate
  extends: ['.infrastructure:terraform:base']
  script:
    - terraform-docs md . > README.md

🧪 terraform plan

Wykonuje plan wdrożenia Terraform:

🧪 terraform plan:
  stage: unit-test
  extends: ['.infrastructure:terraform:base']
  script:
    - terraform plan

💥 terraform apply

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"
Last modified August 14, 2025: feat!: DEVOPS-123 Zmiana mkdocs na hugo (660375f)