Прерывание перехвата после получения, если сборка веб-пакета не удалась - PullRequest
2 голосов
/ 02 июля 2019

У меня есть настройка развертывания, с помощью которой я отправляю репозиторий next.js на удаленный git. У меня есть настройки на сервере.

У меня есть настройка перехвата после получения, которая затем создаст приложение во временном режиме.папку, прежде чем скопировать ее в постоянную папку и запустить ее с PM2.

# post-receive

#!/bin/sh

# The production directory
TARGET="/var/node-apps/my-app"

# A temporary directory for deployment
TEMP="/var/node-apps/tmp/my-app"

# The Git repo
REPO="/var/git/my-app.git"

# The Git branch
BRANCH="master"

# Deploy the content to the temporary directory
echo ‘post-receive: copy to tmp’
mkdir -p $TEMP

git --work-tree=$TEMP --git-dir=$REPO checkout $BRANCH -f
echo ‘post-receive: checkout branch’
cd $TEMP

echo ‘post-receive: npm install…’
npm install \
&& echo ‘post-receive: building…’ \
&& npm run build \
&& echo ‘post-receive: → done.’


# Replace the production directory
# with the temporary directory
cd /
rm -rf $TARGET
mv $TEMP $TARGET
cd $TARGET

(pm2 delete 'my-app' || true)
pm2 start npm --name 'my-app' -- run start-production -i max
echo ‘post-receive: app started successfully with pm2.’
pm2 save
echo ‘post-receive: pm2 saved.’

Это прекрасно работает, однако, если сборка завершается неудачно (например, возникает ошибка linting), сценарий пост-получения продолжает выполнятьсяи скопирует сбойную сборку в постоянный каталог и запустит приложение с PM2 (что, конечно, не получается, так как сборка не удалась).

Если сборка веб-пакета завершится неудачно, я хотел бы получить после полученияперехватывать, чтобы не продолжать, и вместо этого выводить предупреждение.

Я пытался обрабатывать ошибки, например, так:

abort()
{
    echo >&2 '
***************
*** ABORTED ***
***************
'
    echo "An error occurred. Exiting..." >&2
    exit 1
}

trap 'abort' 0
trap 'abort' 1

set -e

[rest of script here]

trap : 0
trap : 1

, но это также не работает.

1 Ответ

0 голосов
/ 03 июля 2019

Разобрался, благодаря комментариям от @ torek

Я сохранил прерывания прерывания и изменил && npm run build \ на && npm run build || exit 1 \.

Я не уверен, еслиловушки строго необходимы, так как скрипт завершится, если npm run build завершится неудачей.

# post-receive

#!/bin/sh

abort()
{
    echo >&2 '
***************
*** ABORTED ***
***************
'
    echo "An error occurred. Exiting..." >&2
    exit 1
}

trap 'abort' 0
trap 'abort' 1

set -e


echo ‘post-receive: Triggered.’

# The production directory
TARGET="/var/node-apps/myapp"

# A temporary directory for deployment
TEMP="/var/node-apps/tmp/myapp"

# The Git repo
REPO="/var/git/myapp.git"

# The Git branch
BRANCH="master"

# Deploy the content to the temporary directory
echo ‘post-receive: copy to tmp’
mkdir -p $TEMP

git --work-tree=$TEMP --git-dir=$REPO checkout $BRANCH -f
echo ‘post-receive: checkout branch’
cd $TEMP

# Do stuffs, like npm install…
echo ‘post-receive: npm install…’
npm install \
&& echo ‘post-receive: building…’ \
&& npm run build || exit 1 \
&& echo ‘post-receive: → done.’


# Replace the production directory
# with the temporary directory
cd /
rm -rf $TARGET
mv $TEMP $TARGET
cd $TARGET

(pm2 delete 'myapp' || true)
pm2 start npm --name 'myapp' -- run start-production -i max
echo ‘post-receive: app started successfully with pm2.’
pm2 save
echo ‘post-receive: pm2 saved.’

# Done!
trap : 0
trap : 1

echo >&2 '
************
*** DONE *** 
************
'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...