처음 CircleCI. Rails 프로젝트를 사용해보십시오.

CI 툴을 넣어 생산성 버크 올리고 싶다. 이번에는 자주 듣는 CI 툴인 CircleCI를 사용해 보았다.

이 기사의 목표



RSpec으로 작성된 Ruby on Rails 앱을 CircleCI에서 테스트

운영 환경


ruby 2.5.1
rails 5.2.2
CircleCI 2

애플리케이션 설정



첫째, Rails 앱 설정. 무심코 셋업해 간다.
$ rails new circle-ci-test -d mysql
$ cd circle-ci-test
$ rails db:create
$ rails g rspec:install
$ rails g scaffold product title:string content:text
$ rails db:migrate
$ rails s

이상으로 product 자원을 CRUD 처리하는 기능이 완성되었다. 아래와 같은 칸지.



테스트를 CI로 시험해보고 싶기 때문에, RSpec를 써 간다.

spec 쓰기



컨트롤러 spec이 자동으로 생성되고 있지만 모델 쪽이 테스트를 작성하기 쉽고 간단하기 때문에 컨트롤러 spec은 삭제. product 모델에 밸리데이션을 실장해, 그 테스트를 써 간다.

product.rb

class Product < ApplicationRecord
  validates :title, :content, presence: true
  validates :title, length: { in: 5..20 }
end

product_spec.rb
require 'rails_helper'

RSpec.describe Product, type: :model do
  it 'title, contentが存在するので、バリデーションが通る' do
    product = Product.new(title: 'こんにちは!', content: '元気ですか!')
    expect(product).to be_valid
  end
  it 'titleが存在しないので、バリデーションが弾かれる' do
    product = Product.new(content: '元気ですか!')
    expect(product).not_to be_valid
  end
  it 'contentが存在しないので、バリデーションが弾かれる' do
    product = Product.new(title: 'こんにちは!')
    expect(product).not_to be_valid
  end
  it 'titleが5文字未満なので、バリデーションが弾かれる' do
    product = Product.new(title: 'パクチー')
    expect(product).not_to be_valid
  end
end

테스트 실행
$ bundle exec rspec
...

Finished in 0.01224 seconds (files took 0.81481 seconds to load)
4 examples, 0 failures

OK, 테스트 앱은 가능했습니다. 이상을 커밋하고 Github 리포지토리를 만들어 push한다.

CircleCI 설정



CircleCI에 가입하여 GirHub 연계를 하면 대시보드가 ​​표시되고 다음 카드가 표시된다.

이 화상대로 설정을 해본다.

circle-ci-test 저장소 발견. Set Up Project 버튼을 누릅니다.


버튼을 누르면 이런 화면에.


아래쪽에 친절하게 설정 방법이 쓰여 있다. 이것에 따르면 기본적인 설치를 할 수 있는 친절한 디자인. 최고


이 순서로 설정한다.
$ mkdir .circleci && cd .circleci && touch config.yml && cd ..

config.yml을 다음 설정으로 설정합니다.
조금 시행 착오했다.
# Ruby CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
#
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/ruby:2.5.1-node-browsers
        environment:
          RAILS_ENV: test
          MYSQL_HOST: 127.0.0.1
          MYSQL_USERNAME: 'root'
          MYSQL_PASSWORD: ''
          MYSQL_PORT: 3306
      - image: circleci/mysql:5.7.18
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: true
          MYSQL_ROOT_PASSWORD: ''
          MYSQL_DATABASE: circle_ci_test-test

      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      # - image: circleci/postgres:9.4

    working_directory: ~/circle-ci-test

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-

      - run:
          name: install dependencies
          command: |
            bundle install --jobs=4 --retry=3 --path vendor/bundle

      - save_cache:
          paths:
            - ./vendor/bundle
          key: v1-dependencies-{{ checksum "Gemfile.lock" }}

      # Database setup
      - run:
          name: waiting for stating database
          command: dockerize -wait tcp://127.0.0.1:3306 -timeout 1m
      - run: bundle exec rake db:create
      - run: bundle exec rake db:schema:load

      # run tests!
      - run:
          name: Run rspec in parallel
          command: |
            bundle exec rspec --profile 10 \
                              --format RspecJunitFormatter \
                              --out test_results/rspec.xml \
                              --format progress \
                              $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)

      # collect reports
      - store_test_results:
          path: /tmp/test-results
      - store_artifacts:
          path: /tmp/test-results
          destination: test-results

또한 Gemfile에 다음을 추가합니다.
gem 'rspec_junit_formatter'

bundle install하고 push하면 자동으로 Github에서 빌드 및 테스트 실행됩니다!


잡감



매우 간단! 팀 개발하는 경우는 점점 넣어 가고 싶은 곳!

또한 위의 프로젝트를 Github의 공공 리포지토리에 등록했다면 CircleCI에서 피드백 설문지 부탁 이메일이 왔습니다. 사용자와 함께 좋은 제품을 만들고 있어 최고입니다.

좋은 웹페이지 즐겨찾기