0

Я использую тег здесь на этапе сборки Jenkins для отправки моих команд развертывания через ssh, и, к сожалению, сборка проходит, даже если команды внутри тега здесь не заканчиваются успешно: ssh [email protected] <<EOF cd /path/to/app git pull bower install npm install grunt build cp -r /path/to/app/dist/* /path/to/dist/ forever restartall exit EOF Jenkins строит проходы, когда ssh deploy failed

Есть ли лучший способ подойти к этой проблеме?

ответ

2

Вы не обнаружите ошибок в вашем «документе».
Последняя команда exit и без кода выхода по умолчанию будет 0, что является успешным.
Поскольку последняя команда вашего ssh имеет успех, вся команда считается успешной, а сборка - успешной.

Самый простой способ исправить это: цепь все команды с && так:
cd /path/to/app && git pull && bower install && npm install && grunt build && cp -r /path/to/app/dist/* /path/to/dist/ && forever restartall && exit

Лучший способ исправить, что: написать правильный сценарий оболочки, с обработкой ошибки, и выполнить это. Если вы слишком ленивы, чтобы ошибки обрабатывать каждую строку, вы можете запустить скрипт с set -e который будет провалить скрипт на любой индивидуальной ошибки

Edit:

#!/bin/bash 
appPath="/path/to/app" 
distPath"/path/to/dist" 

echo "My great deployment script" 
echo "Deploying ${appPath} to ${distPath} 

if [[ ! -w "${appPath}" ]]; then 
    echo "${appPath} is not writable, quitting" 
    exit 1 
else 
    cd ${appPath} && git pull || { echo "Failed on 'git pull'"; exit 2; } 
    bower install || { echo "Failed on 'bower install'"; exit 3; } 
    npm install || { echo "Failed on 'npm install'"; exit 4; } 
    grunt build || { echo "Failed on 'grunt build'"; exit 5; } 

    if [[ -w "${distPath}" ]]; then 
     cp -r ${appPath}/dist/* ${distPath}/ || { echo "Failed on 'copy'"; exit 1 }   
     forever restartall || { echo "Failed on 'forever restartall'"; exit 6 } 

     echo "Deployment successful" 
     exit 0 
    fi 
fi 

Вы затем выполнить его: ssh [email protected] 'bash -s' < myfile.sh (если файл является локальным)
Или если вы разместите файл удаленно, то просто: ssh [email protected] '/path/to/remote/myfile.sh'

+0

Можете ли вы подробнее остановиться на «написать сценарий оболочки свойств с помощью ручной строки»? Я хотел бы сделать это правильно, но я действительно нахожусь на грани моего опыта здесь! :] – lowe0292

+0

Нет гарантии, что скрипт будет работать для вас – Slav