Что такое ошибка Archive creation failed?

Ошибка Archive creation failed возникает, когда CI/CD пайплайн не может создать архив (ZIP, TAR, RAR) из файлов проекта для деплоя, бэкапа или передачи артефактов.

Причины возникновения

  • Недостаточно места на диске
  • Проблемы с правами доступа к файлам
  • Слишком большие файлы для архивирования
  • Проблемы с сетевым подключением
  • Ошибки в конфигурации архивирования
  • Проблемы с кодировкой имен файлов
  • Таймауты при создании архива

Как отладить ошибку

  1. Проверь свободное место на диске - убедись в достаточном объеме
  2. Проверь права доступа - убедись в правах на чтение файлов
  3. Проверь размер файлов - убедись в разумности размера архива
  4. Проверь сетевое подключение - убедись в стабильности сети
  5. Проверь конфигурацию - убедись в правильности настроек

Как исправить ошибку

1. Проверь и освободи место на диске

 1# Проверка свободного места
 2df -h
 3
 4# Очистка временных файлов
 5rm -rf /tmp/*
 6rm -rf ~/.cache/*
 7
 8# Очистка Docker образов
 9docker system prune -f
10
11# Очистка старых артефактов
12find . -name "*.zip" -mtime +7 -delete

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 для удаления архивов старше определенного времени.

Лучшие практики

  • Всегда исключай ненужные файлы из архива
  • Используй сжатие для экономии места
  • Мониторь размер создаваемых архивов
  • Настрой автоматическую очистку старых архивов
  • Используй инкрементальное архивирование