GitLab CI for Rails App Using Postgres and Elasticsearch (searchkick gem)

Jak*_*son 4 postgresql ruby-on-rails elasticsearch gitlab-ci searchkick

.gitlab-ci.yml当我将它推送到 GitLab 时,如何通过 searchkick gem 为依赖于 PosgreSQL 和 Elasticsearch 的 Rails 应用程序配置文件以运行我的测试?

Jak*_*son 5

我想发布这个问题,因为我花了太长时间才找到答案并且不想让其他人感受到我的痛苦。下面的示例不仅构建了我的应用程序,还运行了我的所有规范。

设置

  • 导轨 5+
  • PostgreSQL 9.6
  • Rspec宝石
  • Searchkick gem(处理 Elasticsearch 查询和配置)

配置

使用列出的配置将以下文件添加到您的 Rails 应用程序。

配置/gitlab-database.yml

test:
  adapter: postgresql
  encoding: unicode
  pool: 5
  timeout: 5000
  host: postgres
  database: test_db
  user: runner
  password: ""
Run Code Online (Sandbox Code Playgroud)

.gitlab-ci.yml

image: ruby:2.4.1

services:
  - postgres:latest
  - elasticsearch:latest

variables:
  POSTGRES_DB: test_db
  POSTGRES_USER: runner
  POSTGRES_PASSWORD: ""
  ELASTICSEARCH_URL: "http://elasticsearch:9200"

stages:
  - test

before_script:
  - bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"
  - cp config/gitlab-ci/gitlab-database.yml config/database.yml
  - RAILS_ENV=test bundle exec rails db:create db:schema:load

test: 
  stage: test
  script:
    - bundle exec rspec
Run Code Online (Sandbox Code Playgroud)

就是这样!您现在已配置为每次推送时在 gitlab 上自动运行您的规范。

进一步说明

让我们从 PostgreSQL 开始。当我们启动我们的新运行器时,我们正在复制的应用程序将不知道如何正确连接到 Postgres。因此,我们创建了一个新database.yml文件,我们为其添加前缀,gitlab-因此它不会与我们的实际配置冲突,并将该文件复制到运行程序的 config 目录中。该cp命令不仅复制文件,而且将替换当前存在的文件。

我们通过GitLab连接的项目是database:user:password:。我们通过在我们的环境中指定这些相同的名称来做到这一点variables,确保一切都正确连接。

好的,GitLab 的网站上对连接 PostgreSQL 进行了很好的解释和记录。那么我是如何让 Elasticsearch 工作的,这在任何地方都没有得到很好的解释?

魔法再次发生在variables. 我们需要设置ELASTICSEARCH_URL环境变量,通过 Searchkick gem 提供给我们,因为 Elasticsearchhttp://localhost:9200默认查找。但是由于我们通过服务使用 Elasticsearch,我们需要明确告诉它不要使用默认值并使用我们服务的主机名。所以我们然后替换http://localhost:9200http://elasticsearch:9200,它确实正确映射到我们的服务。