Что такое ошибка Script execution failed?

Ошибка Script execution failed возникает, когда CI/CD пайплайн не может выполнить скрипт из-за ошибок в коде, проблем с правами доступа или неправильной конфигурации.

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

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

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

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

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

1. Исправь синтаксические ошибки

1# Проверка синтаксиса bash скрипта
2bash -n script.sh
3
4# Проверка синтаксиса Python скрипта
5python -m py_compile script.py
6
7# Проверка синтаксиса JavaScript
8node -c script.js

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 логику, улучши обработку ошибок и сделай скрипты более устойчивыми.

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

О: Используй кэширование, параллельное выполнение и оптимизируй логику скриптов.

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

  • Всегда добавляй обработку ошибок
  • Используй отладочный режим для разработки
  • Тестируй скрипты локально перед пушем
  • Документируй зависимости скриптов
  • Используй идемпотентные скрипты