这是我的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
当我删除xcpretty
时,作业与this example job一样正确地通过了失败/成功。
我如何才能同时使用xcpretty并将正确的值传递给Travis CI,以确保工作成功/失败?
答案 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]}"