Что такое ошибка Script execution failed?
Ошибка Script execution failed
возникает, когда CI/CD пайплайн не может выполнить скрипт из-за ошибок в коде, проблем с правами доступа или неправильной конфигурации.
Причины возникновения
- Синтаксические ошибки в скрипте
- Отсутствующие зависимости или команды
- Проблемы с правами доступа к файлам
- Неправильные пути к файлам
- Ошибки в переменных окружения
- Проблемы с рабочей директорией
- Таймауты выполнения скрипта
Как отладить ошибку
- Проверь синтаксис скрипта - запусти проверку синтаксиса
- Проверь зависимости - убедись в наличии всех необходимых команд
- Проверь права доступа - убедись в правах на выполнение
- Проверь переменные окружения - убедись в правильности значений
- Проверь рабочую директорию - убедись в правильности путей
Как исправить ошибку
1. Исправь синтаксические ошибки
2. Добавь обработку ошибок
1#!/bin/bash
2# script_with_error_handling.sh
3set -e # Остановка при ошибке
4set -u # Ошибка при использовании неопределенной переменной
5
6# Функция для обработки ошибок
7error_handler() {
8 echo "Error occurred in line $1"
9 exit 1
10}
11trap 'error_handler $LINENO' ERR
12
13# Проверка зависимостей
14command -v docker >/dev/null 2>&1 || { echo "Docker not found"; exit 1; }
15command -v kubectl >/dev/null 2>&1 || { echo "kubectl not found"; exit 1; }
16
17# Основная логика
18echo "Starting deployment..."
19docker build -t myapp .
20kubectl apply -f k8s/
21echo "Deployment completed successfully"
3. Настрой правильные права доступа
1# .github/workflows/script-execution.yml
2name: Script Execution
3on: [push]
4
5jobs:
6 deploy:
7 runs-on: ubuntu-latest
8 steps:
9 - uses: actions/checkout@v3
10
11 - name: Set script permissions
12 run: |
13 chmod +x scripts/deploy.sh
14 chmod +x scripts/test.sh
15
16 - name: Execute deployment script
17 run: |
18 ./scripts/deploy.sh
19 env:
20 DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
21 KUBECONFIG: ${{ secrets.KUBECONFIG }}
4. Используй отладочный режим
1#!/bin/bash
2# Включение отладочного режима
3set -x # Вывод каждой команды
4
5# Проверка переменных
6echo "DEBUG: Current directory: $(pwd)"
7echo "DEBUG: Environment variables:"
8env | grep -E "(DOCKER|KUBE|DB)" || echo "No relevant env vars found"
9
10# Выполнение с проверкой
11if ! docker build -t myapp .; then
12 echo "ERROR: Docker build failed"
13 exit 1
14fi
15
16if ! kubectl apply -f k8s/; then
17 echo "ERROR: Kubernetes deployment failed"
18 exit 1
19fi
5. Настрой таймауты и retry логику
1# .github/workflows/retry-script.yml
2name: Retry Script Execution
3on: [push]
4
5jobs:
6 deploy:
7 runs-on: ubuntu-latest
8 steps:
9 - uses: actions/checkout@v3
10
11 - name: Deploy with retry
12 uses: nick-fields/retry@v2
13 with:
14 timeout_minutes: 10
15 max_attempts: 3
16 retry_on: error
17 command: ./scripts/deploy.sh
6. Создай тестовую среду для скриптов
1#!/bin/bash
2# test_script.sh
3
4# Создание тестовой среды
5TEST_DIR=$(mktemp -d)
6cd "$TEST_DIR"
7
8# Копирование необходимых файлов
9cp -r /path/to/project/* .
10
11# Выполнение скрипта в тестовой среде
12if ./scripts/deploy.sh; then
13 echo "Script execution successful"
14 exit 0
15else
16 echo "Script execution failed"
17 exit 1
18fi
Как мониторить подобные ошибки
- Логируй все выполнения скриптов
- Настрой алерты на failed executions
- Мониторь время выполнения скриптов
- Используй метрики для отслеживания успешности
FAQ
В: Как отладить скрипт, который работает локально, но падает в CI?
О: Проверь переменные окружения, права доступа, версии команд и рабочую директорию.
В: Что делать с flaky скриптами?
О: Добавь retry логику, улучши обработку ошибок и сделай скрипты более устойчивыми.
В: Как ускорить выполнение скриптов?
О: Используй кэширование, параллельное выполнение и оптимизируй логику скриптов.
Лучшие практики
- Всегда добавляй обработку ошибок
- Используй отладочный режим для разработки
- Тестируй скрипты локально перед пушем
- Документируй зависимости скриптов
- Используй идемпотентные скрипты