从 Jenkins 运行时 xcodebuild 失败(在终端中工作)

Posted

技术标签:

【中文标题】从 Jenkins 运行时 xcodebuild 失败(在终端中工作)【英文标题】:xcodebuild fails when run from Jenkins (works in terminal) 【发布时间】:2014-03-26 13:59:06 【问题描述】:

我正在尝试使用 Jenkins CI(在带有 Mavericks 的 Mac Mini 上)使用 xcodebuild 命令来构建我的 ios 项目。 我玩了几个小时,但无法解决这个问题。

以下命令在命令行上构建我的项目没有任何问题,但在 Jenkins 中运行时失败。

xcodebuild -workspace ./MyProject.xcworkspace 
           -scheme MyProject 
           -configuration AdHoc 
           -sdk iphoneos 
           DSTROOT=/Users/me/myproject 
           OBJROOT=/Users/me/myproject 
           SYMROOT=/Users/me/myproject 
           ONLY_ACTIVE_ARCH=NO 
           OTHER_CODE_SIGN_FLAGS="--keychain /Users/me/Library/Keychains/temporary.keychain"

(为清楚起见添加了换行符。)

错误总是如下所示:

CompileC /Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/Objects-normal/armv7/SomeViewController.o MyProject/Code/Controllers/Event/SomeViewController.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler
    cd /Users/me/.jenkins/jobs/myproject/workspace
    export LANG=en_US.US-ASCII
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch armv7 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu99 -fobjc-arc -fmodules -fmodules-cache-path=/Users/me/Library/Developer/Xcode/DerivedData/ModuleCache -Wno-trigraphs -fpascal-strings -Os -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wno-implicit-atomic-properties -Werror=deprecated-objc-isa-usage -Werror=objc-root-class -Wno-receiver-is-weak -Wno-arc-repeated-use-of-weak -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wno-deprecated-implementations -DCOCOAPODS=1 -DNS_BLOCK_ASSERTIONS=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -g -fvisibility=hidden -Wno-sign-conversion -miphoneos-version-min=7.0 -iquote /Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/MyProject-generated-files.hmap -I/Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/MyProject-own-target-headers.hmap -I/Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/MyProject-all-target-headers.hmap -iquote /Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/MyProject-project-headers.hmap -I/Users/me/myproject/AdHoc-iphoneos/include -I/Users/me/.jenkins/jobs/myproject/workspace/Pods/Headers -I/Users/me/.jenkins/jobs/myproject/workspace/Pods/Headers/AFNetworking -I/Users/me/.jenkins/jobs/myproject/workspace/Pods/Headers/SDWebImage -I/Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/DerivedSources/armv7 -I/Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/DerivedSources -F/Users/me/myproject/AdHoc-iphoneos -F/Applications/Xcode.app/Contents/Developer/Library/Frameworks -isystem/Users/me/.jenkins/jobs/myproject/workspace/Pods/Headers -isystem/Users/me/.jenkins/jobs/myproject/workspace/Pods/Headers/AFNetworking -isystem/Users/me/.jenkins/jobs/myproject/workspace/Pods/Headers/SDWebImage -include /Users/me/Library/Developer/Xcode/DerivedData/MyProject-gyrrispdpuygvudbmupzhfzzaaag/Build/Intermediates/PrecompiledHeaders/MyProject-Prefix-asaxoaokmbdwezcdrhupsyxzhzrl/MyProject-Prefix.pch -MMD -MT dependencies -MF /Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/Objects-normal/armv7/SomeViewController.d --serialize-diagnostics /Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/Objects-normal/armv7/SomeViewController.dia -c /Users/me/.jenkins/jobs/myproject/workspace/MyProject/Code/Controllers/Event/SomeViewController.m -o /Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/Objects-normal/armv7/SomeViewController.o
In file included from /Users/me/.jenkins/jobs/myproject/workspace/MyProject/Code/Controllers/Event/SomeViewController.m:9:
In file included from /Users/me/.jenkins/jobs/myproject/workspace/MyProject/Code/Controllers/Event/SomeViewController.h:10:
/Users/me/.jenkins/jobs/myproject/workspace/Pods/Headers/SDWebImage/UIImageView+WebCache.h:1:1: error: expected identifier or '('
../../SDWebImage/SDWebImage/UIImageView+WebCache.h
^
In file included from /Users/me/.jenkins/jobs/myproject/workspace/MyProject/Code/Controllers/Event/SomeViewController.m:9:
In file included from /Users/me/.jenkins/jobs/myproject/workspace/MyProject/Code/Controllers/Event/SomeViewController.h:11:
In file included from /Users/me/.jenkins/jobs/myproject/workspace/MyProject/Code/Models/SomeEvent.h:10:
In file included from /Users/me/.jenkins/jobs/myproject/workspace/MyProject/Code/Models/SomeRoom.h:10:
/Users/me/.jenkins/jobs/myproject/workspace/MyProject/Code/Models/ABKBuilding.h:14:1: error: unexpected '@' in program
@property (nonatomic, strong)   NSString    *buildingID;
^


