访问 Xcode Server CI bot 运行中的构建文件夹(环境变量?)

Posted

技术标签:

【中文标题】访问 Xcode Server CI bot 运行中的构建文件夹(环境变量?)【英文标题】:Access build folder in Xcode Server CI bot run (env variables?) 【发布时间】:2014-08-04 20:39:46 【问题描述】:

我需要访问在每次机器人集成期间动态创建的文件夹。在其中一次运行中是这样的 -

/Library/Developer/XcodeServer/Integrations/Caches/a3c682dd0c4d569a3bc84e58eab88a48/DerivedData/Build/Products/Debug-iphonesimulator/my.app

我想在后置触发器中访问此文件夹,我该怎么做?根据 wwdc 的谈话,似乎正在使用一些环境变量,如“XCS_INTEGRATION_RESULT”和 XCS_ERROR_COUNT 等。我还可以在日志中看到 PROJECT_DIR 之类的内容。

但我无法从命令行访问这些变量中的任何一个(是因为我是与机器人不同的用户吗?) 另外我在哪里可以找到这个 CI 系统创建的变量列表?

【问题讨论】:

【参考方案1】:

我一直在回显设置到机器人日志,我的机器人脚本的第一行很简单

set   

当您在集成完成后查看日志时,它将在您的触发器输出中。

XCS_ANALYZER_WARNING_CHANGE=0
XCS_ANALYZER_WARNING_COUNT=0
XCS_ARCHIVE=/Library/Developer/XcodeServer/Integrations/Integration-76eb5292bd7eff1bfe4160670c2d4576/Archive.xcarchive
XCS_BOT_ID=4f7c7e65532389e2a741d29758466c18
XCS_BOT_NAME='Reader'
XCS_BOT_TINY_ID=00B0A7D
XCS_ERROR_CHANGE=0
XCS_ERROR_COUNT=0
XCS_INTEGRATION_ID=76eb5292bd7eff1bfe4160670c2d4576
XCS_INTEGRATION_NUMBER=15
XCS_INTEGRATION_RESULT=warnings
XCS_INTEGRATION_TINY_ID=FF39BC2
XCS_OUTPUT_DIR=/Library/Developer/XcodeServer/Integrations/Integration-76eb5292bd7eff1bfe4160670c2d4576
XCS_PRODUCT='Reader.ipa'
XCS_SOURCE_DIR=/Library/Developer/XcodeServer/Integrations/Caches/4f7c7e65532389e2a741d29758466c18/Source
XCS_TESTS_CHANGE=0
XCS_TESTS_COUNT=0
XCS_TEST_FAILURE_CHANGE=0
XCS_TEST_FAILURE_COUNT=0
XCS_WARNING_CHANGE=36
XCS_WARNING_COUNT=36

【讨论】:

虽然看起来很明显,但这个答案非常有帮助,当我遇到类似问题时,它让我走上了正确的道路。谢谢!【参考方案2】:

@Viktor 是正确的,这些变量只存在于它们各自的会话期间。 @Pappy 给出了这些变量的一个很好的列表。

它们可以在这样的脚本中使用:

IPA_PATH="$XCS_OUTPUT_DIR/$XCS_BOT_NAME.ipa"
echo $IPA_PATH

【讨论】:

【参考方案3】:

我不熟悉 Xcode Server,但通常 Unix/CI 系统在导出环境变量时只会将其导出到当前会话。

如果你想永久设置一个环境变量,你必须将它设置在一个初始化文件中,比如 ~/.bash_profile 或 ~/.bashrc 这样它总是在 shell 会话开始时被设置/加载(例如:当你登录时使用终端 - 确切的文件取决于您启动的外壳类型)。

持久地导出这些也没有多大意义,因为在这种情况下,如果您运行不同的集成,它们只会覆盖彼此导出的环境变量(它们会设置相同的环境变量)。

这就是为什么通过环境变量进行通信的系统通常不会将变量写入持久初始化文件,而只是export变量。使用 export 变量可以从导出它的进程访问,也可以从进程启动的子进程访问

例如,在 bash 脚本中,如果您 export 一个变量,您可以在导出后从 bash 脚本以及从 bash 脚本启动的任何命令/程序访问它,但是当 bash 脚本完成后环境将无法访问。

编辑 澄清一下:您应该能够从 Xcode Server 运行的后触发脚本访问这些环境变量,但您很可能无法从终端/命令行访问这些环境变量。

我在哪里可以找到这个 CI 系统创建的变量列表?

您可以使用env 命令打印所有可用的环境变量。在 bash 脚本中,只需在新行中键入 env,如下所示:

#!/bin/bash
env

这将打印所有可用的环境变量(不仅仅是 Xcode Server 定义的那些!) - 如果您愿意,您可以简单地将其通过管道传输到文件进行检查,如下所示:

#!/bin/bash
env > $HOME/envinspect.txt

此脚本运行后,您只需打开用户主文件夹中的 envinspect.txt 文件即可。

【讨论】:

以上是关于访问 Xcode Server CI bot 运行中的构建文件夹(环境变量?)的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 OSX Server 3.2.1 在 XCode 6.0.1 中创建 CI Bot

XCode Server CI Bot Integrate 错误(Swift)

在使用 Xcode Server bot 集成之前复制文件

Xcode Bot CI 服务 SVN 问题

Apple 的 CI Bots 的 KIF iOS 测试失败

您如何配置 Xcode Server (Bot) 以仅保留 n 个最近的集成?