ruby - 在 Xcode 机器人触发器中安装 Pod

标签 ruby xcode bash cocoapods xcode-bots

我使用以下内容启动了预集成触发器

cd "${XCS_PRIMARY_REPO_DIR}"
pwd
pod install --verbose

它给了我

pod: command not found

简单吧?找不到 pod 二进制文件,我将把它指向路径。很简单。

cd "${XCS_PRIMARY_REPO_DIR}"
pwd
/usr/local/bin/pod install --verbose

这给了我以下内容

env: ruby_executable_hooks: No such file or directory

这让我觉得 ruby​​ 的设置不适合运行触发器。现在了解构建服务器终端中的一个简单的“pod install”修复了所有这些并且运行良好和花花公子。该项目绝对可以在构建服务器上正确构建。

因此,由于我认为环境一团糟,我将尝试从包装器目录运行它,该目录应该设置得很好。这就是它的目的吗?每当我需要 ruby​​ 在构建的运行脚本阶段运行时,这在历史上就起作用了。所以我们开始触发。

~/.rvm/wrappers/ruby-2.2.3@global/pod install

我在构建服务器的终端测试了这个,它很酷,所以我把它放到触发器中,我得到了这个

/Users/XcodeServer/.rvm/wrappers/ruby-2.2.3@global/pod: line 7: exec: pod: not found

:/好吧,我破解 pod 源代码,看看它在第 7 行的内容

exec pod "$@"

我不是 ruby​​ 人,但它对我来说没有任何意义。哦,是的,我尝试将 cocoapods 直接下载到 usr/local/bin,而不是让它安装到其他目​​录,首先卸载所有 cocoapods,然后执行以下操作

sudo gem install -n /usr/local/bin cocoapods --pre

我放 --pre 是因为我需要 1.1.0.rc.2 来修复构建 swift 3 的错误。任何人,这一切都行不通。似乎其他人都可以简单地把

cd /path/to/proj/
pod install

进入他们的 Xcode 机器人触发器并让它们工作。

最佳答案

我让触发器在执行 pod 安装的构建服务器上运行脚本。

因此在您的构建服务器上制作一个具有以下内容的 shell 脚本:

#make sure the encoding is correct
export LANG=en_US.UTF-8

# fix the path so Ruby can find it's binaries
export PATH=/usr/local/bin:$PATH
echo "PATH: $PATH"

# update or install depending on what we got
if [ -d ${PODS_DIR} ]; then 
    # pods directory exist
    echo "=================="
    echo "   Delete Pods"
    echo "=================="

    # delete cocoapods files if they exist
    rm -rf "${PODS_DIR}"
    eval rm "${BS_SRCROOT}/Podfile.lock"
    eval rm -rf "${BS_SRCROOT}/${BS_EXECUTABLE_NAME}.workspace"
    echo "Deleted Pods directory ${PODS_DIR}"
    echo "Deleted ${BS_EXECUTABLE_NAME}.workspace"
    echo "Deleted Podfile.lock"
else 
    # no need to delete pod files
    echo "Pods NOT detected at ${PODS_DIR}"
fi

echo "=================="
echo "   Install Pods"
echo "=================="

# make sure we are where we need to be
eval cd "${BS_SRCROOT}"
pwd
~/.rvm/wrappers/ruby-2.2.3@global/pod install

请记住在命名脚本时使用“sh”后缀。然后在你的机器人触发器中运行这样的脚本

sh ~/Path/to/Scripts/podUpdateHack.sh

有点傻,但它有效,¯\_(ツ)_/¯ 哦,是的,所有那些愚蠢的评估都在那里,因为 BS_SRCROOT 是 XCode 机器人上的一个环境变量,它引用环境变量 $XCS_PRIMARY_REPO_DIR。您可以将其替换为 $XCS_PRIMARY_REPO_DIR 并删除 eval。我不记得是谁定义了可能来自工作区的 PODS_DIR,而 BS_EXECUTABLE_NAME 是项目中可执行文件名称的重新定义,因为此时它不存在。

希望对兄弟有帮助。

关于ruby - 在 Xcode 机器人触发器中安装 Pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521369/

相关文章:

linux - 在读取命令时保留带空格的字符串

bash - 在 bash 中按列绑定(bind)两个文件

ruby - 如何告诉 CSV 创建一列而不是一行?

swift - 碰撞后转换自定义 SKSpriteNode 类

bash - git退出后的输出

swift - 尽管只有一个被按下,但多个 UITableViewCells 受到迭代按钮的影响?

c++ - 在 CodeRunner 中编译 C++/C 代码时出现 Clang 错误

ruby - 如何使用 Ruby 查找一年中的月份

ruby - 在服务器上更改 Time.now 以返回不同的时区

mysql - 使用 Ruby/MySQL 构建有效的 MySQL 查询