【问题标题】:Setting up CD for a Ruby on Rails project with Bitbucket Pipelines and Docker使用 Bitbucket Pipelines 和 Docker 为 Ruby on Rails 项目设置 CD
【发布时间】:2016-08-21 13:08:46
【问题描述】:

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

在我的谷歌搜索中,Docker 谈到了使用 docker-compose 创建一个包,所以我有一个 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"?

【问题讨论】:

  • 在单个 Dockerfile 中你不应该有 2 个 FROM 命令。 docker 的重点是每个容器都是专门的,并且运行一个(几乎)命令。您将拥有一个用于 Ruby 的容器和一个用于 Postgres 的容器,如果您打算将它用作 sidekiq 后端,最终还有一个用于 redis。 Docker-compose 是一个可以让你编排各种容器的工具。开始看这里:docs.docker.com/compose/rails

标签: ruby-on-rails postgresql docker docker-compose bitbucket-pipelines


【解决方案1】:

听取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...

【讨论】:

    【解决方案2】:

    Docker compose 是 Bitbucket Pipelines 中的 still not available,因此您必须使用一个 Docker 镜像,该镜像已经安装了您需要的所有依赖项。

    我们也一直在努力寻找具有 Django Postgres 堆栈的良好 Docker 容器,最终构建了自定义 Docker 容器。我在帖子中描述了整个过程和步骤:Building, Testing and Deploying Django App with Bitbucket Pipelines。您可以将其用作项目的模板,并将 Python 依赖项替换为 Ruby。

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多