Files
jovies/.github/workflows/deploy.yml
Mayne0213 3c10907a97 INIT(app): initial commit
- Initialize project structure
- Add base configuration
2025-11-22 23:44:51 +09:00

112 lines
3.4 KiB
YAML

name: Deploy to Kubernetes
on:
workflow_run:
workflows: ["Build Docker Image"]
types:
- completed
branches: [main]
workflow_dispatch:
inputs:
image_tag:
description: 'Docker image tag to deploy (e.g., main-abc1234)'
required: false
default: 'latest'
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
K8S_NAMESPACE: jovies
jobs:
deploy:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup kubectl
uses: azure/setup-kubectl@v3
with:
version: 'latest'
- name: Configure kubectl with Lightsail
run: |
mkdir -p ~/.kube
echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > ~/.kube/config
chmod 600 ~/.kube/config
# Verify connection
kubectl cluster-info
kubectl get nodes
- name: Determine image tag
id: image
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
TAG="${{ github.event.inputs.image_tag }}"
else
# Use the commit SHA from the workflow_run event
TAG="main-$(echo ${{ github.sha }} | cut -c1-7)"
fi
FULL_IMAGE="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${TAG}"
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "full_image=${FULL_IMAGE}" >> $GITHUB_OUTPUT
echo "🐳 Deploying image: ${FULL_IMAGE}"
- name: Make scripts executable
run: |
chmod +x ./scripts/common.sh
chmod +x ./scripts/k8s-deploy.sh
- name: Deploy to Kubernetes using script
run: |
./scripts/k8s-deploy.sh \
--namespace ${{ env.K8S_NAMESPACE }} \
--no-build \
--app-image ${{ steps.image.outputs.full_image }}
env:
TERM: dumb
- name: Wait for rollout to complete
run: |
echo "⏳ Waiting for deployment rollout..."
kubectl rollout status deployment/jovies-app \
-n ${{ env.K8S_NAMESPACE }} \
--timeout=5m
- name: Verify deployment
run: |
echo "📊 Deployment status:"
kubectl get deployments -n ${{ env.K8S_NAMESPACE }}
echo ""
echo "🔍 Pod status:"
kubectl get pods -n ${{ env.K8S_NAMESPACE }}
echo ""
echo "🌐 Service status:"
kubectl get services -n ${{ env.K8S_NAMESPACE }}
- name: Get deployment info
run: |
echo "✅ Deployment completed!"
echo ""
echo "📦 Deployed image: ${{ steps.image.outputs.full_image }}"
echo "🏷️ Namespace: ${{ env.K8S_NAMESPACE }}"
echo ""
echo "🔗 Useful commands:"
echo " - View logs: kubectl logs -n ${{ env.K8S_NAMESPACE }} -l app=jovies-app -f"
echo " - Port forward: kubectl port-forward -n ${{ env.K8S_NAMESPACE }} deploy/jovies-app 3000:3000"
echo " - Rollback: kubectl rollout undo deployment/jovies-app -n ${{ env.K8S_NAMESPACE }}"
- name: Deployment failure notification
if: failure()
run: |
echo "❌ Deployment failed!"
echo "Check logs with: kubectl logs -n ${{ env.K8S_NAMESPACE }} -l app=jovies-app"
exit 1