Jello's development blog

Jello's development blog

Travis CI의 연동과 사용

들어가며

프로젝트를 진행하면서 간간이 CI라는 단어를 듣게 되었다. 나는 주변 개발자들에게 CI가 무엇을 의미하는지 물었고, Continuous Integration의 약자라는 것을 알게 되었다. 이것이 프로젝트를 ‘지속적으로 통합’ 해주는 개념이라는 것은 알고 있었지만, 사용해 본 적이 없기에 정확히 어떤 개념인지 이해할 수 없었다.

마침 이번에 멘토님과 진행하는 프로젝트에 Travis CI를 사용하게 되어, 멘토님의 도움을 받아 찾아보고 사용한 뒤 알게 된 정보들을 정리해보려고 한다.

Travis CI란?

Travis CIGithub에서 진행되는 오픈소스 프로젝트를 위한 지속적인 통합(Continuous Integration) 서비스이다. 2011년에 설립되어 2012년에 급성장하였으며 Ruby언어만 지원하였지만 현재 대부분의 개발 언어를 지원하고 있다. Travis CI를 이용하면 Github repository에 있는 프로젝트를 특정 이벤트에 따라 자동으로 테스트, 빌드하거나 배포할 수 있다. Private repository는 유료로 일정 금액을 지불하고 사용할 수 있다.

Travis CI와 Github 연동

먼저, Travis CI 홈페이지로 들어가 회원가입을 한다. 계정은 Github과 연동되어, Github계정이 있다면 바로 회원가입이 가능하다.

회원가입을 한 후에, profile 페이지로 들어가서 travis를 연동할 Github repository를 체크한다.

repo가 체크된 모습

이렇게 하면 Travis와 travis-test repository가 연동이 되었다!

Travis는 .travis.yml 파일을 통해서 이벤트 발생시 Travis가 어떤 동작을 할 것인지 결정한다. 언어별로 자세한 작성법은 Travis CI Docs에 나와있다.
여기서는 python3로 Hello World 출력을 테스트하는 코드를 예시로 들겠다.

requirements.txt

py==1.4.31
pytest==3.0.2

.travis.yml

language: python
python:
  - "3.5"

# command to install dependencies
install: "pip install -r requirements.txt"

# command to run tests
script: pytest test.py

test.py

def get_helloworld():
	return 'hello world'

def test_get_helloworld():
	assert 'hello world' == get_helloworld()

def main():
	print(get_helloworld())

if __name__ == '__main__':
	main()

먼저 pip로 requirements.txt 파일에 있는 virtualenv의 dependency들을 설치하도록 명시해두었다. 그 다음에는 python 테스트 툴인 pytest 로 테스트 코드를 검증하도록 하였다.

이렇게 repository에 push하게 되면, travis가 알아서 .travis.yml 파일에 명시된 대로 실행해준다. Travis 메인 페이지에 들어가면 terminal log를 보여준다.

테스트 통과 log

push를 한 뒤에, Travis가 dependency들을 설치하고, 테스트 명령을 실행한 log가 보인다. 테스트는 무사히 통과했다!

프로젝트의 파일 구조는 포스팅에 쓰인 가이드 repository 주소를 참고하기 바란다.

참고 문서