【Rails】Github와 CircleCI를 연계하여 commit시 rspec과 rubocop을 이동
14996 단어 RuboCopRSpecRailsCircleCI2.0
개요
전제
절차
CircleCI와 Github 협력
이쪽을 참고로. GitHub 계정을 이미 가지고 있다면 뽀뽀하는 것입니다.
rspec 및 rubocop 설치
rubocop 는 정적으로 코드를 해석해 주는 것과, 코드의 정형도 봐 줍니다. 또, 이번은 설명하지 않습니다만,
rubocop -a
라고 쓰면 rubocop의 설정에 따라 성형을 해 줍니다. rspec는 rails 테스트 환경입니다. rails용은 rspec-rails 입니다.
우선 설치합니다. Gemfile에 다음을 추가합니다.
group :development, :test do
gem 'rspec-rails'
gem 'rubocop'
end
bundle install합니다.
bundle install
그런 다음 rspec-rails 설정
rails generate rspec:install
rubocop에 필수 설정은 특별히 없습니다. 단,
.rubocop.yml
는 필수입니다. 만약, 헤매는다면, rails의 .rubocop.yml 을 copipe or 참고로 만드는 것이 좋습니다.덧붙여 자신은 다음과 같습니다.
rubocop.yml
AllCops:
Exclude:
- "tmp/**/*"
- "config/initializers/*"
- "vendor/**/*"
- "db/schema.rb"
- "node_modules/**/*"
- "db/migrate/*.rb"
- "bin/*"
DisplayCopNames: true
TargetRubyVersion: 2.6.0
Rails:
Enabled: true
Style/AndOr:
EnforcedStyle: conditionals
Style/AsciiComments:
Enabled: false
Style/Documentation:
Enabled: false
Style/NumericLiterals:
Enabled: false
Style/ClassAndModuleChildren:
Enabled: false
Bundler/OrderedGems:
Enabled: false
Lint/ShadowedException:
Enabled: false
CircleCI에서 rspec과 rubocop을 움직이기위한 설정
CircleCI와 Github를 연계 시점에서 github에 commit과 동시에 CircleCI의 job이 달리게 되어 있습니다. 다만 당연히 아무것도 하지 않기 때문에 실패합니다. (실패한 이메일이 github 계정의 이메일 주소에 도착했습니다)
rspec과 rubocop을 성공적으로 움직이려면
.circleci/config.yml
를 새로 추가/편집하십시오.CircleCI 공식 rails의 예는 여기에 있습니다.
그리고, 최종적으로 사용하고 있는 것은 이하와 같다.
config.yml
# Ruby CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
#
version: 2
jobs:
rubocop:
docker:
- image: circleci/ruby:2.6.0-node-browsers-legacy
environment:
RAILS_ENV: test
POSTGRES_HOST: 127.0.0.1
- image: circleci/postgres:9.4
environment:
POSTGRES_USER: postgres
POSTGRES_DB: app_test
working_directory: ~/repo
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: bundle install --jobs=4 --retry=3 --path vendor/bundle
- run: yarn install
- save_cache:
paths:
- ./vendor/bundle
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
# Rubocop
- run:
name: Rubocop
command: bundle exec rubocop
rspec:
docker:
- image: circleci/ruby:2.6.0-node-browsers-legacy
environment:
RAILS_ENV: test
POSTGRES_HOST: 127.0.0.1
- image: circleci/postgres:9.4
environment:
POSTGRES_USER: postgres
POSTGRES_DB: app_test
working_directory: ~/repo
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: bundle install --jobs=4 --retry=3 --path vendor/bundle
- run: yarn install
- save_cache:
paths:
- ./vendor/bundle
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
- run: bundle exec rake db:create
- run: bundle exec rake db:schema:load
# Rspec
- run:
name: Rspec
command: bundle exec rspec
workflows:
version: 2
rubocop_rspec:
jobs:
- rubocop
- rspec:
requires:
- rubocop
먼저 이미지를 CircleCI docker hub
이번에는 2.6.0을 사용했습니다.
이미지 환경 변수는 environment key로 지정했습니다. .
Service container image available at host: localhost 이므로 host 는
127.0.0.1
로 지정합니다. ( localhost
하지만 괜찮을지 모르지만 시도하지 않았습니다.)RAILS_ENV: test
는 test 환경에서 일어나기 때문입니다. - image: circleci/ruby:2.6.0-node-browsers-legacy
environment:
RAILS_ENV: test
POSTGRES_HOST: 127.0.0.1
postgresql의 이미지를 지정합니다. 다른 버전을 사용하는 경우 여기에서 적절하게 선택하십시오.
POSTGRES_USER
와 POSTGRES_DB
는 자신의 config/database.yml
의 기재에 맞추어 주세요. - image: circleci/postgres:9.4
environment:
POSTGRES_USER: postgres
POSTGRES_DB: app_test
rubocop 실행 후 rspec을 실행합니다. circle ci 시간을 절약하기 위해
requires
에서 rubocop을 지정하고 rubocop이 실패하면 rspec을 수행하지 않습니다.workflows:
version: 2
rubocop_rspec:
jobs:
- rubocop
- rspec:
requires:
- rubocop
database 설정은 다음과 같습니다.
app_xxxx
는 각자의 환경에 맞추어 주세요.config/database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: postgres
password:
host: <%= ENV['POSTGRES_HOST'] %>
development:
<<: *default
database: app_development
test:
<<: *default
database: app_test
개발 환경에서의
POSTGRES_HOST
는 환경 변수로 지정해 줍니다. 환경 변수는 dotenv 을 사용해, 개발 환경 구축에는 docker를 사용하고 있어, db
라는 이름으로 postgresql가 기동하고 있으므로 아래와 같이 하고 있습니다.POSTGRES_HOST=db
그리고, 이것을 commit 해 주면, CircleCI가 움직이는 것을 확인해 주세요.
Checks
에 테스트 세부 정보가 표시됩니다. 이상,
Reference
이 문제에 관하여(【Rails】Github와 CircleCI를 연계하여 commit시 rspec과 rubocop을 이동), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/junara/items/a40bb231c405be7983f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)