支持
RVM 由志愿者社区维护,请将问题报告到 RVM 问题跟踪器。
如果您能提供帮助或希望成为维护者之一,请开始提供帮助。您可以在 RVM Github 组织 中找到更多与 RVM 相关的项目。
赞助商
Carbon Ads

与 Jenkins 的持续集成

将 rvm 与 Jenkins 集成不仅允许您使用不同的 gemsets 测试多个项目,还允许您同时针对多个 Ruby 测试不同的代码库。以下指南主要针对 Ubuntu 安装,但说明应该与任何平台兼容。

请注意,这些说明是基于 Nick Quaranto 在 thoughbot 博客上的 优秀博客文章,并针对更通用的用途进行了调整。

总体概述

一般来说,您需要

有关更详细的指南,请参见以下内容

步骤 1. 获取和安装 Jenkins

第一步是在您选择的系统上安装 jenkins。目前,您可以通过多种方式获取它

  1. 通过操作系统级别的软件包安装(在本例中为 debian 软件包)
  2. 手动下载并设置
  3. 使用 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 命令/相关设置。