使用 Nexus 搭建 Ruby 私有源

2,042 阅读3分钟

前言

学过、用过Ruby的同学一定用过一个命令:gem install XXX,这一步有时候会很慢,很多教程上面都有教我们一招 —— 换国内Ruby镜像,或者说国内的源。命令如下:

# 移除自带的官方源
gem sources --remove https://rubygems.org/

# 添加国内镜像(淘宝的源)
gem sources --add https://gems.ruby-china.org/

切换到国内的源之后执行 gem install XXX 就会快很多。

如果细心的同学就会想到,我们使用公开的ruby库、ruby工具可以这样子搞,但如果公司里写的东西也想用gem install XXX 的形式来使用呢?我们总不能扔到别人家的源上去吧?当然不行啦,你要这样子干了,老板一定会打屎你,那是不是可以搞一个自己家的私有Source呢?当然可以,这就是本文要讲的Gem私有源。

搭建自己的私有Source

一. 安装Nexus

这里我们会用到一个叫做Nexus的东西,应该有很多同学都会这个东西很熟悉,因为Java、Docker、npm、yum等许多东西都可以使用Nexus来做私有仓库。

Nexus的安装教程不是本文的重点,大家可以到这里查看安装教程,推荐使用 OSS 3.x 版本。安装好之后的样子大概是这样:

二. 创建RubyGem仓库

0:00 / 0:00 Speed Loop

1. 登录有创建仓库权限的账号,我这里使用的是admin账号。

2. [可选] 创建一个二进制的存储实例(Blob Stores),名字自己随便起一个,这个在后面创建Gem源仓库的时候会用到,也是以后用来存储你上传的gem。

3. 创建一个仓库(Repository),Nexus支持很多种语言的依赖工具仓库,比如maven、npm、docker、yum等,这里我们当然是选择 rubygems 的了,不过这里可以看到 rubygems 有三种类型可以选用:group、hosted、proxy,解释如下:

  • group:仓库组,一般用来做多仓库管理的,可以把它看成是hosted、proxy的上层管理者,这里我们不用它。
  • hosted:私有仓库,也是我们接下来要用到的。
  • proxy:代理仓库,用过Nexus-maven的同学应该很清楚这是个什么东西。没用过的同学可以这样来理解:原本你的电脑执行 gem install xxx 安装一个开源库的时候是直接去官方的Source(也叫Repository)拉取,如果你用这个proxy代理的话,你执行 gem install xxx 之后就是你去你这个Nexus-gem-proxy 仓库上拉取,这个仓库有的话就直接返回给你了,没有的话他会去官方的Source上把你需要的库拉取下来缓存到Nexus上,然后再返回给你,下次你再需要的话就不用再去外网拉取了,直接把缓存中的东西给你,这样一步代理的工作,就可以大大加快你执行 gem install xxx 的速度。流程图如下:

三. 添加私有Source

0:00 / 0:00 Speed Loop

四. 将代码推上私有Source

0:00 / 0:00 Speed Loop

这里我们需要用到一个叫做 nexus-gem 的工具,使用起来很简单:

# 安装 nexus-gem,使gem可以访问Nexus
gem install nexus

# 编译
gem build Foo.gemspec

# 上传。上一步编译的时候会产生一个 Foo-[version].gem 的文件,举例:Foo.gemspec 里 s.version=1.1.2,那么编译后就会生成一个 Foo-1.1.2.gem 的文件,这个文件通过下面的命令就可以上传到Nexus。
gem nexus Foo-[version].gem

注意:该命令在第一次执行的时候会让你输入Nexus的地址、Nexus系统用户名密码,地址就是上面视频里多次复制的那个地址。

最终效果图: