Итак - я пишу скрипт для запуска тестов iOS на основе изменений в проекте (вероятно, это не важно для темы).
Внутри скрипта есть команда, которая будет запускать тесты:
cmd = "xcodebuild -workspace xxx.xcworkspace -scheme xxx -destination 'platform=iOS Simulator,name={0},OS=latest' -configuration Debug -derivedDataPath {1} test-without-building {2} -parallel-testing-enabled NO -enableCodeCoverage YES | xcpretty".format(os.environ['TEST_SIMULATOR_NAME'], os.environ['PWD'], result)
и выполняется следующим образом:
do(cmd)
Определение метода do()
( source ):
def do(command):
return_code = call([ '/bin/bash', '-c', 'set -o pipefail; ' + command ])
Настройки задания Gitlab:
manualUiTestsBasedOnChanges:
stage: uiTests
only: ...some conditions...
before_script:
- set -o pipefail
script:
- ../scripts/ci/run_UI_tests_based_on_changes.py
Проблема с этимв том случае, если в этом сценарии произойдет сбой, он не выполнит задание, даже если set -o pipefail
задано перед сценарием И в методе do()
.Видна на изображении ниже.
Есть идеи, почему он так себя ведет?