Статьи

Непрерывное развертывание Rails с SemaphoreCI

семафор

Нашей целью сегодня является настройка проекта Rails, который использует Semaphore CI для тестирования проекта, а затем автоматически развертывается на сервере Amazon EC2 с использованием Capistrano. Мы будем использовать Nginx, Puma и Postgres, а также Ruby 2.3.0 и Rails 4.2.6.

Что такое семафор?

Семафор позволяет быстро настроить быстрый непрерывный процесс доставки для любого веб-проекта. Вы можете протестировать каждое внесенное вами изменение и легко развернуть новые версии на радость своим пользователям. SemaphoreCI позволяет вам поддерживать свою команду в туалете, интегрируя его с другими сервисами. В настоящее время его используют и высоко ценят сотни компаний по всему миру. Вы можете прочитать больше о предложении здесь.

Преимущества КИ

Некоторые из основных преимуществ непрерывной интеграции:

  • Это держит всех в курсе о здоровье сборки. SemaphoreCI сообщает всем, если сборка не удалась, какая фиксация вызвала сбой сборки и кто ее создал.
  • Позволяет непрерывно и плавно внедрять новые функции. Когда новый код объединяется в указанной ветви, запускается набор тестов, и, если все тесты пройдены, развертывание запускается автоматически.

Процедура

Убедитесь, что у вас установлен RVM . Я использую Ruby 2.3.0 и Rails 4.2.6 .

Создать новое приложение Rails

Введите следующее в терминале. Я добавляю флаг -d postgresql, чтобы генератор знал, что мы хотим использовать Postgres в качестве БД:

$ rails new ci-test-and-deploy-to-ec2-capistrano -d postgresql 

CD в ​​каталог проекта:

 $ cd ci-test-and-deploy-to-ec2-capistrano 

Создайте базу данных:

 $ rake db:create 

Создайте каркас для нашего проекта, который будет создавать модель , контроллер , виды и маршруты . Мы назовем ресурс Блог и предоставим имена полей. Это также сгенерирует миграцию для создания таблицы базы данных blogs :

 $ rails generate scaffold blog author title body:text 

Перенос базы данных:

 $ rake db:migrate 

Добавьте эту строку в config / rout.rb. Это устанавливает корень приложения.

 root 'blogs#index' 

Запустите сервер приложений, выполнив эту команду в терминале:

 $ rails server 

Посетите http: // localhost: 3000, чтобы убедиться, что наше приложение настроено нормально. Вы должны увидеть этот экран:

Отлично! Наша базовая настройка приложения работает нормально.

Контроль версий проекта на BitBucket

Почему я выбрал Bitbucket вместо широко распространенного GitHub?

Ценообразование. Bitbucket дает вам неограниченное количество бесплатных репозиториев. Практически все те же мощные функции, что и в GitHub, плюс гибкая ценовая политика. Мы собираемся использовать это, поскольку я хотел продемонстрировать, как люди могут быстро запустить частный проект, который бесплатно контролируется версиями, а также может обеспечить непрерывную бесплатную доставку (100 частных сборок в месяц) с SemaphoreCI.

Однако, если вы хотите использовать Github, то, что мы здесь делаем, легко сделать на этой платформе.

Давайте начнем с BitBucket

Зарегистрируйтесь на BitBucket.

Создайте и назовите свой репо. Здесь мы будем использовать пример проекта / приложения, созданного на предыдущих этапах, и перенесем его в этот недавно созданный репозиторий.

Вы уже должны быть в каталоге вашего проекта в окне терминала. cd в каталог, если вы еще этого не сделали:

 $ cd /path/to/my/repo 

Инициализируйте пустой репозиторий git в каталоге вашего проекта:

 $ git init Initialized empty Git repository in /Users/sarmad/projects/ci-test-and-deploy-to-ec2-capistrano/.git/ 

Теперь запустите эти команды. Не забудьте заменить [email protected]:sarmadsabih/ci-test-and-deploy-to-ec2-capistrano.git на тот, который показан в вашем хранилище:

 $ git remote add origin [email protected]:sarmadsabih/ci-test-and-deploy-to-ec2-capistrano.git 

Добавить и зафиксировать все файлы:

 $ git add -A && git commit -m "first commit" 

Наконец нажмите на ветку master вашего репо:

 $ git push origin master 

Обновите страницу хранилища, и вы должны увидеть страницу обзора. Ваш репо теперь онлайн на Bitbucket.

Настройте сервер Amazon EC2

Теперь нам нужно настроить сервер Amazon EC2 для нашего приложения. Зарегистрируйтесь на Amazon AWS . Он имеет бесплатный уровень, который применяется в течение года после регистрации. Бесплатный уровень дает вам 750 часов (полный месяц) в месяц экземпляра t2.micro до истечения срока действия бесплатного уровня.

Войдите в консоль управления AWS и нажмите на EC2, чтобы перейти на панель мониторинга EC2:

AWS-менеджмент-консоль

Вы попадете на панель управления EC2. Нажмите на кнопку «Запуск экземпляра»:

AWS-ec2-панель

Выберите Ubuntu 14.04 LTS 64-bit в качестве ОС:

AWS-EC2-ами выбор

Выберите экземпляр t2.micro, который подходит для уровня Free. Вы можете выбрать другой экземпляр в зависимости от ваших вычислительных требований. Нажмите «Далее: Настройка сведений об экземпляре»:

AWS-EC2-экземпляр типа

Значения по умолчанию будут хорошо работать на этой странице. Изменяйте значения, только если вы знаете, что делаете, и если это ваше требование. Нажмите «Далее: Добавить хранилище»:

AWS-EC2-экземпляр деталь

Оставьте все как есть и нажмите «Далее: Экземпляр тега»:

AWS-EC2-хранения

Назовите экземпляр и нажмите «Далее: Настройка группы безопасности:

AWS-тег-экземпляр

Просмотрите выбранные настройки / параметры и нажмите «Запустить»:

AWS-ec2-обзор-экземпляр запуск

Обратите внимание на этот шаг! Выберите «Создать новую пару ключей» в первом раскрывающемся списке. Введите имя для пары ключей в поле ввода, а затем загрузите пару ключей. Предупреждение! Вы не можете загрузить пару ключей снова после этого экрана. Если вы потеряете этот ключ, вы никогда не сможете подключиться к своему экземпляру Amazon EC2 по ssh (не совсем так, но это трудно). Поэтому загрузите пару ключей (файл .pem) и сохраните ее в безопасности.

Нажмите «Launch Instance», чтобы наконец запустить экземпляр:

AWS-ec2 создать новый, пара ключей

Ваш экземпляр запущен:

AWS-ec2-экземпляр запущен

Это страница, где перечислены все ваши экземпляры. Убедитесь, что ваш экземпляр находится в состоянии «Работает» и все проверки состояния прошли:

AWS-EC2-экземпляры

Выберите свой экземпляр, и вы сможете увидеть общий IP-адрес экземпляра в нижней части страницы. Скопируйте публичный IP, он нам скоро понадобится:

AWS-EC2-экземпляры, общественно-ф

Перейдите в папку, где находится ваш .pem файл. Мой находится в моем каталоге загрузок . Измените следующую команду, если ваше местоположение файла pem отличается:

 $ cd ~/Downloads 

Используйте команду pwd чтобы получить полный путь к каталогу:

  $ pwd /Users/sarmad/Downloads 

Вы будете использовать этот путь ниже. Не забудьте заменить путь и имя файла на ваш. Также замените публичный IP-адрес, используемый ниже, на публичный IP-адрес вашего экземпляра EC2, который вы скопировали на предыдущем шаге:

 $ ssh -i "/Users/sarmad/Downloads/rails-ci-testing-deployment.pem" [email protected] The authenticity of host '54.210.115.143 (54.210.115.143)' can't be established. ECDSA key fingerprint is SHA256:pvhV+Nlz8erA0/crpI7QTNvYigQY2KYNoXDTcaifyBE. Are you sure you want to continue connecting (yes/no)? 

Введите «да» и нажмите Enter. Тебе следует увидеть:

 Warning: Permanently added '54.210.115.143' (ECDSA) to the list of known hosts. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '/Users/sarmad/Downloads/rails-ci-testing-deployment.pem' are too open. 

Как следует из сообщения, права доступа к вашему файлу .pem слишком открыты, поэтому нам нужно это исправить. Запустите эту команду:

 $ chmod 400 /Users/sarmad/Downloads/rails-ci-testing-deployment.pem 

Это решит проблему. Теперь снова запустите команду ssh :

 $ ssh -i "/Users/sarmad/Downloads/rails-ci-testing-deployment.pem" [email protected] 

Он должен войти в ваш экземпляр EC2. Сначала обновите существующие пакеты:

 ec2$ sudo apt-get update && sudo apt-get -y upgrade 

