Travis CI、Xcode - 使用 xcpretty 时不会进一步传递退出命令
Travis CI, Xcode - exit command is not passed further when using xcpretty
这是我的 travis.yml
文件:
osx_image: xcode10.2
language: objective-c
before_install:
- travis_wait 35; cd CalendarKitDemo; pod update
script:
- xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcpretty
notifications:
email: false
问题是构建总是被标记为 "succeeded" 即使实际的 xcodebuild
命令失败退出,例如,这里:
"failing" job that succeeds
当我删除 xcpretty
时,作业正确地通过了 failure/success,与 this example job 一样。
如何在作业成功/失败时既使用 xcpretty 又将正确的值传递给 Travis CI?
您的问题是 bash 默认情况下使用 xcpretty 中最后一个命令的现有代码。所以你从 xcpretty.
得到了存在的代码
您可以在您的环境中设置 pipefail (set -o pipefail)。
pipefail
将导致脚本以第一个 non-zero 退出代码退出。
例如在您的 Travis 文件中
script:
- set -o pipefail
- xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcpretty
如果您想更明确一点,您还可以从第一个命令 (xcodebuild) 中获取退出代码 bash 在 PIPESTATUS
数组中公开管道的退出代码。
例如
- xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcpretty && exit ${PIPESTATUS[0]}"
这是我的 travis.yml
文件:
osx_image: xcode10.2
language: objective-c
before_install:
- travis_wait 35; cd CalendarKitDemo; pod update
script:
- xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcpretty
notifications:
email: false
问题是构建总是被标记为 "succeeded" 即使实际的 xcodebuild
命令失败退出,例如,这里:
"failing" job that succeeds
当我删除 xcpretty
时,作业正确地通过了 failure/success,与 this example job 一样。
如何在作业成功/失败时既使用 xcpretty 又将正确的值传递给 Travis CI?
您的问题是 bash 默认情况下使用 xcpretty 中最后一个命令的现有代码。所以你从 xcpretty.
得到了存在的代码您可以在您的环境中设置 pipefail (set -o pipefail)。
pipefail
将导致脚本以第一个 non-zero 退出代码退出。
例如在您的 Travis 文件中
script:
- set -o pipefail
- xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcpretty
如果您想更明确一点,您还可以从第一个命令 (xcodebuild) 中获取退出代码 bash 在 PIPESTATUS
数组中公开管道的退出代码。
例如
- xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcpretty && exit ${PIPESTATUS[0]}"