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

时间:2019-05-01 10:10:42

标签: ios xcode continuous-integration travis-ci xcodebuild

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

succeeding job

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

我如何才能同时使用xcpretty并将正确的值传递给Travis CI,以确保工作成功/失败?

1 个答案:

答案 0 :(得分:0)

您的问题是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]}"