Что такое Artifact upload failed?
Ошибка Artifact upload failed
возникает, когда процесс загрузки артефактов (собранных файлов, образов, отчетов) в CI/CD пайплайне завершается неудачно.
Причины возникновения
- Проблемы с сетевым подключением
- Недостаточно места на диске
- Проблемы с правами доступа
- Ошибки в конфигурации storage
- Превышение лимитов размера файлов
- Проблемы с внешними сервисами хранения
- Неправильные credentials
- Проблемы с форматом файлов
Как отладить ошибку
- Проверь сетевое подключение - тестируй доступность storage
- Проверь место на диске - убедись в достаточности места
- Проверь права доступа - убедись в правильности permissions
- Проверь конфигурацию - изучи настройки storage
- Проверь размер файлов - убедись в соблюдении лимитов
Как исправить ошибку
1. Исправь проблемы с сетью
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 логику для надежности
- Настрой правильные права доступа
- Мониторь размер и время загрузки
- Настрой автоматическую очистку старых артефактов
- Используй прогрессивную загрузку для больших файлов
- Документируй процесс загрузки артефактов