所以当我尝试使用Docker设置Jenkins捆绑器时,我似乎无处可去,设置Jenkins很好,没有问题,但我无法弄清楚如何让Bundler访问
FROM jenkins
USER root
RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
RUN /bin/bash -l -c "curl -L get.rvm.io | bash -s stable --ruby"
RUN /bin/bash -l -c "source /usr/local/rvm/scripts/rvm"
USER jenkins
另一篇帖子中的上一条评论建议install bundler from the debian package
,但不确定我会如何做,或另一种选择是将GEM_PATH
添加到PATH
变量....
RUN /bin/bash -l -c 'export GEM_PATH=/usr/local/bundle' >> $PATH/.bashrc
我认为这根本不对。
我需要bundler的原因是我在Jenkins的post构建脚本中需要运行bundle exec rubocop
和bundle install
。
答案 0 :(得分:0)
我想出了这个:
$ cat Dockerfile
FROM jenkins
USER root
RUN apt-get update && apt-get install -y ruby bundler
USER jenkins
$ cat Gemfile
source "https://rubygems.org"
gem "hello-world"
$ docker run -ti -v $(pwd):/src $(docker build -q .) sh -c "cd /src ; bundle install --binstubs --path vendor/bundle ; ./bin/hello-world"
Using hello-world 1.2.0
Using bundler 1.7.4
Your bundle is complete!
It was installed into ./vendor/bundle
this is executable hello-world
这适用于这个hello-world示例。在您的问题中,您正在安装rvm。人们经常这样做是因为当你的项目使用特定的版本时,rvm允许安装大量不同的ruby版本。
注意:在你的Dockerfile中,RUN /bin/bash -l -c "source /usr/local/rvm/scripts/rvm"
完全没用,因为它源于设置环境的脚本在运行时使用特定的ruby版本(在当前shell中)。生成docker镜像时,运行此脚本设置的变量不会在运行此图像的容器中设置。
答案 1 :(得分:0)
我对此的回答是在Dockerfile的最后添加了为'jenkins'用户安装rvm的步骤,然后再改回'root'
USER jenkins
RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
RUN \curl -sSL https://get.rvm.io | bash -s stable
RUN /bin/sh -c export PATH="$PATH:/usr/local/rvm/bin" [[ -s "$HOME/.rvm/scripts/rvm" ]]
RUN /bin/sh -c export PATH="$PATH:/usr/local/rvm/bin" -s "source '$HOME/.rvm/scripts/rvm'"
RUN echo "source /usr/local/rvm/scripts/rvm" >> /home/jenkins/.profile
USER root