这是我的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

问题是,即使实际的xcodebuild命令由于失败而退出,生成始终标记为“成功”,例如,在这里:
"failing" job that succeeds

ios - Travis CI,Xcode-使用xcpretty时不会进一步传递退出命令-LMLPHP

this example job一样,当我删除xcpretty时,作业正确通过了失败/成功。

如何在工作成功/失败时同时使用xcpretty并将正确的值传递给Travis CI?

最佳答案

您的问题是bash默认使用xcpretty中最后一条命令中的存在代码。因此,您可以从xcpretty获取现有代码。

您可以在环境中设置管道失败(设置-o pipefail)。
pipefail将导致脚本以第一个非零退出代码退出。

例如。在您的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]}"

关于ios - Travis CI,Xcode-使用xcpretty时不会进一步传递退出命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55934637/

10-09 17:33