3.3 KiB
3.3 KiB
Ticket 0010: report-service/ — retention CronJob
Vaihe: 10/12
Status: pending
Feature branch: feature/0010-report-service-retention-cronjob
TDD required: Yes
Feature file required: No
Required context:
docs/test-plan/tdd-guide.md- Skills:
tdd,implementation,clean-code,bash-script
TDD — Red-Green-Refactor
Red
Kirjoita tests/retention-cleanup.bats mock-MinIO:a ja mock-Gitea API:a vasten:
retention-cleanup.sh --dry-runlistaa poistettavat objektit- Yli 90 vrk vanha feature-build → merkitään poistettavaksi
- Tagattu commit → ei merkitä poistettavaksi
keepMin: 3 uusinta säilyy branchista- ConfigMap-pohjainen retention:
retention.yamlluetaan oikein
bats tests/retention-cleanup.bats
# FAIL
Green
Toteuta report-service/retention-cleanup.sh + CronJob.yaml + ConfigMap.yaml.
bats tests/retention-cleanup.bats
# PASS
Refactor
Parametrisoi retention-säännöt, paranna lokitusta.
DoD
tests/retention-cleanup.bats— kaikki testit läpireport-service/retention-cleanup.shtoimii --dry-run-tilassareport-service/CronJob.yaml— schedule0 3 * * *report-service/ConfigMap.yaml— retention.yaml oikea muoto- Aika-, branch-, tagi- ja keepMin-säännöt toimivat
Toiminto
Kubernetes CronJob, joka ajaa siivousskriptin päivittäin. Skripti lukee ConfigMap-pohjaisen retention policyn ja poistaa vanhentuneet raportit MinIO:sta.
Artefaktit
report-service/retention-cleanup.sh
Skripti joka:
- Listaa kaikki bucketin objektit (
mc ls --recursive) - Parsii polusta
repo_slugjacommit_short - Hakee Gitea API:sta commitin metadata (
GET /api/v1/repos/{owner}/{repo}/commits/{sha}→ branch, onko tagattu) - Soveltaa ConfigMapin retention-sääntöjä
- Poistaa vanhentuneet (
mc rm)
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: minio-report-retention
data:
retention.yaml: |
rules:
- branch: "master"
maxAgeDays: 365
keepMin: 20
- branch: "feature/*"
maxAgeDays: 90
keepMin: 5
- tagged: true
maxAgeDays: -1 # ei koskaan
keepMin: -1
- default:
maxAgeDays: 90
keepMin: 3
CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: minio-report-cleanup
spec:
schedule: "0 3 * * *" # kerran päivässä klo 03:00
jobTemplate:
spec:
template:
spec:
containers:
- name: cleanup
image: minio/mc:latest
command: ["/scripts/retention-cleanup.sh"]
volumeMounts:
- name: config
mountPath: /etc/retention
- name: script
mountPath: /scripts
volumes:
- name: config
configMap:
name: minio-report-retention
- name: script
configMap:
name: minio-cleanup-script
Verifiointi
- Aja
retention-cleanup.sh--dry-run → listaa poistettavat objektit - Tarkista: yli 90 vrk vanha feature-build → merkitään poistettavaksi
- Tarkista: tagattu commit → ei merkitä poistettavaksi
- Tarkista:
keepMin-säännön tuorein 3 säilyy
Viitteet
docs/report-hosting.md— Retention policydocs/architecture.md—report-service/-moduuli