我正在尝试为iOS应用程序设置CI环境。到目前为止,我已经有了xcodebuild来从命令行正确构建测试版本,但是当Jenkins尝试执行它时,我在控制台中读取了以下内容:
Started by user anonymous
Building in workspace /Users/Shared/Jenkins/Home/jobs/Unit Tests/workspace
Working directory is /Users/iosappdev/Documents/Xcode Projects/rules.
[rules] $ /usr/bin/xcodebuild -version
FATAL: Cannot run program "/usr/bin/xcodebuild" (in directory "/Users/iosappdev/Documents/Xcode Projects/rules"): error=13, Permission denied
java.io.IOException: Cannot run program "/usr/bin/xcodebuild" (in directory "/Users/iosappdev/Documents/Xcode Projects/rules"): error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at hudson.Proc$LocalProc.<init>(Proc.java:244)
at hudson.Proc$LocalProc.<init>(Proc.java:216)
at hudson.Launcher$LocalLauncher.launch(Launcher.java:707)
at hudson.Launcher$ProcStarter.start(Launcher.java:338)
at hudson.Launcher$ProcStarter.join(Launcher.java:345)
at au.com.rayh.XCodeBuilder.perform(XCodeBuilder.java:224)
有什么想法?我对詹金斯很新,但是我尽力用谷歌回答这个问题无济于事。我最初是通过手动安装Jenkins(技术上的自制软件)遇到了这个问题,但最近使用了OSX安装程序并导致了同样的错误。
我猜这与Unix / Linux / OSX权限有关,而不是Jenkins / Xcode,但没有足够的专业知识来确定这一点。
修改
项目目录权限设置为775。
我也尝试将所有权更改为Jenkins运行的用户。
这是我尝试将xcodebuild作为守护程序用户运行时的输出($ sudo -u daemon xcodebuild):
dev-imac:rules iosappdev$ sudo -u daemon xcodebuild
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
2012-03-21 11:05:46.161 xcodebuild[1411:70b] [MT] DVTAssertions: ASSERTION FAILURE in /SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-1196/Xcode3Sources/XcodeIDE/Frameworks/DevToolsBase/pbxcore/Xcode3Model/Xcode3Project.m:266
Details: Assertion failed: [directoryPath isAbsolutePath]
Object: <Xcode3Project>
Method: +projectFilesInDirectory:
Thread: <NSThread: 0x40010a260>{name = (null), num = 1}
Hints: None
Backtrace:
0 0x000000010025b85f -[DVTAssertionHandler handleFailureInMethod:object:fileName:lineNumber:messageFormat:arguments:] (in DVTFoundation)
1 0x000000010025b6b5 _DVTAssertionFailureHandler (in DVTFoundation)
2 0x00000001011559bc +[Xcode3Project projectFilesInDirectory:] (in DevToolsCore)
3 0x00000001008a424b -[Xcode3CommandLineBuildTool _resolveInputOptions] (in Xcode3Core)
4 0x00000001008aa097 -[Xcode3CommandLineBuildTool run] (in Xcode3Core)
5 0x00000001001d7db6 (in xcodebuild)
6 0x00000001001d7c2c (in xcodebuild)
答案 0 :(得分:5)
确保运行Jenkins的用户具有正确的权限。转到http://[jenkins_server]/systemInfo
并搜索user.name
。
答案 1 :(得分:0)
上面写着:
Building in workspace /Users/Shared/Jenkins/Home/jobs/Unit Tests/workspace
Working directory is /Users/iosappdev/Documents/Xcode Projects/rules.
[rules] $ /usr/bin/xcodebuild -version
不知何故,作业执行已经跳入“错误”目录。也许您已经使用自定义工作区设置了工作? Jenkins可能作为用户守护程序运行,因此无法访问用户iosappdev下的文件。
使用Jenkins的常用方法是将源代码提交到版本控制存储库。然后将Jenkins作业配置为将存储库中的代码签出到Jenkins工作区并在那里构建,然后报告结果。
我不确定通过尝试让Jenkins直接跳到您的工作目录并在那里进行构建可以实现什么。如果这确实是你想要做的,你需要告诉我们为什么你认为这是一个好主意。