태그 보관물: Linux

Travis CI 설정과 docker image 사용

GitHub project에 CI를 붙이고 싶은데 Jenkins server가 회사 firewall 안에 들어 있어서 GitHub에서 직접 webhook을 붙일 수 없는 문제가 있다. Jenkins의 GitHub plugin으로 tunneling을 설정하는 방법 등 있기는 하지만 다른 CI 옵션들을 살펴 보던중 Open source project에 대해서는 무료라는 Travis CI가 있다는 것을 알게 되었다. Travis CI는 기본으로 Ubuntu를 지원하고 그 외의 경우는 docker를 사용해서 환경을 설정할 수도 있다. 이 포스팅은 Travis CI에서 ClearLinux docker를 사용한 설정에 대한 기록이다.

 

삽질1: Travis CI의 Ubuntu이용

빌드와 Google test를 이용한 unittest만 할 것이니까 OS를 크게 타지 않을테니 기본으로 제공되는 Ubuntu 환경에 필요한 도구들만 설치 하면 가장 빠르지 않을까?

일견 타당해 보이기는 하지만 문제는 의존성이다. Pre-compile된 Google test를 download 받는다 해도, 2019년 1월 현재 아직 Travis CI에서 제공하는 Ubuntu의 가장 최신 버전은 Xenial이다. CMake version이 안맞아서 최신버전으로 설치하고 Intel LibVA, Intel MediaSDK등의 의존 package들을 컴파일한 후 빌드를 하고 unittest를 하도록 하는데 14분이 넘게 걸렸다. 다음은 사용한 .travis.yml file이다.

 

삽질2: Clear Linux docker image 사용

시간만 오래 안 걸렸어도 기본 Ubuntu OS로 어떻게든 해보는 건데, 14분이면 시간이 너무 오래 걸린다. 이왕 시간이 오래 걸리는 거라면 Clear Linux docker docker image를 사용해보자.

Clear Linux docker image를 생성하기 위한 dockerfile을 다음과 같이 작성해준 다음

.travis.yml file을 다음과 같이 선언해 준다.

총 소요된 시간은 17분 41초 그 중에 docker 설정하는데 걸린 시간만 16분이 넘는다. 나머지 시간은 unittest… 즉 대부분의 시간이 docker를 빌드 하고 설정하는데 사용 되고 있었다.

 

삽질3: Docker image download

빌드하는데 시간이 오래 걸린다면 이미 만들어 둔 docker image를 저장소에 넣어두고 pull해서 사용하면 좀 빠르지 않을까? Docker 빌드 vs Docker 다운로드.

이미 빌드 한 docker image를 공개 저장소인 docker hub에 넣어두고 Travis CI에서 pull하도록 변경하면 시간은 8분정도로 줄어든다.

흠.. 8분이면 그나마 그럭저럭 쓸만 하군.

 

결론

Travis CI는 머리는 나쁘고 손발은 빠르다. Docker를 이용해서 테스트 하려면 매번 새롭게 빌드하기 보다 Docker Hub에 올려두고 pull 하는 방법을 고려해 볼만 하다.

[Tip] Fedora CUI booting 설정

Fedora (Version26, Workstation edition)은 /etc/inittab file로 runlevel을 변경하던 이전의 방식은 지원되지 않는다. /etc/systemd/system/default.target file을 보면 /lib/systemd/systm/graphical.target으로 link되어 있는데 이것을 multi-user.target으로 변경해 주면 CUI console로 진입할 수 있다.

설정 후 시스템을 리붓하면 CUI로 booting되고 startx 명령으로 GUI를 불러 올 수 있다. Display Manager를 띄우지 않기 때문에 GUI에서 logout하면 CUI로 되돌아온다.

 

Virtual Box에 ext4 partition을 직접 mount

Windows용 Virtual Box에서 vdi file이 아닌 HDD의 특정한 영역을 ext4로 직접 mount하는 방법에 대한 설명이다. 오래전에 해본거라 실제로 속도 향상이 있었는지는 기억이 나지 않는다.. 데헷

HDD를 format하지 않으면 windows의 탐색기에서는 표시되지 않지만 Disk Manager에서는 연결된 모든 HDD가 보인다. Virtual Box를 설치한 directory에 보면 vboxmanage.exe라는 실행 파일이 있는데 이것을 이용하면, vdmk file을 생성하고 물리적인 HDD를 virtual box에 mapping할 수 있다.

vboxmanage.exe은 VirtualBox 4.2.10 현재 admin 권한이 있는 CLI로만 동작하기 때문에, Admin 권한으로 명령창을 열고 Virtual Box의 설치 경로로 가서 vboxmanage.exe를 실행시킨다.

-rawdisk의 parameter인 ‘PhysicalDrive’뒤의 숫자는 windows Disk Manager에 나오는 Disk 0, Disk 1 …에 나오는 숫자와 일치한다.

이제 Virtual Box에서 설정을 열고 storage에 지금 생성한 vmdk file을 추가한다.

Booting을 하고 linux에서 fdisk -l 명령어로 확인해 보면 새로운 HDD가 인식된 것이 보인다. fdisk로 새로운 partition을 만들고 ext4 fs를 만든다음 fstab을 수정해서 linux에서 새로운 partition이 인식되도록 해주면 된다.