在 Xcode 的构建阶段运行脚本中设置全局环境变量

15

我正在使用Jenkins进行持续集成构建。我有很多工作,其中许多都具有相同的配置代码。我正在将所有这些代码提取到一个常见的脚本文件中,并希望在构建前和构建后运行它。

我一直无法弄清楚如何在脚本内设置一些环境变量,以便Xcode构建命令和Jenkins构建都可以看到它们。

有人知道是否可能吗?


也许这个答案可以帮到你 - https://dev59.com/NI_ea4cB1Zd3GeqPN2lN#32743908。它不能定义全局环境变量,但是它允许你更改xcodeproj构建设置,这可能是你想要环境变量的原因(至少对我来说是这样)。 - Ohad Schneider
2个回答

6

很遗憾,你要求的事情是不可能做到的。一个进程无法更改另一个进程的环境变量。预先和后续以及实际构建步骤在不同的进程中运行。

但是,你可以创建一个脚本来设置共同的环境变量,并在所有构建之间共享该脚本。

这将首先调用你的shell以执行脚本中的命令,然后调用xcodebuild:

# Note the dot in the beginning of the next line. It is not a typo.
. set_environment.sh
xcodebuild myawesomeapp.xcodeproj

脚本可能长这样:

export VARIABLE1=value1
export VARIABLE2=value2

您的工作如何共享脚本取决于您的环境和用例。您可以:
  • 将脚本放置在 Jenkins 主机上某个众所周知的位置,或者
  • 如果所有作业共享同一存储库,则将脚本放置在版本控制源树中,或者
  • 将脚本放置在其自己的存储库中,并创建一个 Jenkins 构建,将脚本作为构建输出进行归档。然后,所有其他作业都会使用“复制构件”插件从脚本作业的构建产物中获取脚本的副本。

1
我不明白这样做有什么帮助。我们(以及许多其他人)之所以研究这个,是为了能够通过设置环境变量来影响下一个构建步骤。对我来说,甚至设置一个预定义的处理器宏就足够了,但是你的答案都没有做到这一点。或者你是指某个构建步骤应该将导出变量的脚本写入磁盘,并由所有其他目标运行? - Motti Shneor

-3
苹果的技术问答QA1067中可以看出,如果您创建文件/Users/YOU/.MacOSX/environment.plist并填充所需的环境变量,那么所有进程(由用户在其主目录中具有environment.plist文件的情况下启动)都将获取这些环境变量。在新启动的进程获取变量之前,您可能需要重新启动计算机(或仅注销并重新登录)。
这篇文章还声称Xcode也会将这些变量传递给构建阶段脚本。我还没有测试过,但下次我重新启动我的MacBook时,我会告诉您是否有效。
来自http://developer.apple.com/library/mac/#/legacy/mac/library/qa/qa1067/_index.html 问:如何为特定用户启动的所有进程设置环境?
答:实际上,为特定用户启动的进程设置环境变量是一个相当简单的过程。

登录窗口每次用户登录时都会搜索一个特殊的环境文件。该环境文件是: ~/.MacOSX/environment.plist(请注意大小写敏感)。其中'~'表示我们感兴趣的用户的主目录。您需要使用终端自己创建.MacOSX目录(通过键入mkdir .MacOSX)。您还需要自己创建环境文件。实际上,环境文件是以XML/plist格式存在的(确保在文件名末尾添加.plist扩展名,否则将无法正常工作)。


它起作用了吗?我一直无法通过这种方法让Xcode看到我的变量... - brendanjerwin

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