使用Bitbucket Pipelines和Docker为Ruby on Rails项目设置CD

我很想在一个Ruby on Rails / PostgreSQL / Sidekiq项目中的Bitbucket Pipelines中进行连续部署,但是我正在努力让自己的头脑完全融合在一起,特别是如何在Docker镜像中使用postgres 。 我对Docker和Pipelines很新。

在我的谷歌search中,Docker谈到了使用docker-compose来创build一个bundle,所以我有一个Postgres容器和一个Sideqik容器,然后将它们与应用程序容器链接起来。 但是我不确定包和图像之间有什么区别,以及Bitbucket Pipelines是否支持包。 最终我想在Heroku上设置部署到临时环境,但是现在只要让rspec spec在Pipelines中工作就好了。

是否有一个已经设置了Ruby + PostgreSQL的公有图像? 如果不是,我从哪里开始? 我目前的Dockerfile看起来像这样:

 FROM postgres:9.4 FROM ruby:2.3.1-onbuild RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs postgresql-client 

然后我运行docker build .docker run -it my-image /bin/bash和以下命令:

 root@a84ad0e7c16b:/usr/src/app# postgres bash: postgres: command not found root@a84ad0e7c16b:/usr/src/app# psql psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 

https://bitbucket.org/spittet/ruby-postgresql的build议,你可以很容易地设置你的bitbucket-pipelines.yml像这样:

 image: spittet/ruby-postgresql pipelines: default: - step: script: - bundle install - /etc/init.d/postgresql start - sudo -u postgres sh -c 'createuser root --createdb' - rails db:setup RAILS_ENV=test - rspec 

正如你可能看到我需要创build一个用户创build数据库的权限。

对于debugging,你可以先在本地尝试:

 run -i -t -v <local_directory_of_your_rails_app>:<directory_on_docker> spittet/ruby-postgresql /bin/bash cd <directory_on_docker> bundle install... 

Docker compose在Bitbucket Pipelines中仍然不可用 ,所以你必须使用一个Docker镜像,它具有你需要的所有依赖。

我们也努力寻找使用Django Postgres堆栈的好Docker容器,并最终构build了定制的Docker容器。 我已经在一篇文章中描述了整个过程和步骤: 使用Bitbucketstream水线构build,testing和部署Django应用程序 。 您可以将其用作项目的模板,并用RubyreplacePython依赖项。