Add: Multiple auto-deploy solutions for OpenShift after GitHub Actions

This commit is contained in:
2025-09-25 18:40:31 -03:00
parent 6f6e4ed19d
commit e95f3e3f7c
4 changed files with 662 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
name: Deploy to OpenShift (Manual Trigger)
on:
workflow_dispatch:
inputs:
openshift_server:
description: 'OpenShift Server URL'
required: true
default: 'https://api.your-cluster.com'
openshift_token:
description: 'OpenShift Token'
required: true
type: string
namespace:
description: 'Target Namespace'
required: true
default: 'resource-governance'
image_tag:
description: 'Image Tag to Deploy'
required: false
default: 'latest'
env:
IMAGE_NAME: resource-governance
REGISTRY: andersonid
jobs:
deploy-to-openshift:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install OpenShift CLI
run: |
curl -L https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/linux/oc.tar.gz | tar -xz -C /usr/local/bin/
chmod +x /usr/local/bin/oc
- name: Login to OpenShift
run: |
oc login ${{ inputs.openshift_server }} --token="${{ inputs.openshift_token }}" --insecure-skip-tls-verify=true
- name: Deploy to OpenShift
run: |
# Usar tag fornecida ou latest
IMAGE_TAG="${{ inputs.image_tag }}"
if [ "$IMAGE_TAG" = "latest" ]; then
# Para latest, usar o commit SHA atual
IMAGE_TAG="${{ github.sha }}"
fi
echo "🚀 Deploying image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:$IMAGE_TAG"
echo "📦 Target namespace: ${{ inputs.namespace }}"
# Verificar se o namespace existe
if ! oc get namespace ${{ inputs.namespace }} > /dev/null 2>&1; then
echo "📋 Creating namespace ${{ inputs.namespace }}..."
oc create namespace ${{ inputs.namespace }}
fi
# Aplicar manifests básicos
oc apply -f k8s/rbac.yaml -n ${{ inputs.namespace }}
oc apply -f k8s/configmap.yaml -n ${{ inputs.namespace }}
# Atualizar deployment com nova imagem
oc set image deployment/${{ env.IMAGE_NAME }} ${{ env.IMAGE_NAME }}=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:$IMAGE_TAG -n ${{ inputs.namespace }} || true
# Aplicar deployment, service e route
oc apply -f k8s/deployment.yaml -n ${{ inputs.namespace }}
oc apply -f k8s/service.yaml -n ${{ inputs.namespace }}
oc apply -f k8s/route.yaml -n ${{ inputs.namespace }}
# Aguardar rollout
echo "⏳ Waiting for rollout..."
oc rollout status deployment/${{ env.IMAGE_NAME }} -n ${{ inputs.namespace }} --timeout=300s
# Verificar status
echo "✅ Deployment completed!"
oc get deployment ${{ env.IMAGE_NAME }} -n ${{ inputs.namespace }}
oc get pods -n ${{ inputs.namespace }} -l app.kubernetes.io/name=${{ env.IMAGE_NAME }}
# Obter URL da rota
ROUTE_URL=$(oc get route ${{ env.IMAGE_NAME }}-route -n ${{ inputs.namespace }} -o jsonpath='{.spec.host}' 2>/dev/null || echo "")
if [ -n "$ROUTE_URL" ]; then
echo "🌐 Application URL: https://$ROUTE_URL"
fi