当前,我们有一个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没有损坏任何东西?
答案 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的目录的位置。
希望这会有所帮助。