Конвейер не выходит из строя, когда происходит сбой внутри скрипта Python - PullRequest
0 голосов
/ 03 июня 2019

Итак - я пишу скрипт для запуска тестов 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().Видна на изображении ниже.

Есть идеи, почему он так себя ведет?

enter image description here

1 Ответ

0 голосов
/ 04 июня 2019

Хорошо, единственное работающее решение, которое я нашел, это отправить строку с командой обратно в оболочку gitlab и выполнить ее там.Вот так:

В Python:

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)

print(cmd)

YAML:

manualUiTestsBasedOnChanges:
  stage: uiTests
  only: ...some conditions...
  before_script: 
    - set -o pipefail
  script:
    - result=`../scripts/ci/run_UI_tests_based_on_changes.py`
    - eval "$result"
...