젠킨스 CI에서 레일즈+Postgres 테스트하기
젠킨스는 오픈소스 지속적 통합관리(Continuous Integration) 도구로 자바기반이다.
소스를 git이나 svn 같은 형상관리(CM : configuration management) 서버에 올리면, 그때마다 자동으로 테스트도 하고, 빌드도하고, 작업이 잘 끝났다고 알림도 주는 도구다.
자바기반이기 때문에 다른 언어로 개발된 애플리케이션을 젠킨스에서 테스트 하려면 따로 환경 설정이 필요하다. 이번엔 루비 온 레일즈로 만들어진 애플리케이션 테스트를위해 환경을 설정해 보았다.
레일즈 테스트용 젠킨스 도커 설정은 https://github.com/dorajistyle/jenkins-rails-postgres-docker 에서 볼 수 있다.
우선 아래 명령어로 소스를 다운 받는다.
git clone https://github.com/dorajistyle/jenkins-rails-postgres-docker.git
그리고 아래 명렁어로 도커 컨테이너를 빌드하면 젠킨스가 실행된다. docker-compose.yml에 나와있듯이 docker compose를 이용해서 postgres와 redis를 jenkins와 함께 실행하도록 하였다.
docker-compose up
젠킨스에서 레일즈를 테스트하기 위한 순서는 다음과 같다.
- 터미널에서 admin암호를 복사해서 젠킨스에 붙여 넣는다.
- 유저 정보를 입력해서 젠킨스를 시작한다.
- Multi-configuration 프로젝트를 만든다.
- Source Code Management 에서 git를 선택한다.
- 아래 url을 Repository URL 필드에 붙여넣는다.
https://github.com/dorajistyle/rails-postgres-sample-for-jenkins
만약 오픈소스가 아닌 프로젝트를 테스트 하려면, Credential을 추가해 줘야 한다.
Add를 눌러 Username and password방식을 선택하고, username에는 github ID를 넣고 password에는 https://github.com/settings/tokens에서 생성한 토큰을 넣으면 된다. - Build Environment에서 rbenv build wrapper체크박스를 선택한다.
The Ruby version에는 2.3.1을 넣고,
Preinstall gem list에는 bundler,rake,execjs를 넣는다. - Add build step 샐랙트박스에서 Execute shell를 선택한다.
Command필드에 아래 명령어를 붙여 넣는다.
bash jenkins-test.sh
- 만약 빌드가 될 때 마다 슬랙으로 알림을 주고 싶다면, 플러그인을 설정해줘야 한다.
우선 github 프로젝트의 설정에 젠킨스 플러그인을 추가해준다.
Settings--> Webhooks&Services-->Service--> Add Services--> Choose "Jenkins (GitHub plugin)"
에서 추가하고 아래 주소를 넣어준다.
http://
/github-webhook/
https://.slack.com/apps/A0F7VRFKN-jenkins-ci 에서 Jenkins CI 앱 설정을 해준다.
Post-build Actions의 Add post-build action 선택상자에서 Slack Notifications를 선택하고 환경 정보를 넣어준다.
토큰은 슬랙 앱 설정에 나온 토큰을 넣어주면 된다. - 설정을 저장하고 프로젝트의 사이드메뉴에서 Build Now를 클릭하여 테스트한다.
Docker compose로 띄운 젠킨스에서 레일즈 테스트가 잘 돈다.
* rails 설정의 database.yml에는 docker-compose로 설정한 컨테이너 이름(예제 : dorajistyle-postgres)을 쓰고,
config.yml의 redis설정에도 마찬가지로 컨테이너 이름(예제 : dorajistyle-redis)를 써야 한다.
* git fetch 타임아웃 발생시 해결
Source Code Management > Git > Additional Behaviors > Advanced checkout behaviors / Advanced clone behaviors > Timeout (in minutes)
by 月風