Привет всем, этот пост — первый из серий, который я хотел бы написать, вращаться вокруг рельсов и 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»