与 Jenkins 的持续集成
将 rvm 与 Jenkins 集成不仅允许您使用不同的 gemsets 测试多个项目,还允许您同时针对多个 Ruby 测试不同的代码库。以下指南主要针对 Ubuntu 安装,但说明应该与任何平台兼容。
请注意,这些说明是基于 Nick Quaranto 在 thoughbot 博客上的 优秀博客文章,并针对更通用的用途进行了调整。
总体概述
一般来说,您需要
- 在特殊用户上设置 jenkins
- 设置 rvm(可选地使用 rvm 设置自动安装 Ruby)
- 尽可能使用 rvmrc / 在 shell 任务中使用 bundle install,并将 -e 传递给 shebang。
- 如果 rvm 不可用,请手动 source rvm。
有关更详细的指南,请参见以下内容
步骤 1. 获取和安装 Jenkins
第一步是在您选择的系统上安装 jenkins。目前,您可以通过多种方式获取它
- 通过操作系统级别的软件包安装(在本例中为 debian 软件包)
- 手动下载并设置
- 使用 jenkins.rb(它捆绑了常见的插件等)
如果您选择方法二或三,您需要先为 jenkins 创建一个新用户(通常称为“jenkins”)。在本例中,我们将使用第一个选项,按照 官方 jenkins 网站上的说明 进行操作。这种方法会自动为我们设置 init.d,还会自动创建 jenkins 用户。
如果手动设置,我建议通过 jenkins.rb 安装 jenkins,因为它提供了很多便利功能。
步骤 2. 设置 RVM
下一步可以说是最重要的 - 您需要为上一步中添加的 Jenkins 用户实际设置 rvm。首先,我们需要安装所有依赖项。RVM 会自动安装构建每个 Ruby 所需的项目。
sudo apt-get install curl bison build-essential zlib1g-dev libssl-dev libreadline5-dev libxml2-dev git-core
请注意,如果您希望对 JRuby 也运行 CI,则需要安装更多软件包,包括 JDK - 有关更多信息,请参阅上面链接的 Ubuntu 页面。
接下来,您需要以 Ubuntu 用户身份登录,在本例中为 Jenkins。
sudo -Hiu jenkins
这应该会将您带到一个加载了 Bash 的 Shell。因此,现在您可以运行 rvm 安装 页面上的说明 - 我们强烈建议使用 rvm-install-head 方法,仅为 Jenkins 用户设置它。
接下来,我们需要将 rvm 添加到我们的 Shell 配置文件 - 在本例中,我们将以下内容添加到我们 ~/.bashrc 的末尾
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
此外,在 Ubuntu 中,默认的 .bashrc 包含一行包含“&& return” - 如果您的系统也是如此,请确保您按照 rvm 安装的说明将其替换为 if。
最后,如果我们退出并以 Jenkins 身份重新登录,rvm 现在应该已加载。您可以通过键入以下内容来确认这一点
type rvm | head -1
这应该会显示“rvm is a function”。
最后,我们将以下几行添加到 ~/.rvmrc 中,作为 Jenkins 用户,以使实际过程通常更容易
rvm_install_on_use_flag=1 rvm_project_rvmrc=1 rvm_gemset_create_on_use_flag=1
有关每个含义的解释,请参阅 rvmrc 页面,其中详细介绍了每个含义/本文档的相关部分 - 使用这种方法的一般思路是,当我们第一次使用 Ruby/Gemset 时,rvm 会自动安装 Ruby 并创建一个 Gemset。
步骤 3. 配置 Jenkins/添加项目
对于实际的繁重工作,我们将使用 Jenkins 运行 Shell 脚本的能力。
我们建议的设置是使用以下脚本,并使用 Jenkins 选项“执行 Shell 脚本”
#!/bin/bash # Use the correct ruby rvm use "ruby@gemset" # Set "fail on error" in bash set -e # Do any setup # e.g. possibly do 'rake db:migrate db:test:prepare' here bundle install # Finally, run your tests rake
-e 选项会导致 Bash 在任何命令以错误退出时退出。这是使脚本按预期工作的重要因素。
请注意,在某些设置中,环境可能无法正确加载。在这种情况下,您应该在 Shebang 下方添加以下内容
source "$HOME/.rvm/scripts/rvm"
如果您希望使用矩阵构建,这种方法意味着您可以定义一个环境变量,例如 build_ruby,并将矩阵字段设置为您希望使用的每个 Ruby,将 rvm use 行替换为
rvm use "$build_ruby@gemset-to-use"
从 Git 存储库克隆时,您需要确保为 Jenkins 用户添加 SSH 密钥。
最后,如果您希望自动使用来自 rvmrc 的 Ruby/以这种方式处理设置,您可能需要添加
[[ -s ".rvmrc" ]] && source .rvmrc
代替 rvm use 命令/相关设置。