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

在Xcode构建阶段运行脚本中设置全局环境变量,xcode,jenkins,environment-variables,jenkins-plugins,run-script,Xcode,Jenkins,Environment Variables,Jenkins Plugins,Run Script,我正在使用Jenkins进行持续集成构建。我有相当多的工作有很多相同的配置代码。我正在将这一切都提取到一个公共脚本文件中,我希望在构建前和构建后运行该文件 我一直不知道如何在脚本中设置一些环境变量,以便Xcode build命令和Jenkins build都可以看到它们 有人知道这是否可行吗?完全按照你的要求去做是不可能的。一个进程不能更改另一个进程的环境变量。预构建、后构建和实际构建步骤在不同的流程中运行 但是您可以创建一个脚本来设置公共环境变量,并在所有构建之间共享该脚本 将首先调用shel

我正在使用Jenkins进行持续集成构建。我有相当多的工作有很多相同的配置代码。我正在将这一切都提取到一个公共脚本文件中,我希望在构建前和构建后运行该文件

我一直不知道如何在脚本中设置一些环境变量,以便Xcode build命令和Jenkins build都可以看到它们


有人知道这是否可行吗?

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

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

将首先调用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构建,该构建将脚本作为构建工件进行归档。然后,所有其他作业将使用复制工件插件从脚本作业的工件中获取脚本的副本
从中可以看出,如果创建文件
/Users/you/.MacOSX/environment.plist
并用所需的环境变量填充该文件,则所有进程(由用户在其主目录中使用environment.plist文件启动)都将拾取这些环境变量。在新启动的进程提取变量之前,您可能需要重新启动计算机(或注销并重新登录)。
还声称Xcode还将把这些变量传递给构建阶段脚本。我还没有测试它,但下次我重新启动我的MacBook时,我会让你知道它是否工作

Q:我如何为由特定服务器启动的所有进程设置环境
用户?


A:设置环境变量实际上是一个相当简单的过程
用于特定用户启动的进程。

loginwindow会搜索一个特殊的环境文件 每次用户登录时。环境文件是: ~/.MacOSX/environment.plist(注意区分大小写)。哪里 “~”是我们感兴趣的用户的主目录。你会 必须使用终端自己创建.MacOSX目录(通过 键入mkdir.MacOSX)。您还必须创建环境 归档。环境文件实际上是XML/plist格式 (请确保将.plist扩展名添加到文件名或 这行不通)


它起作用了吗?我无法使用这个方法让xcode看到我的变量……我看不出这有什么帮助。我(和其他许多人)研究这个问题的原因是,一个构建步骤能够通过设置环境变量影响下一个构建步骤。在我的例子中,即使设置一个预定义的处理器宏也足够了,但您的答案两者都不行。或者,您的意思是某个构建步骤应该将导出变量的脚本写入磁盘,并且该脚本由所有其他目标运行?也许这个答案会有所帮助-。它不允许您定义全局环境变量,但允许您更改xcodeproj构建设置,这大概就是您希望环境变量的用途(至少对我来说是这样)。