Travis에서 테스트를 사전에 로컬로 시도

개요




GitHub 등에서 호스팅하는 프로젝트의 테스트에 Travis CI 등의 클라우드 CI 서비스를 이용하는 경우는 많을 것이다.

기본적으로 로컬 개발 환경에서 테스트를 통과했는지 확인한 후 커밋하고 푸시해야하므로 Travis에서도 테스트를 통과해야합니다. 그러나 Travis 구성 파일 .travis.yml의 실수와 종속 라이브러리의 추가를 잊어 버리는 등의 실수로 테스트가 실패합니다. 특히 종속 라이브러리의 경우 개발 환경에서 가끔 설치되면 로컬 테스트가 통과되기 때문에 간과 할 수 있습니다.

테스트가 실패하면 로컬 환경에서 수정 후 다시 푸시되어 원격 브랜치의 커밋 이력이 더러워지므로 실수는 가능한 한 피해야 한다(특히, 다른 사람의 리포지토리로 하면 어색하다). 따라서 Python 또는 Go 언어 프로젝트를 위해 도커을 사용하여 로컬 환경을 마련하고 .travis.yml에 설명 된대로 테스트를 실행하는 도구 Loci를 만들었습니다.

데모





설치



먼저 도커이 필요하기 때문에 미리 설치해 둔다(Docker의 도입 방법에 대해서는 생략한다).

Loci 설치는 5이 설치된 환경이면,
$ go get github.com/jkawamoto/loci

Homebrew가 설치된 환경이면,
$ brew tap jkawamoto/loci
$ brew install loci

에서 할 수 있다. 그렇지 않으면 GitHub에 컴파일된 바이너리이 있으므로 다운로드하여 경로를 통과 한 곳에 두면 됩니다.

사용법



현재 디렉토리에 .travis.yml가 있으면 loci 명령을 실행하면됩니다. 다른 파일을 테스트하려면 loci <filepath>와 파일 경로를 전달하십시오.

Loci는 현재 디렉토리 아래에 포함 된 파일을 가지며 .travis.yml에 설명 된 패키지가 설치된 컨테이너 이미지를 만듭니다. 원본 이미지는 ubuntu:latest입니다. 처음 실행할 때는 패키지 설치 등 어느 정도의 시간이 필요하지만, 2번째 이후에는 의존 패키지에 변경이 없으면 과거의 컨테이너 이미지를 적절히 재이용한다(Docker의 기능).

APT 캐시 서버 또는 PyPI 캐시 서버를 준비하는 경우 --apt-proxy 또는 --pypi-proxy 플래그를 사용하여이를 사용합니다. (참고: QNAP에 Apt 캐시 서버 구축 , QNAP에 Pypi 캐시 서버 구축 )

모든 명령 옵션은 다음과 같습니다.
loci [global options] [script file]

  If script file isn't given, .travis.yml will be used.

GLOBAL OPTIONS:
   --name NAME, -n NAME  creating a container named NAME to run tests,
                         and that container will not be deleted.
   --tag TAG, -t TAG     creating an image named TAG.
   --base TAG, -b TAG    use image TAG as the base image.
                         (default: "ubuntu:latest")
   --verbose             verbose mode, which prints Dockerfile and
                         entrypoint.sh.
   --apt-proxy URL       URL for a proxy server of apt repository.
                         [$APT_PROXY]
   --pypi-proxy URL      URL for a proxy server of pypi repository.
                         [$PYPI_PROXY]
   --http-proxy URL      URL for a http proxy server. [$HTTP_PROXY]
   --https-proxy URL     URL for a https proxy server. [$HTTPS_PROXY]
   --no-proxy LIST       Comma separated URL LIST for which proxies won't
                         be used. [$NO_PROXY]
   --help, -h            show help
   --version, -v         print the version

향후 예정



현재, Python과 Go에만 대응하고 있으므로, 수시 대응 언어를 늘릴 예정.

좋은 웹페이지 즐겨찾기