Что такое Artifact upload failed?

Ошибка Artifact upload failed возникает, когда процесс загрузки артефактов (собранных файлов, образов, отчетов) в CI/CD пайплайне завершается неудачно.

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

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

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

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

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

1. Исправь проблемы с сетью

1# Проверь подключение к storage
2curl -I https://your-storage-service.com
3
4# Проверь DNS разрешение
5nslookup your-storage-service.com
6
7# Проверь скорость загрузки
8curl -o /dev/null -s -w "%{speed_download}\n" https://your-storage-service.com

2. Настрой правильные права доступа

 1# GitHub Actions с правильными permissions
 2name: Upload Artifacts
 3on: [push]
 4
 5jobs:
 6  build:
 7    runs-on: ubuntu-latest
 8    permissions:
 9      contents: write
10      actions: write
11      security-events: write
12    
13    steps:
14    - uses: actions/checkout@v3
15    
16    - name: Build application
17      run: |
18        npm install
19        npm run build
20    
21    - name: Upload build artifacts
22      uses: actions/upload-artifact@v3
23      with:
24        name: build-files
25        path: dist/
26        retention-days: 30

3. Оптимизируй размер артефактов

 1# Настрой сжатие артефактов
 2name: Optimized Upload
 3on: [push]
 4
 5jobs:
 6  build:
 7    runs-on: ubuntu-latest
 8    steps:
 9    - uses: actions/checkout@v3
10    
11    - name: Build and compress
12      run: |
13        npm run build
14        tar -czf build.tar.gz dist/
15    
16    - name: Upload compressed artifact
17      uses: actions/upload-artifact@v3
18      with:
19        name: build-compressed
20        path: build.tar.gz

4. Настрой правильную конфигурацию storage

 1# Настрой AWS S3 для артефактов
 2name: S3 Upload
 3on: [push]
 4
 5jobs:
 6  upload:
 7    runs-on: ubuntu-latest
 8    steps:
 9    - uses: actions/checkout@v3
10    
11    - name: Configure AWS credentials
12      uses: aws-actions/configure-aws-credentials@v1
13      with:
14        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
15        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
16        aws-region: us-east-1
17    
18    - name: Upload to S3
19      run: |
20        aws s3 cp dist/ s3://my-bucket/artifacts/ --recursive

5. Добавь retry логику

 1# Добавь retry для загрузки
 2name: Retry Upload
 3on: [push]
 4
 5jobs:
 6  upload:
 7    runs-on: ubuntu-latest
 8    steps:
 9    - uses: actions/checkout@v3
10    
11    - name: Upload with retry
12      uses: nick-fields/retry@v2
13      with:
14        timeout_minutes: 10
15        max_attempts: 3
16        command: |
17          aws s3 cp dist/ s3://my-bucket/artifacts/ --recursive

6. Настрой мониторинг загрузки

 1# Скрипт для мониторинга загрузки
 2#!/bin/bash
 3
 4upload_artifact() {
 5    local file_path=$1
 6    local upload_url=$2
 7    
 8    echo "Starting upload of $file_path"
 9    
10    # Проверь размер файла
11    file_size=$(stat -c%s "$file_path")
12    echo "File size: $file_size bytes"
13    
14    # Загрузи с прогрессом
15    curl -X PUT \
16         -H "Content-Type: application/octet-stream" \
17         --data-binary @"$file_path" \
18         --progress-bar \
19         "$upload_url"
20    
21    if [ $? -eq 0 ]; then
22        echo "Upload successful"
23    else
24        echo "Upload failed"
25        exit 1
26    fi
27}
28
29# Использование
30upload_artifact "build.tar.gz" "https://storage.example.com/upload"

7. Настрой очистку старых артефактов

 1# Настрой автоматическую очистку
 2name: Cleanup Old Artifacts
 3on:
 4  schedule:
 5  - cron: '0 2 * * 0'  # Каждое воскресенье в 2:00
 6
 7jobs:
 8  cleanup:
 9    runs-on: ubuntu-latest
10    steps:
11    - name: Cleanup old artifacts
12      run: |
13        # Удали артефакты старше 30 дней
14        find /path/to/artifacts -type f -mtime +30 -delete
15        
16        # Или для S3
17        aws s3 ls s3://my-bucket/artifacts/ --recursive | \
18        awk '$1 < "'$(date -d '30 days ago' -I)"' {print $4}' | \
19        xargs -I {} aws s3 rm s3://my-bucket/artifacts/{}

Как мониторить подобные ошибки

  • Настрой алерты на failed uploads
  • Мониторь размер артефактов
  • Отслеживай время загрузки
  • Мониторь использование storage
  • Настрой дашборды для upload метрик

FAQ

В: Как проверить доступность storage?

О: Используй curl или ping для проверки подключения к storage сервису.

В: Что делать, если файл слишком большой?

О: Сожми файл, разбей на части, используй streaming upload или увеличь лимиты.

В: Как настроить автоматическую очистку?

О: Используй cron jobs, настрой retention policies или автоматические скрипты очистки.

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

  • Сжимай артефакты перед загрузкой
  • Используй retry логику для надежности
  • Настрой правильные права доступа
  • Мониторь размер и время загрузки
  • Настрой автоматическую очистку старых артефактов
  • Используй прогрессивную загрузку для больших файлов
  • Документируй процесс загрузки артефактов