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

问题描述:

我正在使用Jenkins进行持续集成构建。我有相当多的作业具有相同的配置代码。我正在把这一切都推到一个通用的脚本文件中,我希望在构建前后运行。在Xcode构建阶段运行脚本中设置全局环境变量

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

有谁知道这是可能的吗?

+0

也许这个答案可以帮助 - http://*.com/a/32743908/67824。它不会让你定义全局环境变量,但它确实允许你改变xcodeproj的构建设置,这大概是你想要的环境变量(至少对我来说是这种情况)。 – 2016-11-09 13:20:02

不可能完全按照你的要求去做。进程无法更改另一个进程的环境变量。前期和后期以及实际构建步骤在不同的流程中运行。

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

的会先调用你的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构建,将脚本归档为构建工件。所有其他工作将使用Copy Artifact插件从脚本作业的构件中获取脚本的副本。
+0

我不明白这有何帮助。我(和其他许多人)正在研究这个问题的原因是,通过设置环境变量,一个构建步骤的能力会影响下一个构建步骤。在我的情况下,即使设置一个预定义的处理器宏就足够了,但你的答案既不。或者,也许你的意思是某个构建步骤应该写入输出变量的脚本,并由所有其他目标运行? – 2016-01-06 10:27:06

Apple's Technical Q&A QA1067看来,如果你创建的文件/Users/YOU/.MacOSX/environment.plist,并与所有进程(通过在他们的家目录的environment.plist文件的用户推出)所需的环境变量来填充它会捡起这些环境变量。您可能需要重新启动您的计算机(或者只是注销并重新启动),然后新启动的进程才会启动变量。
This article还声称Xcode也会将这些变量传递给构建阶段脚本。我还没有测试过,但下次重启我的MacBook时,我会告诉你它是否工作。

http://developer.apple.com/library/mac/#/legacy/mac/library/qa/qa1067/_index.html

Q: How do I set environment for all processes launched by a specific user?


A: It is actually a fairly simple process to set environment variables for processes launched by a specific user.

有它的loginwindow搜索 每次用户登录在一个特殊的环境文件,环境文件是: 〜/ .MacOSX/environment.plist(小心区分大小写)。 '〜'是我们感兴趣的用户的主目录。您将要使用终端(由 键入mkdir .MacOSX)自行创建.MacOSX目录。您还必须自己创建环境 文件。该环境文件实际上是XML/plist格式 (确保将.plist扩展名添加到文件名末尾或 这不起作用)。

+0

它工作?我一直无法让xcode使用这种方法来查看我的变量... – brendanjerwin 2013-04-29 12:35:10

+0

@brendan nope,不幸的是,它对我也不起作用。 – chown 2013-04-29 18:50:05