Запуск.bat-файла из скрипта bash и остановка выполнения скрипта bash, если командный файл возвращает код ошибки
Итак, обо всем по порядку. Я написал Git pre-commit hook, который,
- Создает решение C#.
- Запускает модульные тесты с NUnit, а затем использует OpenCover для генерации отчета о покрытии кода.
- Проверяет, прошли ли тесты или нет, и останавливает принятие на его основе.
Вот как выглядит сценарий:
# Path to current working directory
WD=$(pwd)
# Build the entire solution
"/c/Program Files (x86)/MSBuild/12.0/Bin/MSBuild.exe" PreCommitHookDemo/PreCommitHookDemo.sln
# Run NUnit Console Runner, pass the result to OpenCover and generate CodeCoverageResult.xml
"$WD/PreCommitHookDemo/packages/OpenCover.4.6.519/tools/OpenCover.Console.exe" -target:"$WD/PreCommitHookDemo/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit3-console.exe" -targetargs:"$WD/PreCommitHookDemo/UnitTests/bin/Debug/UnitTests.dll" -filter:"+[*]*" -excludebyattribute:"System.CodeDom.Compiler.GeneratedCodeAttribute" -register:user -output:"_CodeCoverageResult.xml"
# Generate Code Coverage Report using ReportGenerator
"$WD/PreCommitHookDemo/packages/ReportGenerator.2.4.4.0/tools/ReportGenerator.exe" "-reports:_CodeCoverageResult.xml" "-targetdir:_CodeCoverageReport"
# Location of TestResult.xml
FILE="$WD/TestResult.xml"
# Check whether overall result is 'Passed' or 'Failed'
if [[ $(grep -oPm1 '(?<=<test-suite)[^<]+' $FILE | grep 'result="Failed"') ]]
then
# Commit is stopped when tests fail
echo '*** Tests failed. Commit stopped. ***'
exit 1
else
# Commit is completed when tests pass
echo 'Tests Passed. Commit Successful.'
fi
Теперь в текущем коде, даже если сборка не удалась, оставшийся скрипт все равно выполняется. Есть ли способ получить код ошибки здесь? Если так, то как?
Я также написал файл.bat, который может проверить, прошла ли сборка успешно или нет.
ECHO Off
"C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe" PreCommitHookDemo.sln
IF NOT %ERRORLEVEL%==0 GOTO ERROR
GOTO DONE
:ERROR
ECHO %ERRORLEVEL%
ECHO "Build has failed."
pause
GOTO END
:DONE
ECHO %ERRORLEVEL%
ECHO "Build was successful."
pause
:END
Я знаю, что могу запустить этот файл.bat из своего сценария предварительной фиксации. Но как я могу вернуть код ошибки, который может быть перехвачен в скрипте bash, который может использоваться для проверки, прошла ли сборка или нет.