Skip to content

Infrastructure Services CI/CD #4

Infrastructure Services CI/CD

Infrastructure Services CI/CD #4

name: Infrastructure Services CI/CD
on:
workflow_dispatch:
inputs:
environment:
type: choice
description: "Deployment environment"
options:
- prod
- staging
- debug
default: "prod"
action:
type: choice
description: "Action to perform"
options:
- deploy
- restart
- start
- stop
- status
default: "restart"
service:
type: choice
description: "Target service"
options:
- all
- kafka
- zookeeper
- redis
- kafka-cli
default: "all"
jobs:
deploy-infrastructure:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: List repository contents
run: |
echo "Working Directory: $(pwd)"
echo "Repository Contents:"
ls -la .
echo "Infrastructure Directory:"
ls -la ./infrastructure || echo "Infrastructure directory not found"
- name: Deploy to VPS
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
command_timeout: "10m"
script: |
echo "==== Altyapı Servisleri Yönetimi Başlatılıyor ===="
set -e # Herhangi bir komut hata verirse scripti durdur
# Infrastructure dizinini oluştur (yoksa)
sudo mkdir -p /opt/craftpilot/infrastructure
sudo chown -R $USER:$USER /opt/craftpilot/infrastructure
cd /opt/craftpilot/infrastructure || exit 1
# Mevcut docker-compose.infra.yml dosyasını yedekle
if [ -f docker-compose.infra.yml ]; then
cp docker-compose.infra.yml docker-compose.infra.yml.bak.$(date +%Y%m%d%H%M%S)
fi
# GitHub repository'den docker-compose dosyasını indir ve hata kontrolü yap
echo "Docker compose dosyası indiriliyor..."
HTTP_CODE=$(curl -s -w '%{http_code}' -H "Accept: application/vnd.github.v3.raw" \
-o docker-compose.infra.yml \
-L "https://raw.githubusercontent.com/OmerSah/Craft-Pilot-Ai/main/infrastructure/docker-compose.infra.yml")
if [ "$HTTP_CODE" != "200" ]; then
echo "HATA: docker-compose.infra.yml dosyası indirilemedi! HTTP Code: $HTTP_CODE"
exit 1
fi
if [ ! -f docker-compose.infra.yml ] || [ ! -s docker-compose.infra.yml ]; then
echo "HATA: docker-compose.infra.yml dosyası boş veya eksik!"
exit 1
fi
# Docker compose dosyasının geçerliliğini kontrol et
if ! docker-compose -f docker-compose.infra.yml config > /dev/null; then
echo "HATA: docker-compose.infra.yml dosyası geçersiz!"
exit 1
fi
ACTION="${{ github.event.inputs.action }}"
SERVICE="${{ github.event.inputs.service }}"
ENV="${{ github.event.inputs.environment }}"
# Servis parametresine göre işlem yapılacak servis(ler)i belirle
if [ "$SERVICE" == "all" ]; then
SERVICE_PARAM=""
else
SERVICE_PARAM="$SERVICE"
fi
# Environment değişkenlerini ayarla
export ENV=$ENV
# Docker ve docker-compose'un çalıştığından emin ol
if ! docker info >/dev/null 2>&1; then
echo "HATA: Docker servisine erişilemiyor!"
exit 1
fi
if ! command -v docker-compose >/dev/null 2>&1; then
echo "HATA: docker-compose bulunamadı!"
exit 1
fi
# İstenen eylemi gerçekleştir
case "$ACTION" in
deploy)
echo "==== Servisler durduruluyor: $SERVICE ===="
docker-compose -f docker-compose.infra.yml down $SERVICE_PARAM || true
echo "==== Servisler yeniden oluşturuluyor: $SERVICE ===="
docker-compose -f docker-compose.infra.yml up -d $SERVICE_PARAM
sleep 10 # Servislerin başlaması için bekle
echo "==== Servis durumu kontrol ediliyor ===="
docker-compose -f docker-compose.infra.yml ps
;;
restart)
echo "==== Servisler yeniden başlatılıyor: $SERVICE ===="
docker-compose -f docker-compose.infra.yml restart $SERVICE_PARAM
echo "==== Servis durumu kontrol ediliyor ===="
docker-compose -f docker-compose.infra.yml ps
;;
start)
echo "==== Servisler başlatılıyor: $SERVICE ===="
docker-compose -f docker-compose.infra.yml up -d $SERVICE_PARAM
echo "==== Servis durumu kontrol ediliyor ===="
docker-compose -f docker-compose.infra.yml ps
;;
stop)
echo "==== Servisler durduruluyor: $SERVICE ===="
docker-compose -f docker-compose.infra.yml stop $SERVICE_PARAM
echo "==== Servis durumu kontrol ediliyor ===="
docker-compose -f docker-compose.infra.yml ps
;;
status)
echo "==== Servis durumu kontrol ediliyor ===="
docker-compose -f docker-compose.infra.yml ps
# Redis durumu kontrolü
if [ "$SERVICE" == "all" ] || [ "$SERVICE" == "redis" ]; then
echo ""
echo "==== Redis Durumu ===="
if docker exec -t redis redis-cli -a 13579ada ping | grep -q 'PONG'; then
echo "Redis çalışıyor"
echo "Bilgiler:"
docker exec -t redis redis-cli -a 13579ada info | grep connected
docker exec -t redis redis-cli -a 13579ada info memory | grep used_memory_human
docker exec -t redis redis-cli -a 13579ada info keyspace
else
echo "Redis yanıt vermiyor veya çalışmıyor!"
fi
fi
# Kafka durumu kontrolü
if [ "$SERVICE" == "all" ] || [ "$SERVICE" == "kafka" ] || [ "$SERVICE" == "kafka-cli" ]; then
echo ""
echo "==== Kafka Durumu ===="
if docker exec -t kafka bash -c "kafka-topics --bootstrap-server localhost:9092 --list" > /dev/null 2>&1; then
echo "Kafka çalışıyor"
echo "Topics:"
docker exec -t kafka kafka-topics --bootstrap-server localhost:9092 --list
echo ""
echo "Consumer Grupları:"
docker exec -t kafka kafka-consumer-groups --bootstrap-server localhost:9092 --list
else
echo "Kafka yanıt vermiyor veya çalışmıyor!"
fi
fi
# Zookeeper durumu kontrolü
if [ "$SERVICE" == "all" ] || [ "$SERVICE" == "zookeeper" ]; then
echo ""
echo "==== Zookeeper Durumu ===="
if docker exec -t zookeeper bash -c "echo ruok | nc localhost 2181" | grep -q 'imok'; then
echo "Zookeeper çalışıyor"
else
echo "Zookeeper yanıt vermiyor veya çalışmıyor!"
fi
fi
;;
*)
echo "Geçersiz işlem: $ACTION"
exit 1
;;
esac
# Başarı durumunu kontrol et
if [ $? -eq 0 ]; then
echo "==== Altyapı Servisleri Yönetimi Başarıyla Tamamlandı ===="
else
echo "==== HATA: Altyapı Servisleri Yönetiminde Sorun Oluştu ===="
exit 1
fi
- name: Kafka CLI Kullanım Kılavuzu
if: ${{ github.event.inputs.action == 'status' && (github.event.inputs.service == 'kafka' || github.event.inputs.service == 'all' || github.event.inputs.service == 'kafka-cli') }}
run: |
echo "==== Kafka CLI Kullanım Kılavuzu ===="
echo ""
echo "Topic Listeleme:"
echo " docker exec -t kafka-tools kafka-topics --bootstrap-server kafka:9092 --list"
echo ""
echo "Topic Detayları:"
echo " docker exec -t kafka-tools kafka-topics --bootstrap-server kafka:9092 --describe --topic [TOPIC_ADI]"
echo ""
echo "Bir Topic'teki Mesajları İzleme:"
echo " docker exec -it kafka-tools kafka-console-consumer --bootstrap-server kafka:9092 --topic [TOPIC_ADI] --from-beginning"
echo ""
echo "Bir Topic'e Mesaj Gönderme:"
echo " docker exec -it kafka-tools kafka-console-producer --broker-list kafka:9092 --topic [TOPIC_ADI]"
echo ""
echo "Consumer Gruplarını Listeleme:"
echo " docker exec -t kafka-tools kafka-consumer-groups --bootstrap-server kafka:9092 --list"
echo ""
echo "Consumer Grup Detayları:"
echo " docker exec -t kafka-tools kafka-consumer-groups --bootstrap-server kafka:9092 --describe --group [GRUP_ADI]"
echo ""
echo "Örnek Topic İzleme (user-events):"
echo " docker exec -it kafka-tools kafka-console-consumer --bootstrap-server kafka:9092 --topic user-events --from-beginning"