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]}"