13

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

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

有谁知道这是否可能?

4

2 回答 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 构建,将脚本存档为构建工件。然后,所有其他作业将使用 Copy Artifact 插件从脚本作业的工件中获取脚本的副本。
于 2012-04-07T20:54:38.227 回答
-3

Apple 的 Technical Q&A QA1067看来,如果您创建文件/Users/YOU/.MacOSX/environment.plist并使用所需的环境变量填充它,那么所有进程(由用户在其主目录中使用 environment.plist 文件启动)都将获取这些环境变量。您可能需要重新启动计算机(或只是注销并重新登录),然后新启动的进程才能获取变量。
本文还声称 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(注意区分大小写)。其中 '~' 是我们感兴趣的用户的主目录。您必须使用终端自己创建 .MacOSX 目录(通过键入 mkdir .MacOSX)。您还必须自己创建环境文件。环境文件实际上是 XML/plist 格式(确保将 .plist 扩展名添加到文件名的末尾,否则这将不起作用)。

于 2012-09-27T21:45:50.017 回答