Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Java 프로젝트에 Travis CI 적용하기

연속에서 Travis CI 이야기를 계속 하게되네요. 만지기 시작한 김에 이것저것 해보느라고요. ㅎ 이전 포스팅에서도 얘기했듯이 이전에는 스크립스성 언어만 지원했지만 3월부터 Java를 포함한 Scala와 Groovy에 대한 지원이 추가되었습니다.

마침 봄싹에서 친분이 있는 개발자 몇명이 egov-data라는 프로젝트를 시작했습니다. egov-data는 Spring Data전자정부프레임워크에 적용하는 프로젝트입니다. 저는 iBatis와 Hibernate를 둘 다 안해봤기 때문에 당장 도울것도 없어서 소스는 공부용으로 종종 보기나 해야겠다 생각하다가 이번에 Travis CI를 egov-data에 적용하기로 했습니다. 봄싹은 서버가 있어서 허드슨이나 젠킨스로 CI를 돌릴 수 있긴 하지만 회사도 아닌데 CI서버를 설치하고 관리하는 건 꽤나 쉽지 않아서 Travis CI를 커밋빌드용으로 사용하기로 했습니다.




Github의 Service Hooks 설정
Travis CI를 사용하려면 Sevice Hooks를 켜주어야 하는데 egov-data같은 경우는 제 Github 계정에 포함된 저장소가 아니라 SpringSprout라는 봄싹의 Organization용 계정에 포함된 저장소입니다.(Organization은 Github에서 지원하는 사용자들의 그룹을 묶어주는 기능입니다.) 아직 Travis CI에서는 Organization 저장소의 자동연결을 지원하지 않기 때문에 Organization 소유자라고 하더라도 Travis CI에서는 자신의 저장소로 나타나지 않습니다.

egov-data의 Service Hooks 설정

그래서 위 화면처럼 Admin의 Service Hooks에 가서 Travis에 대한 Hooks를 직접 Active로 설정하고 정보를 입력해서 켜주어야 합니다. 특정사용자의 정보를 입력하면 되고 Travis CI의 토큰은 Travis CI의 Profile 페이지에서 찾을 수 있습니다.




.travis.yml 설정
자바프로젝트에 Travis CI를 적용하는 부분은 Building a Java project에 잘 나와 있습니다. 이 문서에도 나와있듯이 OpenJDK 6을 사용하고 기본으로 Maven 3와 Gradle, Ant 1.7을 지원하고 있습니다. 그래서 Gradle 설정파일인 build.gradle없고 프로젝트 루트경로에 pom.xml이 존재한다면 mvn test로 테스트를 수행합니다. 그래서 일반적인 Maven 프로젝트라면 다음과 같은 간단한 .travis.yml만 추가하면 Travis CI를 연결할 수 있습니다.

# .travis.yml
language: java

하지만 egov-data는 실제로는 egov-data-ibatis와 egov-data-hibernate라는 2개의 프로젝트가 하나의 저장소로 있는 구조입니다.(스프링 데이터도 이런식으로 종류별로 나누어져 있는데 어찌보면 별도의 프로젝트가 같은 저장소에 있다고 할 수 있습니다.) 그래서 저장소 루트에는 pom.xml이 없고 각 프로젝트 폴더안에만 각각 pom.xml이 존재합니다. 각 프로젝트 디렉토리로 이동해서 mvn test를 실행해야 하는데 .travis.yml에서는 이런 복잡한 명령어를 사용하기가 별로인것 같아서 다음과 같은 Makefile을 만들었습니다.

test:
  cd egov-data-ibatis; \
  mvn test
  cd egov-data-hibernate; \
  mvn test

.PHONY: test

처음에는 쉘스크립트를 따로 짰다가 Makefile로 관리하는게 더 일반적이라고 생각해서 위와 같이 작성했습니다.

# .travis.yml
language: java
script: "make test"
branches:
  only:
    - master

그리고 .travis.yml에서 테스트 스크립트가 Makefile을 사용하도록 make test로 변경하고 master 브랜치에 대해서만 테스트하도록 지정했습니다.




travis-lint로 .travis.yml 유효성 검사하기
이전 글들에서는 따로 언급하지 않았었지만 .travis.yml 파일의 유효성을 체크할 수 있는 웹서비스를 제공하고 있습니다. 웹서비스를 이용하는 것이 번거롭다면 다음과 같이 gem을 이용해서 로컬에 travis-lint를 설치해서 사용할 수 있습니다.

$ gem install travis-lint

travis-lint를 설치하면 터미털에서 다음과 같이 .travis.yml의 유효성을 검사할 수 있습니다. 경로없이 명령어만 입력하면 루트 경로의  .travis.yml을 검사하고 그렇지 않다면 경로를 지정해 주어야 합니다.
터미널에서 travis-lint 사용하는 화면

그 밖에 Travis CI에 대한 내용은 이전에 올린 node.js 프로젝트에 Travis CI 적용하기에서 설명했으므로 따로 언급하지 않습니다.
2012/05/06 00:52 2012/05/06 00:52