【circleCI】Rails 앱으로 github와 연동하여 rubocop과 rspec 테스트를 실행
소개
학교 졸업 후 묵묵히 앱을 만들고 있습니다만, 개발 환경에 Docker를 도입했다고 하는 것으로 그대로 CircleCI도 도입해 버렸습니다.
덧붙여서 circleCI를 도입하려면 적지 않고 Docker의 지식이 필요합니다.
만약 Docker는 뭐야? 라고 사람은 먼저 Docker를 개발 환경에 구축해 보는 편이 부드럽다고 생각합니다.
Rails에 Docker를 도입하는 방법은 아래에 쓰고 있으므로, 좋다면 봐!
작성한 Rails 애플리케이션으로 Docker 환경 구축
circleCI란?
지속적인 통합 (배달) 서비스입니다. 커밋에서 배포까지 파이프라인을 만들고 지속적인 통합/배달을 사용하여 소프트웨어 개발 프로세스를 자동화할 수 있습니다.
조금 어려운 용어입니다.
간단하게 말하면, github의 push에 맞추어, 테스트 코드를 달리게 해 줍니다.
이 자동 배치까지 해주는 환경을 CI/CD 환경이라고 합니다.
이번에는 자동 배포는 할애하므로 CI까지 됩니다.
전제 조건
circleCI와 github를 연동
이 근처에 대해서는 아래 기사를 참고하십시오.
간단하다고 생각합니다. 다만 언어는 Ruby를 선택해 주세요!
이 언어를 선택했을 때, 나중의 설정 파일의 두드려대가 되는 기술이 있으므로, 복사해 메모 계속 좋을지도 모릅니다.
파일을 만드는 위치
여기에서 circleCI의 설정 파일을 써 가게 됩니다.
먼저 응용 프로그램의 루트 디렉터리에 .circleci/config.yml이라는 디렉터리와 파일을 만듭니다.
이런 느낌.
.circleci/config.yml 작성
갑자기 결론이 되지만, 나는 이런 느낌이 되었습니다.
이 설명은 github에서 push 할 때마다 circleCI를 시작하고 rubocop과 rspec을 실행합니다.
간략한 설명은 코멘트 아웃에 적어 둡니다.
circleci/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
# ruby2.5.1を使ったアプリのため
- image: circleci/ruby:2.5.1-node-browsers
environment:
# ①注意!! bundlerのバージョンが2.0.1以上だと、bundle installに失敗します。ここに環境として指定します。
- BUNDLER_VERSION: 2.0.2
# ②注意!! circleCIは仮想環境を構築するので、そのときに使うデータベースを指定する必要があります。
- RAILS_ENV: 'test'
# Mysqlのバージョン5.6で動かしていたため、5.6を指定
- image: circleci/mysql:5.6
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
- MYSQL_ROOT_HOST: '%'
# 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: ~/repo
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: |
# ①bundler2.0.1以降のものを使っているのであれば、環境変数と合わせて指定する必要があります。
gem install bundler -v 2.0.2
bundle install --jobs=4 --retry=3 --path vendor/bundle
- save_cache:
paths:
- ./vendor/bundle
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
# ②ちょっと無理やりですが、database.ymlとdatabase.yml.ciを入れ替える記述です。
- run: mv config/database.yml.ci config/database.yml
# Database setup
- run: bundle exec rake db:create
- run: bundle exec rake db:schema:load
# rubocopを走らせる記述です。
- run:
name: Rubocop
command: bundle exec rubocop
# rspecを走らせる記述です。
# run tests!
- run:
name: run tests
command: |
mkdir /tmp/test-results
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
circleci tests split --split-by=timings)"
# ③ここでRspecJunitFormatterというgemをインストールしていないとエラーになります。gemfileに記述しましょう。
bundle exec rspec \
--format progress \
--format RspecJunitFormatter \
--out /tmp/test-results/rspec.xml \
--format progress \
$TEST_FILES
# collect reports
- store_test_results:
path: /tmp/test-results
- store_artifacts:
path: /tmp/test-results
destination: test-results
주의점이 꽤 많지만 하나씩 해설합니다.
① bundler2.0.1 이후의 것을 사용하고 있으면 bundle install 에 실패합니다. (Docker와 같습니다.)
환경으로 지정하고 bundle install을하기 전에 bundler의 버전을 지정한 후에 bundler를 설치하지 않으면 안됩니다.
② circleCI는 가상환경을 구축하는데, 그때 사용할 데이터베이스를 지정할 필요가 있어 에러가 나왔습니다. 제 경우에는 여기서 test를 지정하고 database.yml.ci라는 것을 준비했습니다.
데이터베이스를 설정하기 전에 기존 database.yml을 사용하는 대신 database.yml.ci로 교체해야 합니다.
database.yml.ci의 내용은 나중에 설명합니다.
③ circleCI의 버전이 바뀌었을 때, RspecJunitFormatter라는 gem이 필요하게 되었다고 합니다.
여기서도 에러가 나왔으므로, gemfile에 기술해 봅시다. 소스는 여기
config/database.yml.ci 작성
나는 이런 식으로 기술했습니다.
config/database.yml.ci
test:
adapter: mysql2
encoding: utf8
pool: 5
username: 'root'
port: 3306
host: '127.0.0.1'
database: ci_test
이런 곳일까요?
대체로 내가 막힌 에러에 대해서는 쓰고 있다고 생각합니다.
그건 그렇고, github에 circleCI 결과를 표시 할 수도 있습니다.
참고 기사는 이쪽
매우 간단하기 때문에 시도해보십시오.
속편
circleCI를 사용한 CD 환경 구축까지 해 버렸습니다
rails5.2/Capistrano/circleCI 환경을 통한 AWS에 자동 배포
Reference
이 문제에 관하여(【circleCI】Rails 앱으로 github와 연동하여 rubocop과 rspec 테스트를 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/prkrsign890/items/b2161784065f21cd1645텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)