Мы используем инструмент CI для запуска автоматических тестов наших PHP проектов.
В рамках этого процесса мы sh сообщаем результаты тестов CI нашему внутреннему инструменту панели инструментов.
Инструмент CI, который мы используем, позволяет нам предоставлять bash скрипты для выполнения. По умолчанию они выполняются с добавлением set -e
к сценарию.
Что я пытаюсь сделать, так это запустить наш набор тестов (PHPUnit), захватить код выхода, сделать вызов API нашего встроенный инструмент панели инструментов (если по какой-либо причине этот вызов завершится неудачно, я не хочу, чтобы он использовал код выхода, отличный от 0, так как я хочу, чтобы он «всегда выполнялся успешно» (таким образом, если он не будет выполнен, это не приведет к сбою сборки) Затем я хочу завершить работу с исходным кодом выхода PHPUnit, чтобы в случае сбоя какого-либо из тестов наша сборка не удалась.
В настоящее время мой скрипт выглядит следующим образом:
# To reverse the `set -e` prepended by the CI tool
set +e
# Run the test suite and capture the exit code
phpunit --coverage-xml coverage || phpunitexitcode=$? && exit 0
# Send the data I want to our internal dashboard tool and have it always return exit 0
author=$(cat ~/.ci-dashboard-env | grep AUTHOR | cut -d'=' -f2)
start=$(cat ~/.ci-dashboard-env | grep CHIPPER_BUILD_START | cut -d'=' -f2)
duration=$(($(date '+%s') - $start))
curl -X POST -s -o /dev/null -w "CI Dashboard Response: %{http_code}" \
-F "project=hub" \
-F "author=${author}" \
-F "build_time=${duration}" \
-F "phpunit_output=@coverage/index.xml" \
-F "branch=${CI_COMMIT_BRANCH}" \
https://dashboard.example.com/api/build || exit 0
# Exit with the original PHPUnit exit code so that if the tests failed then the CI tool fails
exit $phpunitexitcode
При выполнении этого Похоже, что в случае сбоя набора тестов внутренний API-интерфейс панели управления не обращается ни к какому выводу, поскольку выходные данные запускаемого скрипта ничего не показывают только в комплекте PHPUnit и не включают в себя выходные данные запроса curl.
Куда я иду не так?