使用Docker和Bundler设置Jenkins

时间:2016-05-18 19:43:41

标签: jenkins docker dockerfile

所以当我尝试使用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 rubocopbundle install

2 个答案:

答案 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