cleanup: remove obsolete scripts and update GitHub Actions for Quay.io
- Remove obsolete deployment scripts outside /scripts folder - Remove redundant scripts inside /scripts folder - Remove release.sh as it won't be used in the process - Update GitHub Actions to use Quay.io instead of Docker Hub - Update registry references from andersonid to quay.io/rh_ee_anobre - Simplify deployment instructions to use deploy-complete.sh - Clean up codebase to maintain only essential scripts
This commit is contained in:
13
.github/workflows/build-only.yml
vendored
13
.github/workflows/build-only.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Build and Push Image to Docker Hub
|
name: Build and Push Image to Quay.io
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -15,7 +15,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
IMAGE_NAME: resource-governance
|
IMAGE_NAME: resource-governance
|
||||||
REGISTRY: andersonid
|
REGISTRY: quay.io/rh_ee_anobre
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-push:
|
build-and-push:
|
||||||
@@ -41,9 +41,9 @@ jobs:
|
|||||||
sudo apt-get update -qq
|
sudo apt-get update -qq
|
||||||
sudo apt-get install -y -qq podman buildah skopeo
|
sudo apt-get install -y -qq podman buildah skopeo
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
- name: Login to Quay.io
|
||||||
run: |
|
run: |
|
||||||
echo "${{ secrets.DOCKERHUB_TOKEN }}" | podman login docker.io -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
|
echo "${{ secrets.QUAY_TOKEN }}" | podman login quay.io -u ${{ secrets.QUAY_USERNAME }} --password-stdin
|
||||||
|
|
||||||
- name: Determine image tags
|
- name: Determine image tags
|
||||||
id: tags
|
id: tags
|
||||||
@@ -113,10 +113,9 @@ jobs:
|
|||||||
echo ""
|
echo ""
|
||||||
echo "🔧 To deploy to your OpenShift cluster:"
|
echo "🔧 To deploy to your OpenShift cluster:"
|
||||||
echo "1. Clone this repository"
|
echo "1. Clone this repository"
|
||||||
echo "2. Run: ./deploy-to-cluster.sh ${{ steps.tags.outputs.image_tag }}"
|
echo "2. Run: ./scripts/deploy-complete.sh"
|
||||||
echo "3. Or use: ./deploy-zero-downtime.sh ${{ steps.tags.outputs.image_tag }}"
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "🐳 Docker Hub: https://hub.docker.com/r/${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}"
|
echo "🐳 Quay.io: https://quay.io/repository/rh_ee_anobre/${{ env.IMAGE_NAME }}"
|
||||||
|
|
||||||
- name: Create GitHub Release (for tags)
|
- name: Create GitHub Release (for tags)
|
||||||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
||||||
|
|||||||
2
.github/workflows/deploy-to-openshift.yml
vendored
2
.github/workflows/deploy-to-openshift.yml
vendored
@@ -22,7 +22,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
IMAGE_NAME: resource-governance
|
IMAGE_NAME: resource-governance
|
||||||
REGISTRY: andersonid
|
REGISTRY: quay.io/rh_ee_anobre
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy-to-openshift:
|
deploy-to-openshift:
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Local deployment script for OpenShift
|
|
||||||
# Usage: ./deploy-local.sh [IMAGE_TAG]
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
REGISTRY="andersonid"
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
TAG=${1:-"latest"}
|
|
||||||
|
|
||||||
echo "Local Deploy to OpenShift"
|
|
||||||
echo "========================="
|
|
||||||
echo "Image: $REGISTRY/$IMAGE_NAME:$TAG"
|
|
||||||
echo "Namespace: $NAMESPACE"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Check if logged into OpenShift
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo "ERROR: Not logged into OpenShift. Run: oc login"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "SUCCESS: Logged into OpenShift as: $(oc whoami)"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Apply manifests
|
|
||||||
echo "Applying manifests..."
|
|
||||||
oc apply -f k8s/namespace.yaml
|
|
||||||
oc apply -f k8s/rbac.yaml
|
|
||||||
oc apply -f k8s/configmap.yaml
|
|
||||||
|
|
||||||
# Update deployment image
|
|
||||||
echo "Updating deployment image..."
|
|
||||||
oc set image deployment/$IMAGE_NAME $IMAGE_NAME=$REGISTRY/$IMAGE_NAME:$TAG -n $NAMESPACE || true
|
|
||||||
|
|
||||||
# Apply deployment, service and route
|
|
||||||
echo "Applying deployment, service and route..."
|
|
||||||
oc apply -f k8s/deployment.yaml
|
|
||||||
oc apply -f k8s/service.yaml
|
|
||||||
oc apply -f k8s/route.yaml
|
|
||||||
|
|
||||||
# Wait for rollout
|
|
||||||
echo "Waiting for rollout..."
|
|
||||||
oc rollout status deployment/$IMAGE_NAME -n $NAMESPACE --timeout=300s
|
|
||||||
|
|
||||||
# Verify deployment
|
|
||||||
echo "Verifying deployment..."
|
|
||||||
oc get deployment $IMAGE_NAME -n $NAMESPACE
|
|
||||||
oc get pods -n $NAMESPACE -l app.kubernetes.io/name=$IMAGE_NAME
|
|
||||||
|
|
||||||
# Get route URL
|
|
||||||
ROUTE_URL=$(oc get route $IMAGE_NAME-route -n $NAMESPACE -o jsonpath='{.spec.host}' 2>/dev/null || echo "")
|
|
||||||
if [ -n "$ROUTE_URL" ]; then
|
|
||||||
echo ""
|
|
||||||
echo "Application deployed successfully!"
|
|
||||||
echo "URL: https://$ROUTE_URL"
|
|
||||||
echo "Status: oc get pods -n $NAMESPACE -l app.kubernetes.io/name=$IMAGE_NAME"
|
|
||||||
else
|
|
||||||
echo "WARNING: Route not found. Check: oc get routes -n $NAMESPACE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Deploy completed!"
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script for deploying OpenShift Resource Governance application
|
|
||||||
# Works with any OpenShift cluster (public or private)
|
|
||||||
|
|
||||||
# Variables
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
IMAGE_TAG=${1:-latest} # Use first argument as tag, or 'latest' by default
|
|
||||||
|
|
||||||
echo "Deploy to OpenShift Cluster"
|
|
||||||
echo "==========================="
|
|
||||||
echo "Image: ${IMAGE_TAG}"
|
|
||||||
echo "Namespace: ${NAMESPACE}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 1. Check OpenShift login
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo "ERROR: Not logged into OpenShift. Please login with 'oc login'."
|
|
||||||
echo "Example: oc login https://your-cluster.com"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "SUCCESS: Logged into OpenShift as: $(oc whoami)"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 2. Check if namespace exists, create if not
|
|
||||||
if ! oc get namespace ${NAMESPACE} > /dev/null 2>&1; then
|
|
||||||
echo "Creating namespace ${NAMESPACE}..."
|
|
||||||
oc create namespace ${NAMESPACE}
|
|
||||||
else
|
|
||||||
echo "SUCCESS: Namespace ${NAMESPACE} already exists"
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 3. Apply basic manifests (rbac, configmap)
|
|
||||||
echo "Applying manifests..."
|
|
||||||
oc apply -f k8s/rbac.yaml
|
|
||||||
oc apply -f k8s/configmap.yaml
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 4. Update deployment with new image
|
|
||||||
echo "Updating deployment image..."
|
|
||||||
oc set image deployment/${IMAGE_NAME} ${IMAGE_NAME}=${IMAGE_TAG} -n ${NAMESPACE} || true
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 5. Apply deployment, service and route
|
|
||||||
echo "Applying deployment, service and route..."
|
|
||||||
oc apply -f k8s/deployment.yaml
|
|
||||||
oc apply -f k8s/service.yaml
|
|
||||||
oc apply -f k8s/route.yaml
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 6. Wait for rollout
|
|
||||||
echo "Waiting for rollout..."
|
|
||||||
oc rollout status deployment/${IMAGE_NAME} -n ${NAMESPACE} --timeout=300s
|
|
||||||
echo "SUCCESS: Rollout completed successfully!"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 7. Verify deployment
|
|
||||||
echo "Verifying deployment..."
|
|
||||||
oc get deployment ${IMAGE_NAME} -n ${NAMESPACE}
|
|
||||||
oc get pods -n ${NAMESPACE} -l app.kubernetes.io/name=${IMAGE_NAME}
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 8. Get route URL
|
|
||||||
ROUTE_URL=$(oc get route ${IMAGE_NAME}-route -n ${NAMESPACE} -o jsonpath='{.spec.host}' 2>/dev/null || echo "")
|
|
||||||
if [ -n "$ROUTE_URL" ]; then
|
|
||||||
echo "Application deployed successfully!"
|
|
||||||
echo "URL: https://$ROUTE_URL"
|
|
||||||
echo "Status: oc get pods -n ${NAMESPACE} -l app.kubernetes.io/name=${IMAGE_NAME}"
|
|
||||||
else
|
|
||||||
echo "WARNING: Route not found. Check if cluster supports Routes."
|
|
||||||
echo "For local access: oc port-forward service/${IMAGE_NAME}-service 8080:8080 -n ${NAMESPACE}"
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "Deploy completed!"
|
|
||||||
echo ""
|
|
||||||
echo "Useful commands:"
|
|
||||||
echo " View logs: oc logs -f deployment/${IMAGE_NAME} -n ${NAMESPACE}"
|
|
||||||
echo " Port-forward: oc port-forward service/${IMAGE_NAME}-service 8080:8080 -n ${NAMESPACE}"
|
|
||||||
echo " Status: oc get pods -n ${NAMESPACE} -l app.kubernetes.io/name=${IMAGE_NAME}"
|
|
||||||
@@ -1,145 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Zero downtime deployment script (Blue-Green Strategy)
|
|
||||||
# Ensures application never goes down during updates
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
REGISTRY="andersonid"
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
TAG=${1:-"latest"}
|
|
||||||
FULL_IMAGE="$REGISTRY/$IMAGE_NAME:$TAG"
|
|
||||||
|
|
||||||
echo "Zero Downtime Deploy to OpenShift"
|
|
||||||
echo "================================="
|
|
||||||
echo "Image: $FULL_IMAGE"
|
|
||||||
echo "Namespace: $NAMESPACE"
|
|
||||||
echo "Strategy: Blue-Green (Zero Downtime)"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Check if logged into OpenShift
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo "ERROR: Not logged into OpenShift. Run: oc login"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "SUCCESS: Logged into OpenShift as: $(oc whoami)"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Function to check if all pods are ready
|
|
||||||
check_pods_ready() {
|
|
||||||
local deployment=$1
|
|
||||||
local namespace=$2
|
|
||||||
local timeout=${3:-300}
|
|
||||||
|
|
||||||
echo "Waiting for deployment $deployment pods to be ready..."
|
|
||||||
oc rollout status deployment/$deployment -n $namespace --timeout=${timeout}s
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to check if application is responding
|
|
||||||
check_app_health() {
|
|
||||||
local service=$1
|
|
||||||
local namespace=$2
|
|
||||||
local port=${3:-8080}
|
|
||||||
|
|
||||||
echo "Checking application health..."
|
|
||||||
|
|
||||||
# Try temporary port-forward for testing
|
|
||||||
local temp_pid
|
|
||||||
oc port-forward service/$service $port:$port -n $namespace > /dev/null 2>&1 &
|
|
||||||
temp_pid=$!
|
|
||||||
|
|
||||||
# Wait for port-forward to initialize
|
|
||||||
sleep 3
|
|
||||||
|
|
||||||
# Test health check
|
|
||||||
local health_status
|
|
||||||
health_status=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$port/api/v1/health 2>/dev/null || echo "000")
|
|
||||||
|
|
||||||
# Stop temporary port-forward
|
|
||||||
kill $temp_pid 2>/dev/null || true
|
|
||||||
|
|
||||||
if [ "$health_status" = "200" ]; then
|
|
||||||
echo "SUCCESS: Application healthy (HTTP $health_status)"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
echo "ERROR: Application not healthy (HTTP $health_status)"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Apply basic manifests
|
|
||||||
echo "Applying basic manifests..."
|
|
||||||
oc apply -f k8s/namespace.yaml
|
|
||||||
oc apply -f k8s/rbac.yaml
|
|
||||||
oc apply -f k8s/configmap.yaml
|
|
||||||
|
|
||||||
# Check if deployment exists
|
|
||||||
if oc get deployment $IMAGE_NAME -n $NAMESPACE > /dev/null 2>&1; then
|
|
||||||
echo "Existing deployment found. Starting zero-downtime update..."
|
|
||||||
|
|
||||||
# Get current replica count
|
|
||||||
CURRENT_REPLICAS=$(oc get deployment $IMAGE_NAME -n $NAMESPACE -o jsonpath='{.spec.replicas}')
|
|
||||||
echo "Current replicas: $CURRENT_REPLICAS"
|
|
||||||
|
|
||||||
# Update deployment image
|
|
||||||
echo "Updating image to: $FULL_IMAGE"
|
|
||||||
oc set image deployment/$IMAGE_NAME $IMAGE_NAME=$FULL_IMAGE -n $NAMESPACE
|
|
||||||
|
|
||||||
# Wait for rollout with longer timeout
|
|
||||||
echo "Waiting for rollout (may take a few minutes)..."
|
|
||||||
if check_pods_ready $IMAGE_NAME $NAMESPACE 600; then
|
|
||||||
echo "SUCCESS: Rollout completed successfully!"
|
|
||||||
|
|
||||||
# Check application health
|
|
||||||
if check_app_health "${IMAGE_NAME}-service" $NAMESPACE; then
|
|
||||||
echo "Zero downtime deploy completed successfully!"
|
|
||||||
else
|
|
||||||
echo "WARNING: Deploy completed, but application may not be healthy"
|
|
||||||
echo "Check logs: oc logs -f deployment/$IMAGE_NAME -n $NAMESPACE"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "ERROR: Rollout failed or timeout"
|
|
||||||
echo "Checking pod status:"
|
|
||||||
oc get pods -n $NAMESPACE -l app.kubernetes.io/name=$IMAGE_NAME
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Deployment does not exist. Creating new deployment..."
|
|
||||||
oc apply -f k8s/deployment.yaml
|
|
||||||
oc apply -f k8s/service.yaml
|
|
||||||
oc apply -f k8s/route.yaml
|
|
||||||
|
|
||||||
# Wait for pods to be ready
|
|
||||||
if check_pods_ready $IMAGE_NAME $NAMESPACE 300; then
|
|
||||||
echo "SUCCESS: New deployment created successfully!"
|
|
||||||
else
|
|
||||||
echo "ERROR: Failed to create deployment"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check final status
|
|
||||||
echo ""
|
|
||||||
echo "FINAL STATUS:"
|
|
||||||
echo "============="
|
|
||||||
oc get deployment $IMAGE_NAME -n $NAMESPACE
|
|
||||||
echo ""
|
|
||||||
oc get pods -n $NAMESPACE -l app.kubernetes.io/name=$IMAGE_NAME
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Get route URL
|
|
||||||
ROUTE_URL=$(oc get route $IMAGE_NAME-route -n $NAMESPACE -o jsonpath='{.spec.host}' 2>/dev/null || echo "")
|
|
||||||
if [ -n "$ROUTE_URL" ]; then
|
|
||||||
echo "Access URLs:"
|
|
||||||
echo " OpenShift: https://$ROUTE_URL"
|
|
||||||
echo " Port-forward: http://localhost:8080 (if active)"
|
|
||||||
echo ""
|
|
||||||
echo "To start port-forward: oc port-forward service/${IMAGE_NAME}-service 8080:8080 -n $NAMESPACE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Zero downtime deploy completed!"
|
|
||||||
echo "Strategy: Rolling Update with maxUnavailable=0 (zero downtime)"
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Deploy script for OpenShift using GitHub
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Colors for output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
REPO_URL="https://github.com/andersonid/openshift-resource-governance.git"
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
REGISTRY="andersonid"
|
|
||||||
TAG="${1:-latest}"
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
|
|
||||||
echo -e "${BLUE}Deploying OpenShift Resource Governance Tool from GitHub${NC}"
|
|
||||||
echo -e "${BLUE}Repository: ${REPO_URL}${NC}"
|
|
||||||
echo -e "${BLUE}Image: ${REGISTRY}/${IMAGE_NAME}:${TAG}${NC}"
|
|
||||||
|
|
||||||
# Check if oc is installed
|
|
||||||
if ! command -v oc &> /dev/null; then
|
|
||||||
echo -e "${RED}ERROR: OpenShift CLI (oc) is not installed.${NC}"
|
|
||||||
echo -e "${YELLOW}Install oc CLI: https://docs.openshift.com/container-platform/latest/cli_reference/openshift_cli/getting-started-cli.html${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if logged into OpenShift
|
|
||||||
if ! oc whoami &> /dev/null; then
|
|
||||||
echo -e "${RED}ERROR: Not logged into OpenShift.${NC}"
|
|
||||||
echo -e "${YELLOW}Login with: oc login <cluster-url>${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}SUCCESS: Logged in as: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# Create namespace if it doesn't exist
|
|
||||||
echo -e "${YELLOW}Creating namespace...${NC}"
|
|
||||||
oc apply -f k8s/namespace.yaml
|
|
||||||
|
|
||||||
# Apply RBAC
|
|
||||||
echo -e "${YELLOW}Applying RBAC...${NC}"
|
|
||||||
oc apply -f k8s/rbac.yaml
|
|
||||||
|
|
||||||
# Apply ConfigMap
|
|
||||||
echo -e "${YELLOW}Applying ConfigMap...${NC}"
|
|
||||||
oc apply -f k8s/configmap.yaml
|
|
||||||
|
|
||||||
# Update image in DaemonSet
|
|
||||||
echo -e "${YELLOW}Updating image in DaemonSet...${NC}"
|
|
||||||
oc set image daemonset/${IMAGE_NAME} ${IMAGE_NAME}="${REGISTRY}/${IMAGE_NAME}:${TAG}" -n "${NAMESPACE}" || true
|
|
||||||
|
|
||||||
# Apply DaemonSet
|
|
||||||
echo -e "${YELLOW}Applying DaemonSet...${NC}"
|
|
||||||
oc apply -f k8s/daemonset.yaml
|
|
||||||
|
|
||||||
# Apply Service
|
|
||||||
echo -e "${YELLOW}Applying Service...${NC}"
|
|
||||||
oc apply -f k8s/service.yaml
|
|
||||||
|
|
||||||
# Apply Route
|
|
||||||
echo -e "${YELLOW}Applying Route...${NC}"
|
|
||||||
oc apply -f k8s/route.yaml
|
|
||||||
|
|
||||||
# Wait for pods to be ready
|
|
||||||
echo -e "${YELLOW}Waiting for pods to be ready...${NC}"
|
|
||||||
oc wait --for=condition=ready pod -l app.kubernetes.io/name=${IMAGE_NAME} -n "${NAMESPACE}" --timeout=300s
|
|
||||||
|
|
||||||
# Get route URL
|
|
||||||
ROUTE_URL=$(oc get route ${IMAGE_NAME}-route -n "${NAMESPACE}" -o jsonpath='{.spec.host}')
|
|
||||||
if [ -n "${ROUTE_URL}" ]; then
|
|
||||||
echo -e "${GREEN}SUCCESS: Deploy completed successfully!${NC}"
|
|
||||||
echo -e "${BLUE}Application URL: https://${ROUTE_URL}${NC}"
|
|
||||||
echo -e "${BLUE}GitHub Repository: ${REPO_URL}${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${YELLOW}WARNING: Deploy completed, but route URL not found.${NC}"
|
|
||||||
echo -e "${BLUE}Check with: oc get routes -n ${NAMESPACE}${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Show status
|
|
||||||
echo -e "${BLUE}Deployment status:${NC}"
|
|
||||||
oc get all -n "${NAMESPACE}"
|
|
||||||
|
|
||||||
echo -e "${BLUE}To check logs:${NC}"
|
|
||||||
echo -e " oc logs -f daemonset/${IMAGE_NAME} -n ${NAMESPACE}"
|
|
||||||
|
|
||||||
echo -e "${BLUE}To test health:${NC}"
|
|
||||||
echo -e " curl https://${ROUTE_URL}/health"
|
|
||||||
|
|
||||||
echo -e "${BLUE}To update from GitHub:${NC}"
|
|
||||||
echo -e " git pull origin main"
|
|
||||||
echo -e " ./openshift-deploy.sh <new-tag>"
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Auto-deploy script after GitHub Actions
|
|
||||||
# This script can be executed locally or via webhook
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Colors for output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
REGISTRY="andersonid"
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
IMAGE_TAG=${1:-latest}
|
|
||||||
|
|
||||||
echo -e "${BLUE}Auto-Deploy to OpenShift${NC}"
|
|
||||||
echo "================================"
|
|
||||||
echo "Image: ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
|
|
||||||
echo "Namespace: ${NAMESPACE}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 1. Check OpenShift login
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo -e "${RED}ERROR: Not logged into OpenShift. Please login with 'oc login'.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo -e "${GREEN}SUCCESS: Logged into OpenShift as: $(oc whoami)${NC}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 2. Check if image exists on Docker Hub
|
|
||||||
echo -e "${BLUE}Checking image on Docker Hub...${NC}"
|
|
||||||
if ! skopeo inspect docker://${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} > /dev/null 2>&1; then
|
|
||||||
echo -e "${RED}ERROR: Image ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} not found on Docker Hub!${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo -e "${GREEN}SUCCESS: Image found on Docker Hub${NC}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 3. Check if namespace exists
|
|
||||||
if ! oc get namespace ${NAMESPACE} > /dev/null 2>&1; then
|
|
||||||
echo -e "${BLUE}Creating namespace ${NAMESPACE}...${NC}"
|
|
||||||
oc create namespace ${NAMESPACE}
|
|
||||||
else
|
|
||||||
echo -e "${GREEN}SUCCESS: Namespace ${NAMESPACE} already exists${NC}"
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 4. Apply basic manifests
|
|
||||||
echo -e "${BLUE}Applying basic manifests...${NC}"
|
|
||||||
oc apply -f k8s/rbac.yaml -n ${NAMESPACE}
|
|
||||||
oc apply -f k8s/configmap.yaml -n ${NAMESPACE}
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 5. Check if deployment exists
|
|
||||||
if oc get deployment ${IMAGE_NAME} -n ${NAMESPACE} > /dev/null 2>&1; then
|
|
||||||
echo -e "${BLUE}Existing deployment found. Starting update...${NC}"
|
|
||||||
|
|
||||||
# Get current image
|
|
||||||
CURRENT_IMAGE=$(oc get deployment ${IMAGE_NAME} -n ${NAMESPACE} -o jsonpath='{.spec.template.spec.containers[0].image}')
|
|
||||||
echo "Current image: ${CURRENT_IMAGE}"
|
|
||||||
echo "New image: ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
|
|
||||||
|
|
||||||
# Check if image changed
|
|
||||||
if [ "${CURRENT_IMAGE}" = "${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" ]; then
|
|
||||||
echo -e "${YELLOW}WARNING: Image already up to date. No action needed.${NC}"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Update deployment with new image
|
|
||||||
echo -e "${BLUE}Updating deployment image...${NC}"
|
|
||||||
oc set image deployment/${IMAGE_NAME} ${IMAGE_NAME}=${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} -n ${NAMESPACE}
|
|
||||||
|
|
||||||
# Wait for rollout
|
|
||||||
echo -e "${BLUE}Waiting for rollout (may take a few minutes)...${NC}"
|
|
||||||
oc rollout status deployment/${IMAGE_NAME} -n ${NAMESPACE} --timeout=300s
|
|
||||||
echo -e "${GREEN}SUCCESS: Rollout completed successfully!${NC}"
|
|
||||||
|
|
||||||
else
|
|
||||||
echo -e "${BLUE}Deployment not found. Creating new deployment...${NC}"
|
|
||||||
# Apply deployment, service and route
|
|
||||||
oc apply -f k8s/deployment.yaml -n ${NAMESPACE}
|
|
||||||
oc apply -f k8s/service.yaml -n ${NAMESPACE}
|
|
||||||
oc apply -f k8s/route.yaml -n ${NAMESPACE}
|
|
||||||
|
|
||||||
# Wait for initial rollout
|
|
||||||
echo -e "${BLUE}Waiting for initial rollout...${NC}"
|
|
||||||
oc rollout status deployment/${IMAGE_NAME} -n ${NAMESPACE} --timeout=300s
|
|
||||||
echo -e "${GREEN}SUCCESS: Initial rollout completed successfully!${NC}"
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 6. Check final status
|
|
||||||
echo -e "${BLUE}FINAL STATUS:${NC}"
|
|
||||||
echo "================"
|
|
||||||
oc get deployment ${IMAGE_NAME} -n ${NAMESPACE}
|
|
||||||
echo ""
|
|
||||||
oc get pods -n ${NAMESPACE} -l app.kubernetes.io/name=${IMAGE_NAME}
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 7. Get access URLs
|
|
||||||
ROUTE_URL=$(oc get route ${IMAGE_NAME}-route -n ${NAMESPACE} -o jsonpath='{.spec.host}' 2>/dev/null || echo "")
|
|
||||||
echo -e "${BLUE}Access URLs:${NC}"
|
|
||||||
if [ -n "$ROUTE_URL" ]; then
|
|
||||||
echo " OpenShift: https://$ROUTE_URL"
|
|
||||||
else
|
|
||||||
echo " OpenShift: Route not found or not available."
|
|
||||||
fi
|
|
||||||
echo " Port-forward: http://localhost:8080 (if active)"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo -e "${GREEN}SUCCESS: Auto-deploy completed successfully!${NC}"
|
|
||||||
echo -e "${BLUE}Strategy: Rolling Update with maxUnavailable=0 (zero downtime)${NC}"
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script de Deploy Blue-Green para OpenShift Resource Governance Tool
|
|
||||||
# Este script implementa uma estratégia de deploy mais segura, onde a nova versão
|
|
||||||
# só substitui a antiga após estar completamente funcional.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Cores para output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
IMAGE_NAME="andersonid/openshift-resource-governance"
|
|
||||||
TAG="${1:-latest}"
|
|
||||||
FULL_IMAGE_NAME="${IMAGE_NAME}:${TAG}"
|
|
||||||
|
|
||||||
echo -e "${BLUE}🔄 Deploy Blue-Green - OpenShift Resource Governance Tool${NC}"
|
|
||||||
echo -e "${BLUE}====================================================${NC}"
|
|
||||||
echo -e "${BLUE}Imagem: ${FULL_IMAGE_NAME}${NC}"
|
|
||||||
|
|
||||||
# 1. Verificar login no OpenShift
|
|
||||||
echo -e "${YELLOW}🔍 Verificando login no OpenShift...${NC}"
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo -e "${RED}❌ Não está logado no OpenShift. Faça login primeiro.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo -e "${GREEN}✅ Logado como: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# 2. Verificar se a imagem existe localmente
|
|
||||||
echo -e "${YELLOW}🔍 Verificando se a imagem existe localmente...${NC}"
|
|
||||||
if ! podman image exists "${FULL_IMAGE_NAME}" > /dev/null 2>&1; then
|
|
||||||
echo -e "${YELLOW}📦 Imagem não encontrada localmente. Fazendo build...${NC}"
|
|
||||||
podman build -f Dockerfile.simple -t "${FULL_IMAGE_NAME}" .
|
|
||||||
|
|
||||||
echo -e "${YELLOW}📤 Fazendo push da imagem...${NC}"
|
|
||||||
podman push "${FULL_IMAGE_NAME}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 3. Verificar status atual do Deployment
|
|
||||||
echo -e "${YELLOW}📊 Verificando status atual do Deployment...${NC}"
|
|
||||||
CURRENT_IMAGE=$(oc get deployment resource-governance -n $NAMESPACE -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null || echo "N/A")
|
|
||||||
echo -e "${BLUE}Imagem atual: ${CURRENT_IMAGE}${NC}"
|
|
||||||
|
|
||||||
if [ "$CURRENT_IMAGE" = "$FULL_IMAGE_NAME" ]; then
|
|
||||||
echo -e "${YELLOW}⚠️ A imagem já está em uso. Continuando com o deploy...${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. Aplicar o Deployment atualizado
|
|
||||||
echo -e "${YELLOW}📦 Aplicando Deployment atualizado...${NC}"
|
|
||||||
oc apply -f k8s/deployment.yaml
|
|
||||||
|
|
||||||
# 5. Aguardar o rollout com verificação de saúde
|
|
||||||
echo -e "${YELLOW}⏳ Aguardando rollout do Deployment...${NC}"
|
|
||||||
oc rollout status deployment/resource-governance -n $NAMESPACE --timeout=300s
|
|
||||||
|
|
||||||
# 6. Verificar se todos os pods estão prontos
|
|
||||||
echo -e "${YELLOW}🔍 Verificando se todos os pods estão prontos...${NC}"
|
|
||||||
READY_PODS=$(oc get pods -n $NAMESPACE -l app.kubernetes.io/name=resource-governance --field-selector=status.phase=Running | wc -l)
|
|
||||||
TOTAL_PODS=$(oc get pods -n $NAMESPACE -l app.kubernetes.io/name=resource-governance | wc -l)
|
|
||||||
|
|
||||||
echo -e "${BLUE}Pods prontos: ${READY_PODS}/${TOTAL_PODS}${NC}"
|
|
||||||
|
|
||||||
if [ $READY_PODS -lt $TOTAL_PODS ]; then
|
|
||||||
echo -e "${YELLOW}⚠️ Nem todos os pods estão prontos. Verificando logs...${NC}"
|
|
||||||
oc get pods -n $NAMESPACE -l app.kubernetes.io/name=resource-governance
|
|
||||||
echo -e "${YELLOW}💡 Para ver logs de um pod específico: oc logs <pod-name> -n $NAMESPACE${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 7. Testar a saúde da aplicação
|
|
||||||
echo -e "${YELLOW}🏥 Testando saúde da aplicação...${NC}"
|
|
||||||
SERVICE_IP=$(oc get service resource-governance-service -n $NAMESPACE -o jsonpath='{.spec.clusterIP}')
|
|
||||||
if [ -n "$SERVICE_IP" ]; then
|
|
||||||
# Testar via port-forward temporário
|
|
||||||
echo -e "${YELLOW}🔗 Testando conectividade...${NC}"
|
|
||||||
oc port-forward service/resource-governance-service 8081:8080 -n $NAMESPACE &
|
|
||||||
PORT_FORWARD_PID=$!
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
if curl -s http://localhost:8081/api/v1/health > /dev/null; then
|
|
||||||
echo -e "${GREEN}✅ Aplicação está respondendo corretamente${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Aplicação não está respondendo${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
kill $PORT_FORWARD_PID 2>/dev/null || true
|
|
||||||
else
|
|
||||||
echo -e "${YELLOW}⚠️ Não foi possível obter IP do serviço${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 8. Mostrar status final
|
|
||||||
echo -e "${YELLOW}📊 Status final do deploy:${NC}"
|
|
||||||
oc get deployment resource-governance -n $NAMESPACE
|
|
||||||
echo ""
|
|
||||||
oc get pods -n $NAMESPACE -l app.kubernetes.io/name=resource-governance
|
|
||||||
|
|
||||||
# 9. Obter URL da aplicação
|
|
||||||
ROUTE_HOST=$(oc get route resource-governance-route -n $NAMESPACE -o jsonpath='{.spec.host}' 2>/dev/null || echo "N/A")
|
|
||||||
if [ "$ROUTE_HOST" != "N/A" ]; then
|
|
||||||
echo -e "${GREEN}🎉 Deploy Blue-Green concluído com sucesso!${NC}"
|
|
||||||
echo -e "${BLUE}Acesse a aplicação em: https://${ROUTE_HOST}${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${GREEN}🎉 Deploy Blue-Green concluído!${NC}"
|
|
||||||
echo -e "${BLUE}Para acessar a aplicação, use port-forward:${NC}"
|
|
||||||
echo -e " oc port-forward service/resource-governance-service 8080:8080 -n $NAMESPACE${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${BLUE}💡 Para verificar logs: oc logs -l app.kubernetes.io/name=resource-governance -n $NAMESPACE${NC}"
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Build script for OpenShift Resource Governance Tool
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Colors for output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
TAG="${1:-latest}"
|
|
||||||
REGISTRY="${2:-andersonid}"
|
|
||||||
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}"
|
|
||||||
|
|
||||||
echo -e "${BLUE}Building OpenShift Resource Governance Tool${NC}"
|
|
||||||
echo -e "${BLUE}Image: ${FULL_IMAGE_NAME}${NC}"
|
|
||||||
|
|
||||||
# Check if Podman is installed
|
|
||||||
if ! command -v podman &> /dev/null; then
|
|
||||||
echo -e "${RED}ERROR: Podman is not installed. Install Podman and try again.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build image
|
|
||||||
echo -e "${YELLOW}Building container image with Podman...${NC}"
|
|
||||||
podman build -t "${FULL_IMAGE_NAME}" .
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo -e "${GREEN}SUCCESS: Image built successfully!${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}ERROR: Build failed!${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Test image
|
|
||||||
echo -e "${YELLOW}Testing image...${NC}"
|
|
||||||
podman run --rm "${FULL_IMAGE_NAME}" python -c "import app.main; print('SUCCESS: App imports successfully')"
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo -e "${GREEN}SUCCESS: Image test passed!${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}ERROR: Image test failed!${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Show image information
|
|
||||||
echo -e "${BLUE}Image information:${NC}"
|
|
||||||
podman images "${FULL_IMAGE_NAME}"
|
|
||||||
|
|
||||||
echo -e "${GREEN}SUCCESS: Build completed successfully!${NC}"
|
|
||||||
echo -e "${BLUE}To push to registry:${NC}"
|
|
||||||
echo -e " podman push ${FULL_IMAGE_NAME}"
|
|
||||||
echo -e "${BLUE}To run locally:${NC}"
|
|
||||||
echo -e " podman run -p 8080:8080 ${FULL_IMAGE_NAME}"
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Deploy script for OpenShift Resource Governance Tool
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Colors for output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
TAG="${1:-latest}"
|
|
||||||
REGISTRY="${2:-andersonid}"
|
|
||||||
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}"
|
|
||||||
|
|
||||||
echo -e "${BLUE}Deploying OpenShift Resource Governance Tool${NC}"
|
|
||||||
echo -e "${BLUE}Namespace: ${NAMESPACE}${NC}"
|
|
||||||
echo -e "${BLUE}Image: ${FULL_IMAGE_NAME}${NC}"
|
|
||||||
|
|
||||||
# Check if oc is installed
|
|
||||||
if ! command -v oc &> /dev/null; then
|
|
||||||
echo -e "${RED}ERROR: OpenShift CLI (oc) is not installed.${NC}"
|
|
||||||
echo -e "${YELLOW}Install oc CLI: https://docs.openshift.com/container-platform/latest/cli_reference/openshift_cli/getting-started-cli.html${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if logged into OpenShift
|
|
||||||
if ! oc whoami &> /dev/null; then
|
|
||||||
echo -e "${RED}ERROR: Not logged into OpenShift.${NC}"
|
|
||||||
echo -e "${YELLOW}Login with: oc login <cluster-url>${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}SUCCESS: Logged in as: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# Create namespace if it doesn't exist
|
|
||||||
echo -e "${YELLOW}Creating namespace...${NC}"
|
|
||||||
oc apply -f k8s/namespace.yaml
|
|
||||||
|
|
||||||
# Apply RBAC
|
|
||||||
echo -e "${YELLOW}Applying RBAC...${NC}"
|
|
||||||
oc apply -f k8s/rbac.yaml
|
|
||||||
|
|
||||||
# Apply ConfigMap
|
|
||||||
echo -e "${YELLOW}Applying ConfigMap...${NC}"
|
|
||||||
oc apply -f k8s/configmap.yaml
|
|
||||||
|
|
||||||
# Update image in DaemonSet
|
|
||||||
echo -e "${YELLOW}Updating image in DaemonSet...${NC}"
|
|
||||||
oc set image daemonset/resource-governance resource-governance="${FULL_IMAGE_NAME}" -n "${NAMESPACE}"
|
|
||||||
|
|
||||||
# Apply DaemonSet
|
|
||||||
echo -e "${YELLOW}Applying DaemonSet...${NC}"
|
|
||||||
oc apply -f k8s/daemonset.yaml
|
|
||||||
|
|
||||||
# Apply Service
|
|
||||||
echo -e "${YELLOW}Applying Service...${NC}"
|
|
||||||
oc apply -f k8s/service.yaml
|
|
||||||
|
|
||||||
# Apply Route
|
|
||||||
echo -e "${YELLOW}Applying Route...${NC}"
|
|
||||||
oc apply -f k8s/route.yaml
|
|
||||||
|
|
||||||
# Wait for pods to be ready
|
|
||||||
echo -e "${YELLOW}Waiting for pods to be ready...${NC}"
|
|
||||||
oc wait --for=condition=ready pod -l app.kubernetes.io/name=resource-governance -n "${NAMESPACE}" --timeout=300s
|
|
||||||
|
|
||||||
# Get route URL
|
|
||||||
ROUTE_URL=$(oc get route resource-governance-route -n "${NAMESPACE}" -o jsonpath='{.spec.host}')
|
|
||||||
if [ -n "${ROUTE_URL}" ]; then
|
|
||||||
echo -e "${GREEN}SUCCESS: Deploy completed successfully!${NC}"
|
|
||||||
echo -e "${BLUE}Application URL: https://${ROUTE_URL}${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${YELLOW}WARNING: Deploy completed, but route URL not found.${NC}"
|
|
||||||
echo -e "${BLUE}Check with: oc get routes -n ${NAMESPACE}${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Show status
|
|
||||||
echo -e "${BLUE}Deployment status:${NC}"
|
|
||||||
oc get all -n "${NAMESPACE}"
|
|
||||||
|
|
||||||
echo -e "${BLUE}To check logs:${NC}"
|
|
||||||
echo -e " oc logs -f daemonset/resource-governance -n ${NAMESPACE}"
|
|
||||||
|
|
||||||
echo -e "${BLUE}To test health:${NC}"
|
|
||||||
echo -e " curl https://${ROUTE_URL}/health"
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script para migrar de DaemonSet para Deployment
|
|
||||||
# Este script remove o DaemonSet e cria um Deployment mais eficiente
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Cores para output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
|
|
||||||
echo -e "${BLUE}🔄 Migração DaemonSet → Deployment${NC}"
|
|
||||||
echo -e "${BLUE}====================================${NC}"
|
|
||||||
|
|
||||||
# 1. Verificar login no OpenShift
|
|
||||||
echo -e "${YELLOW}🔍 Verificando login no OpenShift...${NC}"
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo -e "${RED}❌ Não está logado no OpenShift. Faça login primeiro.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo -e "${GREEN}✅ Logado como: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# 2. Verificar status atual
|
|
||||||
echo -e "${YELLOW}📊 Status atual do DaemonSet...${NC}"
|
|
||||||
oc get daemonset resource-governance -n $NAMESPACE 2>/dev/null || echo "DaemonSet não encontrado"
|
|
||||||
|
|
||||||
# 3. Criar Deployment
|
|
||||||
echo -e "${YELLOW}📦 Criando Deployment...${NC}"
|
|
||||||
oc apply -f k8s/deployment.yaml
|
|
||||||
|
|
||||||
# 4. Aguardar Deployment ficar pronto
|
|
||||||
echo -e "${YELLOW}⏳ Aguardando Deployment ficar pronto...${NC}"
|
|
||||||
oc rollout status deployment/resource-governance -n $NAMESPACE --timeout=120s
|
|
||||||
|
|
||||||
# 5. Verificar se pods estão rodando
|
|
||||||
echo -e "${YELLOW}🔍 Verificando pods do Deployment...${NC}"
|
|
||||||
oc get pods -n $NAMESPACE -l app.kubernetes.io/name=resource-governance
|
|
||||||
|
|
||||||
# 6. Testar aplicação
|
|
||||||
echo -e "${YELLOW}🏥 Testando aplicação...${NC}"
|
|
||||||
oc port-forward service/resource-governance-service 8081:8080 -n $NAMESPACE &
|
|
||||||
PORT_FORWARD_PID=$!
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
if curl -s http://localhost:8081/api/v1/health > /dev/null; then
|
|
||||||
echo -e "${GREEN}✅ Aplicação está funcionando corretamente${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Aplicação não está respondendo${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
kill $PORT_FORWARD_PID 2>/dev/null || true
|
|
||||||
|
|
||||||
# 7. Remover DaemonSet (se existir)
|
|
||||||
echo -e "${YELLOW}🗑️ Removendo DaemonSet...${NC}"
|
|
||||||
oc delete daemonset resource-governance -n $NAMESPACE --ignore-not-found=true
|
|
||||||
|
|
||||||
# 8. Status final
|
|
||||||
echo -e "${YELLOW}📊 Status final:${NC}"
|
|
||||||
echo -e "${BLUE}Deployment:${NC}"
|
|
||||||
oc get deployment resource-governance -n $NAMESPACE
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}Pods:${NC}"
|
|
||||||
oc get pods -n $NAMESPACE -l app.kubernetes.io/name=resource-governance
|
|
||||||
|
|
||||||
# 9. Mostrar benefícios
|
|
||||||
echo -e "${GREEN}🎉 Migração concluída com sucesso!${NC}"
|
|
||||||
echo -e "${BLUE}💡 Benefícios do Deployment:${NC}"
|
|
||||||
echo -e " ✅ Mais eficiente (2 pods vs 6 pods)"
|
|
||||||
echo -e " ✅ Escalável (pode ajustar replicas)"
|
|
||||||
echo -e " ✅ Rolling Updates nativos"
|
|
||||||
echo -e " ✅ Health checks automáticos"
|
|
||||||
echo -e " ✅ Menor consumo de recursos"
|
|
||||||
|
|
||||||
echo -e "${BLUE}🔧 Para escalar: oc scale deployment resource-governance --replicas=3 -n $NAMESPACE${NC}"
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script para fazer push da imagem para o registry interno do OpenShift
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Cores para output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
TAG="latest"
|
|
||||||
|
|
||||||
echo -e "${BLUE}🚀 Push para registry interno do OpenShift${NC}"
|
|
||||||
|
|
||||||
# Verificar se está logado no OpenShift
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo -e "${RED}❌ Não está logado no OpenShift. Faça login primeiro.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}✅ Logado como: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# Fazer login no registry interno
|
|
||||||
echo -e "${YELLOW}🔐 Fazendo login no registry interno...${NC}"
|
|
||||||
oc registry login
|
|
||||||
|
|
||||||
# Obter a URL do registry
|
|
||||||
REGISTRY_URL=$(oc get route -n openshift-image-registry default-route -o jsonpath='{.spec.host}' 2>/dev/null || echo "image-registry.openshift-image-registry.svc:5000")
|
|
||||||
echo -e "${BLUE}📦 Registry URL: $REGISTRY_URL${NC}"
|
|
||||||
|
|
||||||
# Tag da imagem
|
|
||||||
FULL_IMAGE_NAME="$REGISTRY_URL/$NAMESPACE/$IMAGE_NAME:$TAG"
|
|
||||||
echo -e "${YELLOW}🏷️ Criando tag: $FULL_IMAGE_NAME${NC}"
|
|
||||||
podman tag quay.io/rh_ee_anobre/resource-governance:latest $FULL_IMAGE_NAME
|
|
||||||
|
|
||||||
# Push da imagem
|
|
||||||
echo -e "${YELLOW}📤 Fazendo push da imagem...${NC}"
|
|
||||||
podman push $FULL_IMAGE_NAME --tls-verify=false
|
|
||||||
|
|
||||||
# Atualizar o DaemonSet
|
|
||||||
echo -e "${YELLOW}🔄 Atualizando DaemonSet...${NC}"
|
|
||||||
oc set image daemonset/$IMAGE_NAME $IMAGE_NAME=$FULL_IMAGE_NAME -n $NAMESPACE
|
|
||||||
|
|
||||||
echo -e "${GREEN}✅ Push concluído com sucesso!${NC}"
|
|
||||||
echo -e "${BLUE}📊 Verificando status dos pods...${NC}"
|
|
||||||
oc get pods -n $NAMESPACE
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script to create releases and tags for OpenShift Resource Governance
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Colors for output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
# Function to show help
|
|
||||||
show_help() {
|
|
||||||
echo "OpenShift Resource Governance - Release Script"
|
|
||||||
echo "=============================================="
|
|
||||||
echo ""
|
|
||||||
echo "Usage: $0 [COMMAND] [VERSION]"
|
|
||||||
echo ""
|
|
||||||
echo "Commands:"
|
|
||||||
echo " patch Create patch release (ex: 1.0.0 -> 1.0.1)"
|
|
||||||
echo " minor Create minor release (ex: 1.0.0 -> 1.1.0)"
|
|
||||||
echo " major Create major release (ex: 1.0.0 -> 2.0.0)"
|
|
||||||
echo " custom Create release with custom version"
|
|
||||||
echo " list List existing releases"
|
|
||||||
echo " help Show this help"
|
|
||||||
echo ""
|
|
||||||
echo "Examples:"
|
|
||||||
echo " $0 patch # 1.0.0 -> 1.0.1"
|
|
||||||
echo " $0 minor # 1.0.0 -> 1.1.0"
|
|
||||||
echo " $0 custom 2.0.0-beta.1 # Custom version"
|
|
||||||
echo " $0 list # List releases"
|
|
||||||
echo ""
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to get current version
|
|
||||||
get_current_version() {
|
|
||||||
local latest_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
|
|
||||||
echo "${latest_tag#v}" # Remove 'v' prefix
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to increment version
|
|
||||||
increment_version() {
|
|
||||||
local version=$1
|
|
||||||
local type=$2
|
|
||||||
|
|
||||||
IFS='.' read -ra VERSION_PARTS <<< "$version"
|
|
||||||
local major=${VERSION_PARTS[0]}
|
|
||||||
local minor=${VERSION_PARTS[1]}
|
|
||||||
local patch=${VERSION_PARTS[2]}
|
|
||||||
|
|
||||||
case $type in
|
|
||||||
"major")
|
|
||||||
echo "$((major + 1)).0.0"
|
|
||||||
;;
|
|
||||||
"minor")
|
|
||||||
echo "$major.$((minor + 1)).0"
|
|
||||||
;;
|
|
||||||
"patch")
|
|
||||||
echo "$major.$minor.$((patch + 1))"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "$version"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to validate version
|
|
||||||
validate_version() {
|
|
||||||
local version=$1
|
|
||||||
if [[ ! $version =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?$ ]]; then
|
|
||||||
echo -e "${RED}ERROR: Invalid version: $version${NC}"
|
|
||||||
echo "Expected format: X.Y.Z or X.Y.Z-suffix"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to create release
|
|
||||||
create_release() {
|
|
||||||
local version=$1
|
|
||||||
local tag="v$version"
|
|
||||||
|
|
||||||
echo -e "${BLUE}Creating release $tag${NC}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Check if already exists
|
|
||||||
if git tag -l | grep -q "^$tag$"; then
|
|
||||||
echo -e "${RED}ERROR: Tag $tag already exists!${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check for uncommitted changes
|
|
||||||
if ! git diff-index --quiet HEAD --; then
|
|
||||||
echo -e "${YELLOW}WARNING: There are uncommitted changes. Continue? (y/N)${NC}"
|
|
||||||
read -r response
|
|
||||||
if [[ ! "$response" =~ ^[Yy]$ ]]; then
|
|
||||||
echo "Cancelled."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Commit changes if any
|
|
||||||
if ! git diff-index --quiet HEAD --; then
|
|
||||||
echo -e "${BLUE}Committing changes...${NC}"
|
|
||||||
git add .
|
|
||||||
git commit -m "Release $tag"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create tag
|
|
||||||
echo -e "${BLUE}Creating tag $tag...${NC}"
|
|
||||||
git tag -a "$tag" -m "Release $tag"
|
|
||||||
|
|
||||||
# Push tag
|
|
||||||
echo -e "${BLUE}Pushing tag...${NC}"
|
|
||||||
git push origin "$tag"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}SUCCESS: Release $tag created successfully!${NC}"
|
|
||||||
echo ""
|
|
||||||
echo "Useful links:"
|
|
||||||
echo " GitHub: https://github.com/andersonid/openshift-resource-governance/releases/tag/$tag"
|
|
||||||
echo " Quay.io: https://quay.io/repository/rh_ee_anobre/resource-governance"
|
|
||||||
echo ""
|
|
||||||
echo "GitHub Actions will automatically:"
|
|
||||||
echo " 1. Build container image"
|
|
||||||
echo " 2. Push to Quay.io"
|
|
||||||
echo " 3. Create GitHub release"
|
|
||||||
echo ""
|
|
||||||
echo "Wait a few minutes and check:"
|
|
||||||
echo " gh run list --repo andersonid/openshift-resource-governance --workflow='build-only.yml'"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to list releases
|
|
||||||
list_releases() {
|
|
||||||
echo -e "${BLUE}Existing releases:${NC}"
|
|
||||||
echo ""
|
|
||||||
git tag -l --sort=-version:refname | head -10
|
|
||||||
echo ""
|
|
||||||
echo "To see all: git tag -l --sort=-version:refname"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main
|
|
||||||
case "${1:-help}" in
|
|
||||||
"patch")
|
|
||||||
current_version=$(get_current_version)
|
|
||||||
new_version=$(increment_version "$current_version" "patch")
|
|
||||||
validate_version "$new_version"
|
|
||||||
create_release "$new_version"
|
|
||||||
;;
|
|
||||||
"minor")
|
|
||||||
current_version=$(get_current_version)
|
|
||||||
new_version=$(increment_version "$current_version" "minor")
|
|
||||||
validate_version "$new_version"
|
|
||||||
create_release "$new_version"
|
|
||||||
;;
|
|
||||||
"major")
|
|
||||||
current_version=$(get_current_version)
|
|
||||||
new_version=$(increment_version "$current_version" "major")
|
|
||||||
validate_version "$new_version"
|
|
||||||
create_release "$new_version"
|
|
||||||
;;
|
|
||||||
"custom")
|
|
||||||
if [ -z "$2" ]; then
|
|
||||||
echo -e "${RED}ERROR: Custom version not provided!${NC}"
|
|
||||||
echo "Usage: $0 custom 2.0.0-beta.1"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
validate_version "$2"
|
|
||||||
create_release "$2"
|
|
||||||
;;
|
|
||||||
"list")
|
|
||||||
list_releases
|
|
||||||
;;
|
|
||||||
"help"|*)
|
|
||||||
show_help
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script para configurar ImagePullSecret para Docker Hub
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Cores para output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
SECRET_NAME="docker-hub-secret"
|
|
||||||
|
|
||||||
echo -e "${BLUE}🔐 Configurando ImagePullSecret para Docker Hub${NC}"
|
|
||||||
|
|
||||||
# Verificar se está logado no OpenShift
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo -e "${RED}❌ Não está logado no OpenShift. Faça login primeiro.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}✅ Logado como: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# Verificar se o namespace existe
|
|
||||||
if ! oc get namespace $NAMESPACE > /dev/null 2>&1; then
|
|
||||||
echo -e "${YELLOW}📁 Criando namespace $NAMESPACE...${NC}"
|
|
||||||
oc create namespace $NAMESPACE
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Solicitar credenciais do Docker Hub
|
|
||||||
echo -e "${YELLOW}🔑 Digite suas credenciais do Docker Hub:${NC}"
|
|
||||||
read -p "Username: " DOCKER_USERNAME
|
|
||||||
read -s -p "Password/Token: " DOCKER_PASSWORD
|
|
||||||
echo
|
|
||||||
|
|
||||||
# Criar o secret
|
|
||||||
echo -e "${YELLOW}🔐 Criando ImagePullSecret...${NC}"
|
|
||||||
oc create secret docker-registry $SECRET_NAME \
|
|
||||||
--docker-server=docker.io \
|
|
||||||
--docker-username=$DOCKER_USERNAME \
|
|
||||||
--docker-password=$DOCKER_PASSWORD \
|
|
||||||
--docker-email=$DOCKER_USERNAME@example.com \
|
|
||||||
-n $NAMESPACE
|
|
||||||
|
|
||||||
# Adicionar o secret ao service account
|
|
||||||
echo -e "${YELLOW}🔗 Adicionando secret ao ServiceAccount...${NC}"
|
|
||||||
oc patch serviceaccount resource-governance-sa -n $NAMESPACE -p '{"imagePullSecrets": [{"name": "'$SECRET_NAME'"}]}'
|
|
||||||
|
|
||||||
echo -e "${GREEN}✅ ImagePullSecret configurado com sucesso!${NC}"
|
|
||||||
echo -e "${BLUE}📋 Secret criado: $SECRET_NAME${NC}"
|
|
||||||
echo -e "${BLUE}📋 Namespace: $NAMESPACE${NC}"
|
|
||||||
echo -e "${BLUE}📋 ServiceAccount atualizado: resource-governance-sa${NC}"
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script para configurar secrets do GitHub Actions
|
|
||||||
# Este script ajuda a configurar os secrets necessários para CI/CD
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Cores para output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
echo -e "${BLUE}🔐 Configuração de Secrets para GitHub Actions${NC}"
|
|
||||||
echo -e "${BLUE}============================================${NC}"
|
|
||||||
|
|
||||||
echo -e "${YELLOW}📋 Secrets necessários no GitHub:${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}1. DOCKERHUB_USERNAME${NC}"
|
|
||||||
echo -e " Seu usuário do Docker Hub"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}2. DOCKERHUB_TOKEN${NC}"
|
|
||||||
echo -e " Token de acesso do Docker Hub (não a senha!)"
|
|
||||||
echo " Crie em: https://hub.docker.com/settings/security"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}3. OPENSHIFT_SERVER${NC}"
|
|
||||||
echo -e " URL do seu cluster OpenShift"
|
|
||||||
echo " Exemplo: https://api.openshift.example.com:6443"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}4. OPENSHIFT_TOKEN${NC}"
|
|
||||||
echo -e " Token de acesso do OpenShift"
|
|
||||||
echo " Obtenha com: oc whoami -t"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Verificar se está logado no OpenShift
|
|
||||||
if oc whoami > /dev/null 2>&1; then
|
|
||||||
echo -e "${GREEN}✅ Logado no OpenShift como: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# Obter informações do cluster
|
|
||||||
CLUSTER_SERVER=$(oc config view --minify -o jsonpath='{.clusters[0].cluster.server}' 2>/dev/null || echo "N/A")
|
|
||||||
if [ "$CLUSTER_SERVER" != "N/A" ]; then
|
|
||||||
echo -e "${BLUE}🌐 Servidor OpenShift: ${CLUSTER_SERVER}${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Obter token
|
|
||||||
OPENSHIFT_TOKEN=$(oc whoami -t 2>/dev/null || echo "N/A")
|
|
||||||
if [ "$OPENSHIFT_TOKEN" != "N/A" ]; then
|
|
||||||
echo -e "${BLUE}🔑 Token OpenShift: ${OPENSHIFT_TOKEN:0:20}...${NC}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Não está logado no OpenShift${NC}"
|
|
||||||
echo -e "${YELLOW}💡 Faça login primeiro: oc login <server>${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${YELLOW}📝 Como configurar os secrets no GitHub:${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}1. Acesse: https://github.com/andersonid/openshift-resource-governance/settings/secrets/actions${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}2. Clique em 'New repository secret' para cada um:${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}DOCKERHUB_USERNAME${NC}"
|
|
||||||
echo -e " Valor: seu-usuario-dockerhub"
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}DOCKERHUB_TOKEN${NC}"
|
|
||||||
echo -e " Valor: dckr_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}OPENSHIFT_SERVER${NC}"
|
|
||||||
echo -e " Valor: ${CLUSTER_SERVER}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}OPENSHIFT_TOKEN${NC}"
|
|
||||||
echo -e " Valor: ${OPENSHIFT_TOKEN}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo -e "${YELLOW}🚀 Após configurar os secrets:${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}1. Faça commit e push das mudanças:${NC}"
|
|
||||||
echo -e " git add ."
|
|
||||||
echo -e " git commit -m 'Add GitHub Actions for auto-deploy'"
|
|
||||||
echo -e " git push origin main"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}2. O GitHub Actions irá:${NC}"
|
|
||||||
echo -e " ✅ Buildar a imagem automaticamente"
|
|
||||||
echo -e " ✅ Fazer push para Docker Hub"
|
|
||||||
echo -e " ✅ Fazer deploy no OpenShift"
|
|
||||||
echo -e " ✅ Atualizar o deployment com a nova imagem"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo -e "${GREEN}🎉 Configuração concluída!${NC}"
|
|
||||||
echo -e "${BLUE}💡 Para testar: faça uma mudança no código e faça push para main${NC}"
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script para testar o fluxo CI/CD localmente
|
|
||||||
# Simula o que o GitHub Actions fará
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Cores para output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
IMAGE_NAME="resource-governance"
|
|
||||||
REGISTRY="andersonid"
|
|
||||||
TAG="test-$(date +%s)"
|
|
||||||
|
|
||||||
echo -e "${BLUE}🧪 Teste do Fluxo CI/CD${NC}"
|
|
||||||
echo -e "${BLUE}========================${NC}"
|
|
||||||
echo -e "${BLUE}Tag: ${TAG}${NC}"
|
|
||||||
|
|
||||||
# 1. Verificar login no OpenShift
|
|
||||||
echo -e "${YELLOW}🔍 Verificando login no OpenShift...${NC}"
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo -e "${RED}❌ Não está logado no OpenShift. Faça login primeiro.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo -e "${GREEN}✅ Logado como: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# 2. Build da imagem
|
|
||||||
echo -e "${YELLOW}📦 Buildando imagem...${NC}"
|
|
||||||
podman build -f Dockerfile.simple -t "${REGISTRY}/${IMAGE_NAME}:${TAG}" .
|
|
||||||
podman build -f Dockerfile.simple -t "${REGISTRY}/${IMAGE_NAME}:latest" .
|
|
||||||
|
|
||||||
# 3. Push da imagem
|
|
||||||
echo -e "${YELLOW}📤 Fazendo push da imagem...${NC}"
|
|
||||||
podman push "${REGISTRY}/${IMAGE_NAME}:${TAG}"
|
|
||||||
podman push "${REGISTRY}/${IMAGE_NAME}:latest"
|
|
||||||
|
|
||||||
# 4. Atualizar deployment
|
|
||||||
echo -e "${YELLOW}🔄 Atualizando deployment...${NC}"
|
|
||||||
oc set image deployment/${IMAGE_NAME} ${IMAGE_NAME}=${REGISTRY}/${IMAGE_NAME}:${TAG} -n ${NAMESPACE}
|
|
||||||
|
|
||||||
# 5. Aguardar rollout
|
|
||||||
echo -e "${YELLOW}⏳ Aguardando rollout...${NC}"
|
|
||||||
oc rollout status deployment/${IMAGE_NAME} -n ${NAMESPACE} --timeout=120s
|
|
||||||
|
|
||||||
# 6. Verificar status
|
|
||||||
echo -e "${YELLOW}📊 Verificando status...${NC}"
|
|
||||||
oc get deployment ${IMAGE_NAME} -n ${NAMESPACE}
|
|
||||||
oc get pods -n ${NAMESPACE} -l app.kubernetes.io/name=${IMAGE_NAME}
|
|
||||||
|
|
||||||
# 7. Testar aplicação
|
|
||||||
echo -e "${YELLOW}🏥 Testando aplicação...${NC}"
|
|
||||||
oc port-forward service/${IMAGE_NAME}-service 8081:8080 -n ${NAMESPACE} &
|
|
||||||
PORT_FORWARD_PID=$!
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
if curl -s http://localhost:8081/api/v1/health > /dev/null; then
|
|
||||||
echo -e "${GREEN}✅ Aplicação está funcionando com a nova imagem!${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Aplicação não está respondendo${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
kill $PORT_FORWARD_PID 2>/dev/null || true
|
|
||||||
|
|
||||||
# 8. Mostrar informações
|
|
||||||
echo -e "${GREEN}🎉 Teste CI/CD concluído!${NC}"
|
|
||||||
echo -e "${BLUE}📊 Status do deployment:${NC}"
|
|
||||||
oc get deployment ${IMAGE_NAME} -n ${NAMESPACE} -o wide
|
|
||||||
|
|
||||||
echo -e "${BLUE}🔍 Imagem atual:${NC}"
|
|
||||||
oc get deployment ${IMAGE_NAME} -n ${NAMESPACE} -o jsonpath='{.spec.template.spec.containers[0].image}'
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo -e "${BLUE}💡 Para reverter para latest:${NC}"
|
|
||||||
echo -e " oc set image deployment/${IMAGE_NAME} ${IMAGE_NAME}=${REGISTRY}/${IMAGE_NAME}:latest -n ${NAMESPACE}"
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script de teste de deploy (sem input interativo)
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Cores para output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
# Configurações
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
APP_NAME="resource-governance"
|
|
||||||
|
|
||||||
echo -e "${BLUE}🧪 Teste de Deploy - OpenShift Resource Governance Tool${NC}"
|
|
||||||
echo -e "${BLUE}====================================================${NC}"
|
|
||||||
|
|
||||||
# Verificar se está logado no OpenShift
|
|
||||||
if ! oc whoami > /dev/null 2>&1; then
|
|
||||||
echo -e "${RED}❌ Não está logado no OpenShift. Faça login primeiro.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}✅ Logado como: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# Aplicar manifests
|
|
||||||
echo -e "${YELLOW}📁 Aplicando manifests...${NC}"
|
|
||||||
oc apply -f k8s/namespace.yaml
|
|
||||||
oc apply -f k8s/rbac.yaml
|
|
||||||
oc apply -f k8s/configmap.yaml
|
|
||||||
|
|
||||||
# Criar ImagePullSecret temporário (sem credenciais reais)
|
|
||||||
echo -e "${YELLOW}🔐 Criando ImagePullSecret temporário...${NC}"
|
|
||||||
oc create secret docker-registry docker-hub-secret \
|
|
||||||
--docker-server=docker.io \
|
|
||||||
--docker-username=andersonid \
|
|
||||||
--docker-password=temp \
|
|
||||||
--docker-email=andersonid@example.com \
|
|
||||||
-n $NAMESPACE \
|
|
||||||
--dry-run=client -o yaml | oc apply -f -
|
|
||||||
|
|
||||||
# Adicionar o secret ao service account
|
|
||||||
oc patch serviceaccount resource-governance-sa -n $NAMESPACE -p '{"imagePullSecrets": [{"name": "docker-hub-secret"}]}'
|
|
||||||
|
|
||||||
# Aplicar DaemonSet
|
|
||||||
echo -e "${YELLOW}📦 Aplicando DaemonSet...${NC}"
|
|
||||||
oc apply -f k8s/daemonset.yaml
|
|
||||||
|
|
||||||
# Aplicar Service
|
|
||||||
echo -e "${YELLOW}🌐 Aplicando Service...${NC}"
|
|
||||||
oc apply -f k8s/service.yaml
|
|
||||||
|
|
||||||
# Aplicar Route
|
|
||||||
echo -e "${YELLOW}🛣️ Aplicando Route...${NC}"
|
|
||||||
oc apply -f k8s/route.yaml
|
|
||||||
|
|
||||||
# Verificar status
|
|
||||||
echo -e "${YELLOW}📊 Verificando status...${NC}"
|
|
||||||
oc get all -n $NAMESPACE
|
|
||||||
|
|
||||||
echo -e "${GREEN}✅ Deploy de teste concluído!${NC}"
|
|
||||||
echo -e "${BLUE}💡 Para configurar credenciais reais do Docker Hub, execute:${NC}"
|
|
||||||
echo -e "${BLUE} ./scripts/setup-docker-secret.sh${NC}"
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script de undeploy para OpenShift Resource Governance Tool
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Cores para output
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
# Configurações
|
|
||||||
NAMESPACE="resource-governance"
|
|
||||||
|
|
||||||
echo -e "${BLUE}🗑️ Undeploying OpenShift Resource Governance Tool${NC}"
|
|
||||||
echo -e "${BLUE}Namespace: ${NAMESPACE}${NC}"
|
|
||||||
|
|
||||||
# Verificar se oc está instalado
|
|
||||||
if ! command -v oc &> /dev/null; then
|
|
||||||
echo -e "${RED}❌ OpenShift CLI (oc) não está instalado.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Verificar se está logado no OpenShift
|
|
||||||
if ! oc whoami &> /dev/null; then
|
|
||||||
echo -e "${RED}❌ Não está logado no OpenShift.${NC}"
|
|
||||||
echo -e "${YELLOW}Faça login com: oc login <cluster-url>${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}✅ Logado como: $(oc whoami)${NC}"
|
|
||||||
|
|
||||||
# Confirmar remoção
|
|
||||||
read -p "Tem certeza que deseja remover a aplicação? (y/N): " -n 1 -r
|
|
||||||
echo
|
|
||||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
||||||
echo -e "${YELLOW}❌ Operação cancelada.${NC}"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remover Route
|
|
||||||
echo -e "${YELLOW}🛣️ Removing Route...${NC}"
|
|
||||||
oc delete -f k8s/route.yaml --ignore-not-found=true
|
|
||||||
|
|
||||||
# Remover Service
|
|
||||||
echo -e "${YELLOW}🌐 Removing Service...${NC}"
|
|
||||||
oc delete -f k8s/service.yaml --ignore-not-found=true
|
|
||||||
|
|
||||||
# Remover DaemonSet
|
|
||||||
echo -e "${YELLOW}📦 Removing DaemonSet...${NC}"
|
|
||||||
oc delete -f k8s/daemonset.yaml --ignore-not-found=true
|
|
||||||
|
|
||||||
# Aguardar pods serem removidos
|
|
||||||
echo -e "${YELLOW}⏳ Waiting for pods to be terminated...${NC}"
|
|
||||||
oc wait --for=delete pod -l app.kubernetes.io/name=resource-governance -n "${NAMESPACE}" --timeout=60s || true
|
|
||||||
|
|
||||||
# Remover ConfigMap
|
|
||||||
echo -e "${YELLOW}⚙️ Removing ConfigMap...${NC}"
|
|
||||||
oc delete -f k8s/configmap.yaml --ignore-not-found=true
|
|
||||||
|
|
||||||
# Remover RBAC
|
|
||||||
echo -e "${YELLOW}🔐 Removing RBAC...${NC}"
|
|
||||||
oc delete -f k8s/rbac.yaml --ignore-not-found=true
|
|
||||||
|
|
||||||
# Remover namespace (opcional)
|
|
||||||
read -p "Deseja remover o namespace também? (y/N): " -n 1 -r
|
|
||||||
echo
|
|
||||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
||||||
echo -e "${YELLOW}📁 Removing namespace...${NC}"
|
|
||||||
oc delete -f k8s/namespace.yaml --ignore-not-found=true
|
|
||||||
echo -e "${GREEN}✅ Namespace removed.${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${YELLOW}⚠️ Namespace mantido.${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}🎉 Undeploy completed successfully!${NC}"
|
|
||||||
|
|
||||||
# Verificar se ainda há recursos
|
|
||||||
echo -e "${BLUE}🔍 Checking remaining resources:${NC}"
|
|
||||||
oc get all -n "${NAMESPACE}" 2>/dev/null || echo -e "${GREEN}✅ No resources found in namespace.${NC}"
|
|
||||||
@@ -1,180 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Webhook for automatic deployment after GitHub Actions
|
|
||||||
This script can be run as a service to detect changes on Docker Hub
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import json
|
|
||||||
import subprocess
|
|
||||||
import logging
|
|
||||||
from flask import Flask, request, jsonify
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
# Logging configuration
|
|
||||||
logging.basicConfig(level=logging.INFO)
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
IMAGE_NAME = os.getenv('IMAGE_NAME', 'resource-governance')
|
|
||||||
REGISTRY = os.getenv('REGISTRY', 'andersonid')
|
|
||||||
NAMESPACE = os.getenv('NAMESPACE', 'resource-governance')
|
|
||||||
SCRIPT_PATH = os.getenv('AUTO_DEPLOY_SCRIPT', './scripts/auto-deploy.sh')
|
|
||||||
|
|
||||||
@app.route('/webhook/dockerhub', methods=['POST'])
|
|
||||||
def dockerhub_webhook():
|
|
||||||
"""Webhook to receive Docker Hub notifications"""
|
|
||||||
try:
|
|
||||||
data = request.get_json()
|
|
||||||
|
|
||||||
# Check if it's a push notification
|
|
||||||
if data.get('push_data', {}).get('tag') == 'latest':
|
|
||||||
logger.info(f"Received push notification for {REGISTRY}/{IMAGE_NAME}:latest")
|
|
||||||
|
|
||||||
# Execute automatic deployment
|
|
||||||
result = run_auto_deploy('latest')
|
|
||||||
|
|
||||||
return jsonify({
|
|
||||||
'status': 'success',
|
|
||||||
'message': 'Automatic deployment started',
|
|
||||||
'result': result
|
|
||||||
}), 200
|
|
||||||
else:
|
|
||||||
logger.info(f"Push ignored - tag: {data.get('push_data', {}).get('tag')}")
|
|
||||||
return jsonify({'status': 'ignored', 'message': 'Tag is not latest'}), 200
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Webhook error: {e}")
|
|
||||||
return jsonify({'status': 'error', 'message': str(e)}), 500
|
|
||||||
|
|
||||||
@app.route('/webhook/github', methods=['POST'])
|
|
||||||
def github_webhook():
|
|
||||||
"""Webhook to receive GitHub notifications"""
|
|
||||||
try:
|
|
||||||
# Check if it's a push to main
|
|
||||||
if request.headers.get('X-GitHub-Event') == 'push':
|
|
||||||
data = request.get_json()
|
|
||||||
|
|
||||||
if data.get('ref') == 'refs/heads/main':
|
|
||||||
logger.info("Received push notification for main branch")
|
|
||||||
|
|
||||||
# Execute automatic deployment
|
|
||||||
result = run_auto_deploy('latest')
|
|
||||||
|
|
||||||
return jsonify({
|
|
||||||
'status': 'success',
|
|
||||||
'message': 'Automatic deployment started',
|
|
||||||
'result': result
|
|
||||||
}), 200
|
|
||||||
else:
|
|
||||||
logger.info(f"Push ignored - branch: {data.get('ref')}")
|
|
||||||
return jsonify({'status': 'ignored', 'message': 'Branch is not main'}), 200
|
|
||||||
else:
|
|
||||||
logger.info(f"Event ignored: {request.headers.get('X-GitHub-Event')}")
|
|
||||||
return jsonify({'status': 'ignored', 'message': 'Event is not push'}), 200
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Webhook error: {e}")
|
|
||||||
return jsonify({'status': 'error', 'message': str(e)}), 500
|
|
||||||
|
|
||||||
@app.route('/deploy/<tag>', methods=['POST'])
|
|
||||||
def manual_deploy(tag):
|
|
||||||
"""Manual deployment with specific tag"""
|
|
||||||
try:
|
|
||||||
logger.info(f"Manual deployment requested for tag: {tag}")
|
|
||||||
|
|
||||||
result = run_auto_deploy(tag)
|
|
||||||
|
|
||||||
return jsonify({
|
|
||||||
'status': 'success',
|
|
||||||
'message': f'Manual deployment started for tag: {tag}',
|
|
||||||
'result': result
|
|
||||||
}), 200
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Manual deployment error: {e}")
|
|
||||||
return jsonify({'status': 'error', 'message': str(e)}), 500
|
|
||||||
|
|
||||||
def run_auto_deploy(tag):
|
|
||||||
"""Execute automatic deployment script"""
|
|
||||||
try:
|
|
||||||
logger.info(f"Executing automatic deployment for tag: {tag}")
|
|
||||||
|
|
||||||
# Execute deployment script
|
|
||||||
result = subprocess.run(
|
|
||||||
[SCRIPT_PATH, tag],
|
|
||||||
capture_output=True,
|
|
||||||
text=True,
|
|
||||||
timeout=600 # 10 minutes timeout
|
|
||||||
)
|
|
||||||
|
|
||||||
if result.returncode == 0:
|
|
||||||
logger.info("Automatic deployment completed successfully")
|
|
||||||
return {
|
|
||||||
'success': True,
|
|
||||||
'stdout': result.stdout,
|
|
||||||
'stderr': result.stderr
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
logger.error(f"Automatic deployment failed: {result.stderr}")
|
|
||||||
return {
|
|
||||||
'success': False,
|
|
||||||
'stdout': result.stdout,
|
|
||||||
'stderr': result.stderr
|
|
||||||
}
|
|
||||||
|
|
||||||
except subprocess.TimeoutExpired:
|
|
||||||
logger.error("Automatic deployment timeout")
|
|
||||||
return {
|
|
||||||
'success': False,
|
|
||||||
'error': 'Timeout'
|
|
||||||
}
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Error executing automatic deployment: {e}")
|
|
||||||
return {
|
|
||||||
'success': False,
|
|
||||||
'error': str(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
@app.route('/health', methods=['GET'])
|
|
||||||
def health():
|
|
||||||
"""Health check"""
|
|
||||||
return jsonify({
|
|
||||||
'status': 'healthy',
|
|
||||||
'timestamp': datetime.now().isoformat(),
|
|
||||||
'image': f'{REGISTRY}/{IMAGE_NAME}',
|
|
||||||
'namespace': NAMESPACE
|
|
||||||
}), 200
|
|
||||||
|
|
||||||
@app.route('/status', methods=['GET'])
|
|
||||||
def status():
|
|
||||||
"""Service status"""
|
|
||||||
try:
|
|
||||||
# Check if logged into OpenShift
|
|
||||||
result = subprocess.run(['oc', 'whoami'], capture_output=True, text=True)
|
|
||||||
|
|
||||||
return jsonify({
|
|
||||||
'status': 'running',
|
|
||||||
'timestamp': datetime.now().isoformat(),
|
|
||||||
'openshift_user': result.stdout.strip() if result.returncode == 0 else 'Not logged in',
|
|
||||||
'image': f'{REGISTRY}/{IMAGE_NAME}',
|
|
||||||
'namespace': NAMESPACE,
|
|
||||||
'script_path': SCRIPT_PATH
|
|
||||||
}), 200
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
return jsonify({
|
|
||||||
'status': 'error',
|
|
||||||
'message': str(e)
|
|
||||||
}), 500
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
port = int(os.getenv('PORT', 8080))
|
|
||||||
debug = os.getenv('DEBUG', 'false').lower() == 'true'
|
|
||||||
|
|
||||||
logger.info(f"Starting webhook server on port {port}")
|
|
||||||
logger.info(f"Configuration: IMAGE_NAME={IMAGE_NAME}, REGISTRY={REGISTRY}, NAMESPACE={NAMESPACE}")
|
|
||||||
|
|
||||||
app.run(host='0.0.0.0', port=port, debug=debug)
|
|
||||||
Reference in New Issue
Block a user