Добавьте нового пользователя, который будет использоваться Capistrano для развертывания. Назовите пользователя как хотите:

 ec2$ sudo useradd -d /home/sarmad -m sarmad 

Установите пароль для нового пользователя

 ec2$ sudo passwd sarmad Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully 

Теперь давайте предоставим нашему новому пользователю права sudo :

 ec2$ sudo visudo 

Вставьте эту строку в файл, который открывается:

 sarmad ALL=(ALL:ALL) ALL 

Нажмите CTRL + o , нажмите Enter и CTRL + x, чтобы сохранить и выйти.

Войти с новым пользователем с помощью этой команды

 ec2$ su - sarmad 

Введите пароль. Это войдет в систему как пользователь sarmad (или как вы его назвали):

Создайте ключ SSH с помощью ssh-keygen . Нажмите Enter в каждом запросе по умолчанию:

 ec2$ cat .ssh/id_rsa.pub 

Вам необходимо добавить открытый ключ EC2 в свою учетную запись Bitbucket, чтобы пользователь EC2 мог получить доступ к вашему репо. Перейдите по этой и этой ссылке для получения дополнительной информации о добавлении ключа SSH в учетную запись Bitbucket.

Скопируйте закрытый ключ EC2 для последующего использования

Теперь скопируйте закрытый ключ пользователя EC2 sarmad :

 ec2$ cat id_rsa -----BEGIN RSA PRIVATE KEY----- some_long_random_string ----------------------------- ----------------------------- ----------------------------- ----------------------------- -----END RSA PRIVATE KEY----- 

Скопируйте это куда-нибудь, так как это понадобится нам позже.

Скопируйте открытый ключ вашей машины разработки в EC2

Теперь нам нужно скопировать открытый ключ вашей локальной машины разработки в EC2. Это будет использоваться Capistrano для SSH в экземпляре EC2 как пользователь sarmad (пользователь, которого мы создали для развертываний). Запустите это на терминале EC2:

 ec2$ nano .ssh/authorized_keys 

Вставьте в этот файл открытый ключ локальной машины разработки. Нажмите CTRL + o , нажмите Enter, затем нажмите CTRL + x, чтобы сохранить и выйти. Capistrano на вашем локальном компьютере разработки теперь может SSH подключаться к серверу развертывания как этот пользователь.

Настройте среду EC2

Установите Ruby

Несмотря на то, что мы можем установить Ruby напрямую, он очень популярен и рекомендует использовать какой-то менеджер версий Ruby. Есть два популярных варианта. Рбенв и РВМ . Мы собираемся использовать RVM. Установите RVM с этими командами:

 ec2$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 ec2$ \curl -sSL https://get.rvm.io | bash -s stable 

Источник RVM согласно этому сообщению установки сообщения:

 * To start using RVM you need to run `source /home/sarmad/.rvm/scripts/rvm` in all your open shell windows, in rare cases you need to reopen all shell windows. 

Бегать

 ec2$ source /home/sarmad/.rvm/scripts/rvm 

Установите последнюю стабильную МРТ Ruby:

 ec2$ rvm install ruby 

В этом случае Ruby-2.3.0 установлен. Вы также можете установить Ruby 2.3.0 с помощью этой команды rvm install 2.3.0 .

Нам нужно установить пакетный гем

 ec2$ gem install bundler --no-ri --no-rdoc 

Создать каталог проекта

 ec2$ mkdir rails-ci-testing-and-deployment-to-ec2-capistrano 

Установить NGINX

Вы можете прочитать больше здесь о NGINX.

 ec2$ sudo apt-get install nginx 

Введите пароль для sarmad и нажмите Enter для подтверждения. Теперь настройте сайт по умолчанию. Откройте файл конфигурации сайта:

 ec2$ sudo nano /etc/nginx/sites-available/default 

