从cron任务构建项目

时间:2011-12-26 08:49:21

标签: build cron task xcodebuild

当我使用'xcodebuild'命令从终端构建项目时,我成功了,但是当我尝试从cron任务运行相同的脚本时,我收到错误 “代码签名错误:标识' * ** * '与默认钥匙串中的任何有效证书/私钥对不匹配”

我认为问题在于crontab实用程序的设置和权限,似乎crontab没有看到我的钥匙串

任何人都可以向我提供终端命令如何使我的钥匙串对crontab可见

3 个答案:

答案 0 :(得分:1)

我在尝试通过cron每晚构建时遇到了类似的问题。我找到的唯一解决方案是在/ Library / LaunchDaemons /中创建一个plist并通过launchctl加载它。关键是" SessionCreate"否则,您将很快遇到类似于尝试使用cron时遇到的问题 - 即您的用户login.keychain不可用于该进程。 " SessionCreate"类似于" su -l" (根据我的理解)它模拟登录,因此您期望的默认钥匙链将可用;否则,尽管作为用户运行任务,您仍然只能使用系统钥匙串。

我发现答案(虽然不是目前的最佳答案)对于解决此问题非常有用:Missing certificates and keys in the keychain while using Jenkins/Hudson as Continuous Integration for iOS and Mac development

答案 1 :(得分:0)

您使用哪个帐户执行您的cron作业?

最有可能的问题!! 你可以添加

echo `whoami`

在脚本的开头,查看脚本启动的用户。

当从cron启动Bash脚本时,它不会像使用用户启动它时那样使用相同的环境变量(非登录shell)。

答案 2 :(得分:0)

当脚本从cron启动时,它不会加载$ HOME / .profile(或.bash_profile)。你从cron运行的任何东西都必须在其环境方面100%自给自足。我建议你自己创建一个名为“set_build_env.sh”的文件。它应该包含你需要构建的.profile中的所有内容,例如$ PATH,$ HOME,$ CLASSPATH等。然后在你的构建脚本中加载如ericc所说,set_build_env.sh使用点符号或源cmd。您还应该从your.profile中删除特定于构建的行,然后从那里获取set_build_env,这样只需要维护一个位置。例:     source /home/dmitry/set_build_env.sh#absolute path     。 /home/dmitry/set_build_env.sh#dot-space表示法与“source”相同