Что такое ошибка Archive creation failed?
Ошибка Archive creation failed
возникает, когда CI/CD пайплайн не может создать архив (ZIP, TAR, RAR) из файлов проекта для деплоя, бэкапа или передачи артефактов.
Причины возникновения
- Недостаточно места на диске
- Проблемы с правами доступа к файлам
- Слишком большие файлы для архивирования
- Проблемы с сетевым подключением
- Ошибки в конфигурации архивирования
- Проблемы с кодировкой имен файлов
- Таймауты при создании архива
Как отладить ошибку
- Проверь свободное место на диске - убедись в достаточном объеме
- Проверь права доступа - убедись в правах на чтение файлов
- Проверь размер файлов - убедись в разумности размера архива
- Проверь сетевое подключение - убедись в стабильности сети
- Проверь конфигурацию - убедись в правильности настроек
Как исправить ошибку
1. Проверь и освободи место на диске
2. Настрой правильные права доступа
1# .github/workflows/archive-permissions.yml
2name: Archive Creation
3on: [push]
4
5jobs:
6 create-archive:
7 runs-on: ubuntu-latest
8 steps:
9 - uses: actions/checkout@v3
10
11 - name: Set file permissions
12 run: |
13 find . -type f -exec chmod 644 {} \;
14 find . -type d -exec chmod 755 {} \;
15 find . -name "*.sh" -exec chmod +x {} \;
16
17 - name: Create archive
18 run: |
19 tar -czf artifacts.tar.gz --exclude=node_modules --exclude=.git .
3. Оптимизируй процесс архивирования
1#!/bin/bash
2# optimized_archive.sh
3
4# Настройка переменных
5ARCHIVE_NAME="app-$(date +%Y%m%d-%H%M%S).tar.gz"
6EXCLUDE_PATTERNS="--exclude=node_modules --exclude=.git --exclude=*.log --exclude=tmp"
7
8# Проверка места
9REQUIRED_SPACE=$(du -s . | awk '{print $1}')
10AVAILABLE_SPACE=$(df . | awk 'NR==2 {print $4}')
11
12if [ $REQUIRED_SPACE -gt $AVAILABLE_SPACE ]; then
13 echo "ERROR: Not enough disk space"
14 exit 1
15fi
16
17# Создание архива с прогрессом
18echo "Creating archive: $ARCHIVE_NAME"
19tar -czf "$ARCHIVE_NAME" $EXCLUDE_PATTERNS . 2>&1 | pv -l > /dev/null
20
21# Проверка успешности
22if [ $? -eq 0 ]; then
23 echo "Archive created successfully: $ARCHIVE_NAME"
24 ls -lh "$ARCHIVE_NAME"
25else
26 echo "Archive creation failed"
27 exit 1
28fi
4. Используй инкрементальное архивирование
1#!/bin/bash
2# incremental_archive.sh
3
4# Создание инкрементального архива
5TIMESTAMP=$(date +%Y%m%d-%H%M%S)
6ARCHIVE_NAME="app-incremental-$TIMESTAMP.tar.gz"
7
8# Создание списка измененных файлов
9CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD)
10
11if [ -n "$CHANGED_FILES" ]; then
12 echo "Creating incremental archive with changed files..."
13 tar -czf "$ARCHIVE_NAME" $CHANGED_FILES
14 echo "Incremental archive created: $ARCHIVE_NAME"
15else
16 echo "No changes detected, skipping archive creation"
17fi
5. Настрой параллельное архивирование
1# .github/workflows/parallel-archive.yml
2name: Parallel Archive Creation
3on: [push]
4
5jobs:
6 archive-frontend:
7 runs-on: ubuntu-latest
8 steps:
9 - uses: actions/checkout@v3
10 - name: Archive frontend
11 run: |
12 cd frontend
13 tar -czf ../frontend.tar.gz .
14
15 archive-backend:
16 runs-on: ubuntu-latest
17 steps:
18 - uses: actions/checkout@v3
19 - name: Archive backend
20 run: |
21 cd backend
22 tar -czf ../backend.tar.gz .
23
24 combine-archives:
25 runs-on: ubuntu-latest
26 needs: [archive-frontend, archive-backend]
27 steps:
28 - uses: actions/checkout@v3
29 - name: Combine archives
30 run: |
31 tar -czf combined.tar.gz frontend.tar.gz backend.tar.gz
6. Добавь обработку ошибок архивирования
1#!/bin/bash
2# archive_with_error_handling.sh
3
4set -e # Остановка при ошибке
5
6# Функция для обработки ошибок
7handle_archive_error() {
8 echo "Archive creation failed: $1"
9 # Отправка уведомления
10 curl -X POST -H "Content-Type: application/json" \
11 -d '{"text":"Archive creation failed"}' \
12 $SLACK_WEBHOOK_URL
13 exit 1
14}
15
16# Создание архива с обработкой ошибок
17if ! tar -czf "app.tar.gz" --exclude=node_modules --exclude=.git .; then
18 handle_archive_error "tar command failed"
19fi
20
21# Проверка размера архива
22ARCHIVE_SIZE=$(stat -c%s "app.tar.gz")
23MAX_SIZE=$((100*1024*1024)) # 100MB
24
25if [ $ARCHIVE_SIZE -gt $MAX_SIZE ]; then
26 handle_archive_error "Archive too large: ${ARCHIVE_SIZE} bytes"
27fi
28
29echo "Archive created successfully"
Как мониторить подобные ошибки
- Мониторь использование дискового пространства
- Логируй время создания архивов
- Настрой алерты на failed archive creation
- Отслеживай размер создаваемых архивов
FAQ
В: Как уменьшить размер архива?
О: Исключи ненужные файлы, используй сжатие, создавай инкрементальные архивы.
В: Что делать с медленным архивированием?
О: Используй параллельное архивирование, оптимизируй исключения, используй SSD диски.
В: Как автоматизировать очистку старых архивов?
О: Настрой cron job для удаления архивов старше определенного времени.
Лучшие практики
- Всегда исключай ненужные файлы из архива
- Используй сжатие для экономии места
- Мониторь размер создаваемых архивов
- Настрой автоматическую очистку старых архивов
- Используй инкрементальное архивирование