使用单独的本地gemspec运行docker映像

时间:2018-09-25 17:01:19

标签: ruby docker rubygems docker-compose dockerfile

当前,我们有一个Dockerfile来创建我们的测试映像。

FROM ruby:2.4

USER root

ENV LOCAL_GEM_PATH ./../qa-common/

RUN /bin/bash -l -c "gem install nokogiri -v 1.8 --no-ri --no-rdoc"


COPY Gemfile* /tmp/
COPY qa-common $LOCAL_GEM_PATH
WORKDIR /tmp

#================================================================
# Installs gems . Put frequently changed commands (COPY, ADD)
# after this as section as much possible to insure a quick build
#================================================================

RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"
RUN /bin/bash -l -c "bundle install"

COPY . /usr/src/app
WORKDIR /usr/src/app

CMD ["-T"]

ENTRYPOINT ["bundle", "exec", "ruby", "bin/run_tests_from_queue.rb"]

我们遇到了一个错误,其中Dockerfile中的捆绑包安装找不到qa常见的gem(这是我机器上的本地存储库,带有.gempspec)

通常在没有docker的情况下,当前项目的gemfile指定,因此我们对qa-common所做的更改可以在本地计算机上进行测试

gem 'qa-common', :path => local_gem_directory

我们尝试过的所有方法都阻止了该软件包的安装,因为它要么找不到gem / gemspec,要么因为qa-common在测试目录(Dockerfile所在的目录)之外。

此问题的最佳实践或解决方案是什么,因此,当我们创建图像以运行依赖于此qa通用gem的测试时,我们可以在计算机上使用本地qa通用版本来测试对qa的更改-common没有损坏任何东西?

1 个答案:

答案 0 :(得分:0)

我一直在处理一个非常类似的问题,并且认为这对我有用:

宝石文件

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem_path = ENV.fetch('LOCAL_GEM_PATH', '.')

gem 'my_personal_gem', path: File.join(gem_path, 'my_personal_gem')

然后,您可以将LOCAL_GEM_PATH设置为包含Gems的目录的位置。

希望这会有所帮助。