🛠 Job template: Terraform
🔍 Joby bazowe i walidacyjne dla Terraform
2 minute read
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 podstawieinputs.docker_image
)LOGO_URL
– ścieżka do logo (na podstawieinputs.logo_url
)TF_STATE_NAME
– nazwa stanu TerraformTF_VAR_gitlab_token
– token GitLab przekazywany do TerraformDEBUG
– 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
🕵 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"