[... a lot more of this]  

** BUILD FAILED **


    The following build commands failed:
        CompileC /Users/me/myproject/MyProject.build/AdHoc-iphoneos/MyProject.build/Objects-normal/armv7/SomeViewController.o MyProject/Code/Controllers/SomeViewController.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler

    (1 failure)
    Build step 'Execute shell' marked build as failure

到目前为止我做了什么:

Jenkins 和命令行中的用户是相同的(参见this SO question) 用户是构建机器的root用户 配置正在与我设置的另一个示例项目一起使用(即,这不是钥匙串问题) 我安装了当前的 Xcode 5.1 命令行工具并做了一个手册xcode-select 我在调用xcodebuild 命令之前使用了export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" 我在运行 Jenkins 作业之前删除了 DerivedData

编辑: 我忘了提到这个项目使用了 CocoaPods,不确定这是否可能是它没有构建的原因。

编辑 2: 我添加了更多错误输出。我正在将我的 Pods 文件夹检查到 git 中。在命令行上构建相同的项目没有任何问题。命令绝对没有区别,我检查了三次。 不幸的是,由于各种自定义原因,我无法使用 Xcode 插件。但即使可以,我也很想知道这两种环境之间的区别。

更新:我似乎无法编译我项目中的一些 .m 文件,输出总是与一个版本有点不同。我还在我的构建方案中添加了一个依赖项,以确保 CocoaPods 是在其他任何东西之前构建的。

仍然不知道为什么某些文件会导致此问题。 有人可以确认他们仍然可以使用 xcodebuild Xcode 5.1 Build version 5B130a 从 Jenkins 构建项目吗?

【问题讨论】:

您可能希望发布更多 Jenkins 日志,以便我们查看实际错误。另外,如果您使用的是 CocoaPods,您是否将所有 pod 代码签入到您的 repo 中? 另外,您是否尝试过使用 Xcode 插件,而不是输入您自己的 xcodebuild 命令? 感谢您的建议,请参阅编辑 2 进行澄清。 您能否在不将项目启动到 Xcode IDE 的情况下测试使构建工作的环境,执行干净的 git clone,然后执行 xcodebuild。我注意到在某些情况下 Xcode IDE 会自动更正一些问题(创建缺少的方案等),xcodebuild 不会更正(并且只会更改 .gitignore 排除的文件)。这可能就是它在一个地方而不是另一个地方工作的原因。 @m.barakuda 你找到解决方案了吗?添加 cocoapods normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler后我也遇到了同样类型的问题 【参考方案1】:

我正在使用 Xcode 5.0.2 (5A3005),我也在命令行中使用 xcodebuild 构建,而不使用 Jenkins 插件或 IDE。

注意:Jenkins 会为 每个 构建步骤创建一组新的环境变量。在某个构建步骤中创建的任何新环境变量都不会在下一个构建步骤中复制。有一些方法可以解决它(但目前这不是你的问题)。如果您的export 命令是在与您的xcodebuild 命令分开的Execute Shell 构建步骤中运行的,那么它没有任何影响。

这里有一些尝试: 在命令行上,输入xcode-select -p。 然后输入set 将输出复制粘贴到可以区分的良好文本编辑器中

然后运行 ​​Jenkins 作业,并在 Execute Sell 构建步骤中,使用相同的命令:xcode-select -p set 将输出复制粘贴到一个好的文本编辑器,然后比较这两个文件。

首先,比较xcode-select -p的输出是否相同。 那么,除了 Jenkins 执行中的额外变量(如$BUILD_NUMBER等),应该没有区别。

【讨论】:

以上是关于从 Jenkins 运行时 xcodebuild 失败(在终端中工作)的主要内容,如果未能解决你的问题,请参考以下文章

使用来自另一台机器的 xcodebuild 进行单元测试

你可以将环境变量传递给xcodebuild吗?

通过 SSH 在 Xcode 6 下运行 xcodebuild 测试时超时

xcodebuild 通过 Jenkins 失败

xcodebuild 错误 - SecKey API 返回:-25308

Jenkins 中的 XcodeBuild 框架出现错误