Удалите существующий контент и вставьте следующее:

 upstream app { # Path to Puma SOCK file, as defined previously server unix:///home/sarmad/rails-ci-testing-and-deployment-to-ec2-capistrano/shared/tmp/sockets/puma.sock fail_timeout=0; } server { listen 80; server_name localhost; root /home/sarmad/rails-ci-testing-and-deployment-to-ec2-capistrano/current/public; try_files $uri/index.html $uri @app; location / { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Connection ''; proxy_pass http://app; } location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt { gzip_static on; expires max; add_header Cache-Control public; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 10; } 

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

Установить Git

 ec2$ sudo apt-get install git 

Примите значения по умолчанию.

Установить PostgreSQL

 ec2$ sudo apt-get install postgresql postgresql-contrib libpq-dev 

Снова, примите значения по умолчанию. Вы должны увидеть следующее:

 * Starting PostgreSQL 9.3 database server [ OK ] Setting up postgresql (9.3+154ubuntu1) ... Setting up postgresql-contrib-9.3 (9.3.13-0ubuntu0.14.04) ... Setting up postgresql-contrib (9.3+154ubuntu1) ... Processing triggers for libc-bin (2.19-0ubuntu6.9) ... 

Создать пользователя базы данных. Я sarmad мой sarmad , но вы можете назвать это как-то еще:

 ec2$ sudo -u postgres createuser -s sarmad 

Войдите в консоль PSQL с помощью этой команды:

 ec2$ sudo -u postgres psql 

Изменить пароль пользователя:

 postgres=# \password sarmad 

Введите пароль, который будет использоваться для подключения к серверу базы данных. Подтвердите пароль, и мы настроены.

Выход из приглашения postgres:

 postgres=# \q 

И нажмите Enter. Теперь давайте создадим производственную базу данных для нашего приложения:

 ec2$ sudo -u postgres createdb -O sarmad rails-ci-testing-and-deployment-to-ec2-capistrano_production 

Вернувшись в проект Rails, ваш * config / database.yml * должен выглядеть так:

 default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: 5 development: <<: *default database: rails-ci-testing-and-deployment-to-ec2-capistrano_development test: <<: *default database: rails-ci-testing-and-deployment-to-ec2-capistrano_test production: <<: *default database: rails-ci-testing-and-deployment-to-ec2-capistrano_production username: sarmad password: sarmad host: localhost port: 5432 

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

Вы можете хранить имя пользователя и пароль БД более конфиденциально. Но так как мы используем частный репозиторий, и цель этого учебника — просто быстро настроить CI с Rails, мы можем поместить эту информацию в этот файл сейчас.

Создать секрет для производства

Запустите эту команду в вашем локальном (не в EC2) каталоге проекта, чтобы сгенерировать секрет:

 $ rake secret 80a602e4c5c8c173dd3d00b1492c7f952030552bf747467578be8efdc545d2e8e491497081be4fd4e15627a2e811bf47e89950db6a5162da6932eb2edb204c3a 

Скопируйте секрет и поместите его в config / secrets.yml :

 production: secret_key_base: 80a602e4c5c8c173dd3d00b1492c7f952030552bf747467578be8efdc545d2e8e491497081be4fd4e15627a2e811bf47e89950db6a5162da6932eb2edb204c3a 

Это опять-таки конфиденциальная информация, которую вы, возможно, захотите хранить конфиденциально, но для простоты это будет работать пока.

Настроить Капистрано

Давайте настроим Capistrano в нашем проекте. Capistrano поддерживает Puma и RVM. Скопируйте эти драгоценные камни в свой Gemfile:

 gem "therubyracer", platforms: :ruby, group: :production gem "puma" group :developemnt do gem "capistrano3-puma" gem "capistrano" gem "capistrano-bundler", require: false gem "capistrano-rvm" gem "capistrano-rails", require: false end 

Запустите bundle install чтобы установить новые гемы.

Давайте настроим Capistrano, сгенерировав файлы конфигурации для вашей среды, настроив STAGES на работу. Это создаст файлы для развертывания производственной среды.

 $ cap install STAGES=production mkdir -p config/deploy create config/deploy.rb create config/deploy/production.rb mkdir -p lib/capistrano/tasks create Capfile Capified 

Эти файлы создаются в результате:

  • конфиг / deploy.rb
  • конфигурации / развернуть / production.rb
  • Capfile

Ваш Capfile должен выглядеть так (Скопируйте это, чтобы убедиться в правильности):

 # Load DSL and set up stages require "capistrano/setup" # Include default deployment tasks require "capistrano/deploy" # Include tasks from other gems included in your Gemfile # # For documentation on these, see for example: # # https://github.com/capistrano/rvm # https://github.com/capistrano/bundler # https://github.com/capistrano/rails # https://github.com/capistrano/passenger # require "capistrano/rvm" require "capistrano/bundler" require "capistrano/rails/assets" require "capistrano/rails/migrations" require "capistrano/puma" # Load custom tasks from `lib/capistrano/tasks` if you have any defined Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r } 

Ваш файл config / deploy.rb должен выглядеть следующим образом:

 # config valid only for current version of Capistrano lock '3.4.0' # Change the application name with your application name set :application, 'rails-ci-testing-and-deployment-to-ec2-capistrano' # Change the repository URL with your repository URL set :repo_url, '[email protected]:sarmadsabih/ci-test-and-deploy-to-ec2-capistrano.git' # Default branch is :master if you need to use some other branch then uncomment the line below # And change the branch name with the name of the branch you want to use # set :branch, :some_other_branch_you_may_want_to_use # Don't forget to change the username (ie sarmad in this case) with your username # And the project directory with the name of your project directory set :deploy_to, '/home/sarmad/rails-ci-testing-and-deployment-to-ec2-capistrano' set :scm, :git # Default value for :format is :pretty # set :format, :pretty # Default value for :log_level is :debug # set :log_level, :debug # Default value for :pty is false set :pty, true set :rvm_type, :user # Edit this if you are using a different Ruby version set :rvm_ruby_version, 'ruby-2.3.0' # Default value for linked_dirs is [] set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system') # Default value for default_env is {} # set :default_env, { path: "/opt/ruby/bin:$PATH" } # Default value for keep_releases is 5 set :keep_releases, 5 # Pume config set :puma_rackup, -> { File.join(current_path, 'config.ru') } set :puma_state, "#{shared_path}/tmp/pids/puma.state" set :puma_pid, "#{shared_path}/tmp/pids/puma.pid" set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock" #accept array for multi-bind set :puma_conf, "#{shared_path}/puma.rb" set :puma_access_log, "#{shared_path}/log/puma_error.log" set :puma_error_log, "#{shared_path}/log/puma_access.log" set :puma_role, :app set :puma_env, fetch(:rack_env, fetch(:rails_env, 'production')) set :puma_threads, [0, 8] set :puma_workers, 0 set :puma_worker_timeout, nil set :puma_init_active_record, true set :puma_preload_app, false 

Хорошо, мы почти закончили с сервером. Вернитесь на свой локальный компьютер, чтобы начать развертывание с Capistrano. Отредактируйте файл config / deploy / production.rb, чтобы установить IP-адрес сервера. Откройте файл и вставьте следующее в файл. Измените IP-адрес в соответствии с IP-адресом вашего сервера EC @:

 set :stage, :production # Replace this EC2 server's public IP with your EC2 server's public IP # Replace this user ('sarmad') with the one you created on your EC2 instance server '54.210.115.143', user: 'sarmad', roles: %w{web app db} 

Передайте и отправьте в наш репозиторий Bitbucket:

 $ git add -A $ git commit -m "ready for first deployment" $ git push origin master 

Теперь давайте начнем развертывание с использованием Capistrano:

 $ cap production deploy 

Первое развертывание занимает некоторое время. Плотно держаться. Этот процесс развернет приложение, перенесет БД и запустит ваш сервер приложений.

SSH в ваш экземпляр EC2 и перезапустите NGINX для перезагрузки наших настроек:

 ec2$ sudo service nginx restart 

Перейдите по адресу http: // [DNS-имя вашего экземпляра EC2 или публичный IP-адрес], чтобы увидеть, как работает приложение:

ec2-производство-домашняя страница

семафор

Зарегистрируйтесь, если вы еще не зарегистрированы в SemaphoreCI. Вы увидите это после регистрации. Нажмите «Добавить новый проект»:

Нажмите на свое имя пользователя на следующем экране:

Семафор-надстройка проектов выберите счет-

Выберите Bitbucket:

sgit

Вы увидите список репозиториев из вашей учетной записи Bitbucket. Выберите репо, которое вы хотите добавить в SemaphoreCI. В нашем случае мы выберем тот, который мы создали для этого урока:

семафоры выбор-проекты из-BitBucket

Выберите основную ветку в нашем случае:

Выберите филиал

Это страница настроек вашего проекта. Сопоставьте поля, выбранные на этом экране, с настройками вашего проекта. Ruby 2.3.0 и PG в качестве базы данных:

Семафор-проект-настройка

После настройки нажмите «Build». Вы можете увидеть процесс сборки на следующем экране:

Семафор-сборки незавершенного

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

Семафор-сборка обойдена

Теперь у нас есть тестовая настройка сервера со 100 бесплатными частными сборками в месяц. Теперь давайте настроим развертывание:

Семафор-проект-дом

Выберите «Capistrano»:

семафоры установка развертывание

Выберите «Автоматически». Он будет запускать автоматическое развертывание всякий раз, когда будет успешная сборка в основной (или любой выбранной вами ветви) ветке.

семафоров развертывание-сервер-автомат

Выберите ветку (мастер) для сборки:

Семафор развертывания Гиса

Команды развертывания должны выглядеть следующим образом. Обратите внимание на создание ключевого слова во 2-й команде развертывания:

семафор-развертывания-команд

Вставьте закрытый ключ пользователя экземпляра EC2 sarmad (или любого sarmad пользователя, которого вы создали) в следующую текстовую область. Это позволит нашему серверу развертывания SemaphoreCI получить доступ к нашему пользователю sarmad экземпляра EC2 через Capistrano:

Семафор-ec2-частный ключ для развертывания

Примите значения по умолчанию и нажмите «Создать сервер»:

семафоры-имя-сервер развертывания

Сервер развертывания создан и настроен. Нажмите кнопку Deploy , чтобы начать развертывание с нашими настройками:

Семафор-первых развертывания

Бинго! Развертывание прошло успешно.

Семафор-Капистрано-автоматическое развертывание

Теперь нам нужно убедиться, что если мы отправляем неудачную сборку (нажимаем коммит с неудачными тестами), она не развертывается. Запустите rake test, чтобы проверить, проходят ли тесты в текущей кодовой базе:

 $ rake test Run options: --seed 52969 # Running: ....... Finished in 0.509991s, 13.7257 runs/s, 25.4906 assertions/s. 7 runs, 13 assertions, 0 failures, 0 errors, 0 skips 

Сделайте тесты неудачными, внеся изменения в test / controllers / blogs_controller_test.rb . Измените строку assert_response в этом тесте:

 test "should get index" do get :index assert_response :success assert_not_nil assigns(:blogs) end 

Замените assert_response :success на assert_response :error чтобы сделать тест неудачным. Проверьте, запустив rake test :

 $ rake test Run options: --seed 47910 # Running: ..F.... Finished in 0.378145s, 18.5114 runs/s, 31.7339 assertions/s. 1) Failure: BlogsControllerTest#test_should_get_index [/Users/sarmad/projects/rails-ci-testing-and-deployment-to-ec2-capistrano/test/controllers/blogs_controller_test.rb:10]: Expected response to be a <error>, but was <200> 7 runs, 12 assertions, 1 failures, 0 errors, 0 skips 

Это терпит неудачу. Давайте внесем это изменение в наш репозиторий Bitbucket и будем следить за Semaphore CI:

 $ git add -A $ git commit -m "failing test" $ git push origin master 

Сборка че идет. Нам нужно, чтобы эта сборка провалилась.

семафор-билд в незавершенном-провал испытаний

Сборка завершилась неудачно, и SemaphoreCI не запустил развертывание:

семафоров наращивания не удалось испытания неудачи

Это страница деталей неудачной сборки. Мы можем увидеть, какие тесты не пройдены и ошибки, если таковые имеются.

Семафор-сборка-неудавшаяся деталь испытания неудачи

Теперь давайте исправим сломанный тест и отправим его в репозиторий Bitbucket. Верните неудачный тест, вернув assert_response :error обратно в assert_response :success .

Проверьте прохождение тестов, выполнив rake test :

 $ rake test Run options: --seed 25838 # Running: ....... Finished in 0.455917s, 15.3537 runs/s, 28.5140 assertions/s. 7 runs, 13 assertions, 0 failures, 0 errors, 0 skips 

Передайте и подтолкните к нашему репо:

 git add -A git commit -m "fix the broken test" git push origin master 

Мониторинг SemaphoreCI снова:

Семафор-сборка обойден-и-автоматическое развертывание

Сборка прошла успешно, и развертывание началось сразу после ее завершения.

Вывод

Теперь у вас есть приложение Rails, развернутое на высокомасштабируемом сервере Amazon EC2. Ваша настройка включает в себя сценарий автоматического развертывания, настроенный с помощью Capistrano, а также сервер тестирования и развертывания. Это очень мощный набор инструментов для разработки Rails, который может быть очень продуктивным для большинства проектов. Я собрал их все в одном месте, чтобы вы могли начать работу и заложить основу для дальнейшего развертывания приложения Rails. Я надеюсь, что вы найдете это полезным.