From fd17be5408f5929e59bd049bc3725bf95b28ff30 Mon Sep 17 00:00:00 2001 From: Joelbrit0 Date: Thu, 29 Jan 2026 15:21:07 -0300 Subject: [PATCH] fix: harden GitOps deploy and rollback --- .gitea/workflows/deploy-api.yaml | 12 +++++++----- KUBERNETES.md | 10 +++++----- WORKFLOWS.md | 9 ++++++--- k8s/argocd/application-prod.yaml | 10 +++++++++- k8s/base/deployment.yaml | 11 ++++++++++- k8s/overlays/prod/deployment-prod-patch.yaml | 6 ++++++ k8s/overlays/prod/kustomization.yaml | 2 ++ 7 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 k8s/overlays/prod/deployment-prod-patch.yaml diff --git a/.gitea/workflows/deploy-api.yaml b/.gitea/workflows/deploy-api.yaml index 93e9527..539e483 100644 --- a/.gitea/workflows/deploy-api.yaml +++ b/.gitea/workflows/deploy-api.yaml @@ -24,16 +24,18 @@ jobs: docker push "$IMAGE_NAME:$SHA_TAG" docker push "$IMAGE_NAME:latest" - - name: Update Kubernetes Manifest + - name: Update Manifest and Push to Git run: | SHA_TAG=$(echo ${{ gitea.sha }} | cut -c1-7) IMAGE_NAME="git.simplifiquehc.com.br/simplifique/vendaweb-api" - sed -i "s|image: $IMAGE_NAME:.*|image: $IMAGE_NAME:$SHA_TAG|g" k8s/base/deployment.yaml + MANIFEST_FILE="k8s/overlays/prod/deployment-image-digest-patch.yaml" - git config --global user.name "Gitea Action" - git config --global user.email "actions@simplifiquehc.com.br" + sed -i "s|image: $IMAGE_NAME:.*|image: $IMAGE_NAME:$SHA_TAG|g" "$MANIFEST_FILE" - git add k8s/base/deployment.yaml + git config user.name "Gitea Action" + git config user.email "actions@simplifiquehc.com.br" + + git add "$MANIFEST_FILE" git commit -m "chore: update image tag to $SHA_TAG [skip ci]" git push origin main diff --git a/KUBERNETES.md b/KUBERNETES.md index a948493..80892a2 100644 --- a/KUBERNETES.md +++ b/KUBERNETES.md @@ -31,9 +31,9 @@ O diretório `base` contém as definições padrão dos recursos que são comuns ### Deployment (`deployment.yaml`) - **Nome**: `vendaweb-api` -- **Replicas**: 15 (Configuração base) -- **Imagem**: `172.35.0.216/library/vendaweb-api:latest` -- **Porta do Container**: 8065 +- **Replicas**: 3 (Base) / 15 (Produção via overlay) +- **Imagem**: `git.simplifiquehc.com.br/simplifique/vendaweb-api:` +- **Porta do Container**: 8067 - **Resources**: - Requests: CPU 100m, Memory 256Mi - Limits: CPU 500m, Memory 512Mi @@ -52,7 +52,7 @@ O diretório `base` contém as definições padrão dos recursos que são comuns A sobreposição de produção personaliza a configuração base para o ambiente produtivo. - **Namespace**: `vendaweb-prod` -- **Patches**: Aplica modificações específicas (ex: digest da imagem, configurações específicas de serviço) via `kustomization.yaml`. +- **Patches**: Aplica modificações específicas (ex: tag da imagem, NodePort do service, replicas) via `kustomization.yaml`. ## Deploy com ArgoCD (`k8s/argocd`) @@ -68,7 +68,7 @@ O deploy é gerenciado pelo ArgoCD, que sincroniza o estado do cluster com o rep - Path: `k8s/overlays/prod` (Aponta para o overlay de produção) - **Destino (Destination)**: - Cluster: `https://kubernetes.default.svc` - - Namespace: `vendaweb-api` (Nota: O patch define `vendaweb-prod`, verifique a consistência) + - Namespace: `vendaweb-prod` - **Sync Policy**: Automatizado com `selfHeal` ativado e criação automática de namespace. --- diff --git a/WORKFLOWS.md b/WORKFLOWS.md index 5c4315a..d424509 100644 --- a/WORKFLOWS.md +++ b/WORKFLOWS.md @@ -14,7 +14,7 @@ Os workflows estão definidos no diretório `.gitea/workflows/`. O principal wor Este workflow é acionado automaticamente no evento: -- `push`: Em qualquer branch (configuração atual `on: [push]`). +- `push`: Na branch `main`. ### Jobs @@ -39,10 +39,13 @@ Este job é responsável por construir a imagem Docker e enviá-la para o regist 3. **Build e Push** - Constrói a imagem Docker da aplicação. - Tags geradas: - - `172.35.0.216/library/vendaweb-api:$TAG` (onde `$TAG` é o SHA do commit do Gitea `gitea.sha`) - - `172.35.0.216/library/vendaweb-api:latest` + - `git.simplifiquehc.com.br/simplifique/vendaweb-api:$TAG` (onde `$TAG` é o SHA curto do commit) + - `git.simplifiquehc.com.br/simplifique/vendaweb-api:latest` - Envia ambas as tags para o registry. +4. **Atualizar Manifest e Push no Git** + - Atualiza `k8s/overlays/prod/deployment-image-digest-patch.yaml` para apontar para a tag `$TAG`. + ## Variáveis e Segredos (Secrets) Para que o workflow funcione corretamente, as seguintes secrets devem estar configuradas nas configurações do repositório no Gitea: diff --git a/k8s/argocd/application-prod.yaml b/k8s/argocd/application-prod.yaml index f94fb0f..963a54a 100644 --- a/k8s/argocd/application-prod.yaml +++ b/k8s/argocd/application-prod.yaml @@ -11,9 +11,17 @@ spec: path: k8s/overlays/prod destination: server: https://kubernetes.default.svc - namespace: vendaweb-api + namespace: vendaweb-prod syncPolicy: automated: selfHeal: true + prune: true + retry: + limit: 2 + backoff: + duration: 5s + factor: 2 + maxDuration: 3m syncOptions: - CreateNamespace=true + - PruneLast=true diff --git a/k8s/base/deployment.yaml b/k8s/base/deployment.yaml index 551e397..564846c 100644 --- a/k8s/base/deployment.yaml +++ b/k8s/base/deployment.yaml @@ -5,7 +5,15 @@ metadata: labels: app: vendaweb-api spec: - replicas: 15 + replicas: 3 + revisionHistoryLimit: 5 + minReadySeconds: 10 + progressDeadlineSeconds: 600 + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 selector: matchLabels: app: vendaweb-api @@ -16,6 +24,7 @@ spec: spec: imagePullSecrets: - name: gitea-auth + terminationGracePeriodSeconds: 30 containers: - name: api image: git.simplifiquehc.com.br/simplifique/vendaweb-api:589fa29 diff --git a/k8s/overlays/prod/deployment-prod-patch.yaml b/k8s/overlays/prod/deployment-prod-patch.yaml new file mode 100644 index 0000000..f43bd0a --- /dev/null +++ b/k8s/overlays/prod/deployment-prod-patch.yaml @@ -0,0 +1,6 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: vendaweb-api +spec: + replicas: 15 diff --git a/k8s/overlays/prod/kustomization.yaml b/k8s/overlays/prod/kustomization.yaml index 6fc041d..287e99c 100644 --- a/k8s/overlays/prod/kustomization.yaml +++ b/k8s/overlays/prod/kustomization.yaml @@ -8,3 +8,5 @@ resources: patches: - path: service-patch.yaml + - path: deployment-prod-patch.yaml + - path: deployment-image-digest-patch.yaml