CI (Continuous Integration)은 코드 품질 유지를 위해 팀의 작업내역을 지속적으로 자주 통합하는 프로세스를 말한다. 통합이 늦어지면 그에 따른 비용도 증가하기 때문에, 빠른 통합을 통해서 시스템의 문제를 빠르게 발견하고 해결할 수 있게 된다.
CI를 위해서 중요한 것은 자동화된 빌드와 자동화된 테스트인데 이를 위해 진행 중인 프로젝트에 travis-ci를 통한 테스트 자동화를 구현했다.
travis-ci.org 홈페이지에 Ruby 관련한 가이드는 있으나 Rails 가이드는 없는 것 같아 지금 프로젝트에 적용한 방법을 정리해둔다.
travis-ci를 위해 설정 파일(.travis.yml)을 만들어둔다. travis-ci에서는 이 설정 파일이 있는지 여부로 테스트를 실행할지를 결정하기 때문에 반드시 만들어줘야 한다.
# .travis.yml
language: ruby
rvm:
- 2.2.0
before_script:
- cp config/database.yml.travis config/database.yml
- psql -c 'create database travis_ci_test;' -U postgres
.ruby-version 파일에 사용 중인 루비 버전을 명시해준다.
# .ruby-version
2.2.0
travis-ci에서 테스트를 실행할 때 테스트용 데이터베이스를 만들기 때문에 database.yml의 내용이 필요하다. database.yml 파일은 형상관리를 통해 관리하지 않기 때문이기도 하고 실제 서버의 설정 내용과 다르기 때문에 travis-ci용 데이터베이스 설정파일이 필요하다. config/database.yml.travis 라는 파일에 travis를 위한 데이터베이스를 정보를 명시한다.
# config/database.yml.travis
test:
adapter: postgresql
database: travis_ci_test
username: postgres
이 파일은 위의 .travis.yml 파일의 before_script 부분 (아래에 다시 첨부)에 의해서 테스트 전에 database.yml로 복사되어 데이터베이스를 생성하는 데에 쓰인다.
# .travis.yml
...
before_script:
- cp config/database.yml.travis config/database.yml
- psql -c 'create database travis_ci_test;' -U postgres
위의 3파일을 전부 만들었다면 리모트 저장소에 푸쉬하고 https://travis-ci.com 에서 해당 프로젝트를 설정해주면 된다.