Рубрики
Uncategorized

Rails: Minitest & Gitlab CI

Привет всем, этот пост — первый из серий, который я хотел бы написать, вращаться вокруг рельсов и CI / CD …. Теги с рельсами, дежоптом, рубином, тестированием.

Привет всем, этот пост — первый из серий, который я хотел бы написать, вращаться вокруг рельсов и CI/CD.

В этом я покажу вам, как настроить правильный CI для ваших новых железнодорожных проектов.

Я пытался дать вам самый простой пример, чтобы сосредоточиться на том, что интересно, конфигурация, я надеюсь, что вы найдете это полезным.

Вот репо рядом с этой статьей: https://gitlab.com/mpressen/rails_with_gitlab_ci.

Инициативный проект

$ rails new rails_with_gitlab_ci --database=postgresql
$ cd rail_with_gitlab_ci
$ rails db:create db:migrate
$ rails server

Идеальное время для совершения и толкать наш код:

$ git add -A
$ git commit -m 'init rails project with postgresql'
$ git remote add origin git@gitlab.com:$(username)/rails_with_gitlab_ci.git
$ git push --set-upstream origin master

Добавить неудачные тесты

Давайте создадим провал теста контроллера:

# test/controllers/dummy_controller_test.rb

require 'test_helper'

class DummyControllerTest < ActionDispatch::IntegrationTest
  test "the truth" do
    assert false
  end
end

И тест на провал:

# test/system/dummy_system_test.rb

require 'application_system_test_case'

class DummySystemTest < ApplicationSystemTestCase
  test 'the truth' do
    assert false
  end
end

Настройка gitlab ci.

# .gitlab-ci.yml

image: ruby

stages:
  - test

tests:
  stage: test
  services:
  - postgres
  - name: selenium/standalone-chrome
    alias: chrome
  cache:
    paths:
      - apt-cache
      - node_modules
      - vendor/bundle
  variables:
      DB_HOST: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: root
      SELENIUM_REMOTE_URL: http://chrome:4444/wd/hub
      RAILS_ENV: test
      BUNDLE_PATH: vendor/bundle
  before_script:
    - export APT_CACHE_DIR=`pwd`/apt-cache && mkdir -pv $APT_CACHE_DIR
    - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
    - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
    - apt-get update -qq && apt-get -o dir::cache::archives="$APT_CACHE_DIR" install -yqq yarn
    - yarn install
    - bundle install
    - bundle exec rails db:setup
  script:
    - bundle exec rails test  test/*

# config/database.yml

...
#
default: &default
  ...
  host: <%= ENV["DB_HOST"] %>
  username: <%= ENV["POSTGRES_USER"] %>
  password: <%= ENV["POSTGRES_PASSWORD"] %>
...

Эта конфигурация кэширует назад и передние зависимости для скорости и стоимости вычислений (обязательно).

Моя любимая часть — это использование третьего образа докера, Селен/Автономный хром Это позволяет избежать болевой точки (хромированные версии …) Некоторые могли столкнуться до. С помощью этого конфигурации это другой контейнер, который запускает навигатор хрома без головы на системных тестах.

# test/application_system_test_case.rb

require "test_helper"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  if ENV['SELENIUM_REMOTE_URL']
    Capybara.server_host = '0.0.0.0'
    driven_by :selenium, using: :headless_chrome, screen_size: [800, 800], options: { url: ENV['SELENIUM_REMOTE_URL'] }
  else
    driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
  end

  def setup
    if ENV['SELENIUM_REMOTE_URL']
      net = Socket.ip_address_list.detect(&:ipv4_private?)
      ip = net.nil? ? 'localhost' : net.ip_address
      Capybara.app_host = "http://#{ip}"
    end
    super
  end
end
group :test do
  ...
  gem 'webdrivers', require: !ENV['SELENIUM_REMOTE_URL']
end

Давай попробуем !

$ git add -A
$ git commit -m 'setup gitlab CI'
$ git push

Теперь давайте заменим Отстаивать false по Отстаивать истину В наших фиктивных тестах, совершайте и толчок.

Ага !

Оригинал: «https://dev.to/mpressen/rails-minitest-gitlab-ci-31ap»