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

9

我正在尝试使用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和命令行中使用的是同一个用户(参见这个SO问题
  • 用户是构建机器的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代码都提交到了你的仓库中? - Dave Wood
另外,您尝试过使用Xcode插件而不是输入自己的xcodebuild命令吗? - Dave Wood
感谢您的建议,有关澄清请参见编辑2。 - m.barakuda
你能否在获取构建环境后进行测试,执行干净的git克隆,然后使用xcodebuild而不是启动Xcode IDE项目。我注意到,在某些情况下,Xcode IDE会自动纠正一些问题(创建缺失的方案等),而xcodebuild不会纠正(仅更改被.gitignore排除的文件)。这可能是为什么它在一个地方工作而在另一个地方不工作的原因。 - Dave Wood
1
@m.barakuda,你找到解决方案了吗? 我在添加cocoapods normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler后也遇到了同样类型的问题。 - Moaz Saeed
显示剩余4条评论
1个回答

1

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

需要注意的一点是:Jenkins 为每个构建步骤创建了一组新的环境变量。在某个构建步骤中创建的任何新环境变量都不会在下一个构建步骤中复制。有办法解决这个问题(但这不是您当前的问题)。如果您的 export 命令在一个单独的 执行 Shell 构建步骤中运行,则它没有影响。

以下是一些尝试的方法:
在命令行中输入 xcode-select -p
然后输入 set 将输出复制并粘贴到一个好的文本编辑器中以进行比较

然后运行一个 Jenkins 任务,在 执行 Shell 构建步骤中使用相同的命令:
xcode-select -p set 将输出复制并粘贴到一个好的文本编辑器中进行比较。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接