Applicazioni con più artefatti#
Un'applicazione è spesso fatta di più artefatti rilasciati separatamente: un frontend, un backend, le migrazioni del database. Ogni artefatto è una release a sé: configurazione di ambiente, coda, inventario, rollback, promozione e retention sono per applicazione, artefatto e ambiente. L'artefatto è artifact.name, obbligatorio in ogni descrittore.
# backend
application: shop
environment: prod
artifact: {type: war, name: shop-api, version: 1.5.0, source: https://repo.example.com/shop-api-1.5.0.war}
---
# frontend
application: shop
environment: prod
artifact: {type: tgz, name: shop-web, version: 3.2.0, source: https://repo.example.com/shop-web-3.2.0.tgz}
| Per applicazione, artefatto e ambiente | |
|---|---|
| Release in esercizio (inventario) | una voce per artefatto |
Partizione della coda (environment_concurrency) |
<app>+<artifact>/<env>: artefatti diversi si rilasciano in parallelo |
Rollback, promozione, requires |
dell'artefatto |
Retention keep_releases |
per artefatto |
| Nome di default delle schedule | <app>-<artifact>-<env> |
artifact.name accetta lettere, cifre, ., _, : e - (al più 128 caratteri, iniziale alfanumerica): entra nelle partizioni della coda, nelle chiavi e nei percorsi. Il percorso di un'immagine va in source. Un'applicazione con un solo artefatto di solito gli dà il nome dell'applicazione.
L'ordine tra artefatti (migrazioni, poi backend, poi frontend) si esprime con after o con una release composta.
Configurazione di ambiente per artefatto#
I template dei provider contengono {artifact}: un documento per artefatto, senza nulla di condiviso (target e segreti comuni si ripetono in ogni documento).
envconfig:
required: true # un documento mancante è un errore: intercetta un artefatto scritto male
providers:
- name: default
type: file
file:
path: "envconfig/{tenant}/{application}/{artifact}/{environment}.yml"
# consul:
# key: "manent/{tenant}/{application}/{artifact}/{environment}"
- Tenant:
untenantedè il tenant delle applicazioni che nessun tenant elenca; i documenti delle applicazioni di un tenant stanno sotto il suo nome. - Nomi: un
artifact.nameche non può stare in un percorso o in una chiave (es.team/api) è rifiutato. - Un template senza
{artifact}legge un documento per applicazione/ambiente, condiviso da tutti i suoi artefatti. descriptor_policy.secret_refsaccetta{artifact}:vault:secret/{tenant}/{application}/{artifact}/{environment}/*.manent env validate --artifact <nome>verifica un documento candidato di un artefatto.
Rollback, promozione e inventario#
manent inventory -a shop # una voce per artefatto
manent rollback -a shop -e prod --artifact shop-api # -A in breve
manent promote -a shop --from staging --to prod -A shop-web
manent list -a shop -A shop-db
manent dora -a shop -A shop-api
Con un solo artefatto nell'ambiente --artifact si può omettere; con più di uno la richiesta è rifiutata e l'errore li elenca. In una release composta con onFailure: rollback ogni deploy viene riportato indietro sul proprio artefatto. Gli import della release in esercizio (imports.<nome>.current) accettano anche artifact, obbligatorio se l'applicazione ha più artefatti in quell'ambiente.
Permessi e governance per artefatto#
Binding, regole e freeze accettano un elenco opzionale di pattern su artifact.name:
rbac:
bindings:
- groups: [web-team]
role: deployer
applications: [shop]
environments: ["*"]
artifacts: ["shop-web*"] # solo i deploy di questi artefatti
governance:
rules:
- name: migrazioni
applications: ["*"]
environments: [prod]
artifacts: ["*-db"]
approvals: {required: 2}
freezes:
- name: freeze-frontend
applications: [shop]
environments: [prod]
artifacts: [shop-web]
from: 2026-12-20T00:00:00Z
to: 2027-01-07T00:00:00Z
- I binding con
artifactsvalgono solo per i deploy di quegli artefatti, mai per le azioni sull'intero ambiente (freeze, elenco delle schedule): per quelle serve un binding senzaartifacts. Lo stesso campo è accettato nei grant di una policy dei permessi (data.manent.rbac.bindings,grants). - Le regole con
artifactsvalgono solo per quegli artefatti; in Rego la libreria leggeinput.artifact.name. - I freeze con
artifactsbloccano solo quegli artefatti; dove l'artefatto non è noto (es. gli step personalizzati che controllano l'ambiente) un freeze parziale vale comunque.manent freeze add -A shop-webne crea uno a runtime.
Rinominare un artefatto#
Un artifact.name nuovo è una release nuova, senza storia. Per conservarla si rinomina l'artefatto nello storico:
manent-server -c manent.yml admin rename-artifact [-t <tenant>] -a shop --from api --to shop-api [--dry-run]
Il comando cambia l'attributo artifact dei deploy conclusi (e delle loro approvazioni e attese): inventario, rollback e promozioni seguono il nuovo nome, e un rollback rilascia la versione vecchia con il nuovo nome. I workflow non conclusi sono elencati in pending e lasciati invariati: va rilanciato quando terminano. I processi dell'API ricostruiscono l'inventario entro 10 minuti. Le schedule conservano il descrittore con cui sono state create.