feat: Implement automated project deployment using a webhook service and a shell script.
This commit is contained in:
15
webhook/docker-compose.yml
Normal file
15
webhook/docker-compose.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
services:
|
||||||
|
webhook:
|
||||||
|
image: alpine:3.19
|
||||||
|
container_name: webhook-receiver
|
||||||
|
command: [ "sh", "-c", "apk add --no-cache webhook docker-cli && webhook -hooks /etc/webhook/hooks.json -verbose" ]
|
||||||
|
volumes:
|
||||||
|
- ./hooks.json:/etc/webhook/hooks.json:ro
|
||||||
|
- ./scripts:/etc/webhook/scripts:ro
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- /Volume1/DockerAppsData/git:/Volume1/DockerAppsData/git:ro
|
||||||
|
- /Volume1/DockerAppsData/mixapp:/Volume1/DockerAppsData/mixapp
|
||||||
|
# ДОБАВЛЕНО: Монтируем папку с docker-compose файлами
|
||||||
|
- /Volume1/DockerYAML:/Volume1/DockerYAML
|
||||||
|
network_mode: host
|
||||||
|
restart: unless-stopped
|
||||||
64
webhook/scripts/deploy-myproject.sh
Normal file
64
webhook/scripts/deploy-myproject.sh
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Скрипт деплоя для octopus (FIXED v4 - Auto-Update Compose)
|
||||||
|
LOG_FILE="/tmp/deploy-octopus.log"
|
||||||
|
HASH_FILE="/tmp/requirements-hash.txt"
|
||||||
|
DOCKER_COMPOSE_DIR="/Volume1/DockerYAML/mix"
|
||||||
|
APP_ROOT="/Volume1/DockerAppsData/mixapp/app"
|
||||||
|
|
||||||
|
echo "=== Deploy started at $(date) ===" >> "$LOG_FILE"
|
||||||
|
|
||||||
|
# 1. Git pull
|
||||||
|
echo "Step 1: Git pull..." >> "$LOG_FILE"
|
||||||
|
docker exec git-cli sh -c "cd /git/octopus && git pull" >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
# 2. Вычисляем общий хеш (requirements + docker config + docker-compose)
|
||||||
|
echo "Step 2: Checking for structural changes..." >> "$LOG_FILE"
|
||||||
|
NEW_HASH=$(docker exec git-cli sh -c "cd /git/octopus && cat myproject/requirements.txt docker/* docker/docker-compose.yml | md5sum" | awk '{print $1}')
|
||||||
|
|
||||||
|
OLD_HASH=""
|
||||||
|
if [ -f "$HASH_FILE" ]; then
|
||||||
|
OLD_HASH=$(cat "$HASH_FILE")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. Копируем файлы приложения
|
||||||
|
echo "Step 3: Copying app files..." >> "$LOG_FILE"
|
||||||
|
rm -rf "$APP_ROOT/myproject"/*
|
||||||
|
cp -r /Volume1/DockerAppsData/git/octopus/myproject/. "$APP_ROOT/myproject/" >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
rm -rf "$APP_ROOT/docker"
|
||||||
|
mkdir -p "$APP_ROOT/docker"
|
||||||
|
cp -r /Volume1/DockerAppsData/git/octopus/docker/. "$APP_ROOT/docker/" >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
# 4. Обновляем docker-compose.yml (Infrastructure as Code)
|
||||||
|
echo "Step 4: Updating docker-compose.yml..." >> "$LOG_FILE"
|
||||||
|
cp /Volume1/DockerAppsData/git/octopus/docker/docker-compose.yml "$DOCKER_COMPOSE_DIR/docker-compose.yml" >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
# 5. Устанавливаем права
|
||||||
|
echo "Step 5: Setting permissions..." >> "$LOG_FILE"
|
||||||
|
chown -R 1000:1000 "$APP_ROOT" >> "$LOG_FILE" 2>&1
|
||||||
|
chmod +x "$APP_ROOT/docker/entrypoint.sh" >> "$LOG_FILE" 2>&1
|
||||||
|
chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/media >> "$LOG_FILE" 2>&1
|
||||||
|
chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/static >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
# 6. Логика пересборки
|
||||||
|
cd "$DOCKER_COMPOSE_DIR"
|
||||||
|
|
||||||
|
if [ "$NEW_HASH" != "$OLD_HASH" ]; then
|
||||||
|
echo "Step 6: Changes detected! Rebuilding ALL images..." >> "$LOG_FILE"
|
||||||
|
docker-compose build >> "$LOG_FILE" 2>&1
|
||||||
|
echo "$NEW_HASH" > "$HASH_FILE"
|
||||||
|
echo "Images rebuilt successfully!" >> "$LOG_FILE"
|
||||||
|
else
|
||||||
|
echo "Step 6: No structure changes, skipping rebuild." >> "$LOG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 7. Полный перезапуск
|
||||||
|
echo "Step 7: Restarting ALL containers..." >> "$LOG_FILE"
|
||||||
|
docker-compose down >> "$LOG_FILE" 2>&1
|
||||||
|
docker-compose up -d >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
# Проверка
|
||||||
|
echo "Step 8: Check status..." >> "$LOG_FILE"
|
||||||
|
docker-compose ps >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
echo "=== Deploy finished at $(date) ===" >> "$LOG_FILE"
|
||||||
Reference in New Issue
Block a user