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



我很想为Ruby on Rails/PostgreSQL/Sidekiq项目在Bitbucket pipeline中设置持续部署,但是我正在努力弄清楚它是如何组合在一起的,特别是如何让postgres在Docker映像中工作。我对Docker和Pipelines很陌生。

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

是否有一个现有的公共形象,有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的建议,您可以轻松地像这样设置您的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

你可以看到,我需要创建一个具有创建数据库权限的用户。

对于调试,您可以先在本地尝试:

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容器,最终构建了一个自定义的Docker容器。我已经在一篇文章中描述了整个过程和步骤:用Bitbucket管道构建、测试和部署Django应用程序。您可以将其用作项目的模板,并用Ruby替换Python依赖项。

最新更新