首页 > 解决方案 > Travis CI,Xcode - 使用 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

问题是即使实际xcodebuild命令以失败退出,构建总是被标记为“成功”,例如,这里: “失败”作业成功

接班人

当我删除xcpretty时,作业正确传递失败/成功,就像这个示例作业一样。

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

标签: iosxcodecontinuous-integrationtravis-cixcodebuild

解决方案


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

您可以在您的环境中设置 pipefail (set -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]}"


推荐阅读