View


Apache Storm 빌드 및 테스트 


- 해당 글은 Apache Storm 1.1.0 을 기준으로 작성되었으며, 릴리즈에 따라서 상세 내용이 변경될 수 있습니다. 



1. 사전요구사항


- 메뉴얼에는 Maven 3.2.5 나 그 이하의 버전을 사용할 것을 권고하며 latest는 버그가 많으며 이러한 것들은 패키지간의 의존성을 제대로 연결하지 못할 수 있다고함. 그리고 이것을 사용하면 mvn dependency:tree 명령어가 제대로된 결과값을 보여주지 못할 수도 있다고 기술되어 있음. (https://issues.apache.org/jira/browse/MSHADE-206) 하지만 2017년 09월 06일 기준으로 최신 Maven 버전은 3.5.0 이기 때문에 Maven 3.3.3, 3.3.9 또는 3.5.0 버전을 사용해도 무방할 것으로 생각됨.

- 아래와 같이 git 명령어를 사용하여 Apache Storm release 1.1.0 을 다운받는다. 


- Storm을 빌드 및 테스트하기 위해서는 python, ruby, nodejs가 필요하다. 너무 많은 내용을 다룰 순 없기 때문에, platform/OS에 특화된 설치 방법을 다루진 않음.
Ruby package 매니저인 rvm와 nodejs 패키지 매니저 nvm 은 편리하고, travis 상에서 테스트를 위해 사용된다.


1-1. RVM, NVM 설치 방법

1) RVM 다운로드 > curl -L https://get.rvm.io | bash -s stable --autolibs=enabled && source ~/.profile

2) NVM 다운로드
> wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.26.1/install.sh | bash && source ~/.bashrc

3) RVM, NVM 설치

> rvm use 2.1.5 --install > nvm install 0.12.2
> nvm use 0.12.2

4) ruvy나 nodejs 가 기존에 사용하는 특정 버전이 존재한다면, 그 버전을 사용해도 된다.


2. Build

- 가장 상위 레벨에서 다음과 같은 명령어를 사용한다.
> mvn clean install

- 만약 유닛 테스트를 수행하고 싶지 않다면 다음 명령어를 추가한다.
> mvn clean install -DskipTests


- storm.thrift 를 수정한 경우, trift code, java 또는 python code 를 컴파일 전에 다시 생성(re-generation)해야한다.
> cd storm-core/src
> sh genthrift.sh



3. Test

- 테스트는 두 가지 그룹으로 나누어 수행할 수 있다. 하나는 유닛 테스트이며, 하나는 통합 테스트이다. Java uinit 테스트, Clojure unit 테스트 그리고 Clojure 통합 테스트가 maven test 단계에서 수행된다. Java integration 테스트는 maven의 integration-test 또는 verify 단계에서 수행된다.

- Clojure 와 java 유닛 테스트를 수행하면서, 통합테스트를 수행하지 않으려면 다음과같은 명령어를 수행해야 한다.
> mvn test

- Clojure와 java의 통합 테스트를 무행하면서, 유닛 테스트를 수행하지 않으려면 다음과 같은 명령어 중 하나를 수행하면 된다.
> mvn -P integration-tests-only verify
> mvn -P integration-tests-only integration-test

- Clojure에 대한 유닛테스트와 통합 테스트를 모두 수행하기 위해서는 다음과 같은 명령어를 수행하면 된다.
> mvn -P all-tests test

- 모든 통합테스트와 단위 테스트를 수행하기 위해서는 다음 명령어 중 하나를 수행하면 된다.
> mvn -P all-tests verify
> mvn -P all-tests integration-test

- Clojure REPL를 통해서 선택적으로 테스트하는 것도 가능하다. 다음 예제는 auth_test.clj 를 통해서 테스트를 수행하는 것인데, 이것은 네임스페이스를 가지고 있다. (org.apache.storm.security.auth.auth-test)

- 단위 테스트를 선택적으로 수행하기 위한 옵션은 ' -Dtest=<test_name>' 이다. 이것은 clojure 또는 junit 모두 동작한다.
(IntelliJ IDEA는 built-in Clojure REPL 을 수행할 수 있는데, 가끔 REPL의 버전에 따라서 의존성 체크가 실패할 수도 있다. )

- 불행히도, clojure 테스트에 대해 실패하였는데 그부분이 maven-clojure-plugin 이고, 에러 메세지에 별로 도움이 되지 않는 부분이 출력된다면
target/test-reports를 참고하여 실제로 어느 부분에서 에러가 발생했는지, 어떤 바이너리가 빠졌는지 확인할 수 있다.
기본적으로 통합 테스트는 테스트 단계에서 수행하지 않는다. java 와 clojure integration 테스트는 profile을 반드시 사용할 수 있어야 한다.




4. Create a Storm distribution (packaging)

- Apache 에서 다운로드 받은 것 처럼 distribution을 생성하기 위해서는 아래와 같은 명령어를 수행하면 된다. 하지만 이 명령은 maven release plugin을 사용하지 않는데, 공식적인 release는 자체적인 release manager를 통해서 작업이 이루어지기 때문이다.


> # First, build the code.
> # you may skip tests with `-DskipTests=true` to save time > $ mvn clean install > # Create the binary distribution. > $ cd storm-dist/binary && mvn package


- 마지막 명령어를 통해서 다음과 같은 파일들이 생성되는데, *.asc 디지털 서명 파일이 포함된다.

> storm-dist/binary/target/apache-storm-<version>.pom
> storm-dist/binary/target/apache-storm-<version>.tar.gz
storm-dist/binary/target/apache-storm-<version>.zip


- 맨 처음으로 mvn package 명령어를 수행하게 되면 GPG/PGP credential을 생성하라는 경고/에러가 발생할 수 있다.



- 이것은 모든 binary 들을 위한 *.asc 디지털 서명을 만들라는 이야기이며, 다음과 같은 명령어를 통해서 바이너리에 대한 디지털 서명을 검증할 수 있다.

> # Example: Verify the signature of the `.tar.gz` binary.
> $ gpg --verify storm-dist/binary/target/apache-storm-<version>.tar.gz.asc

Share Link
reply
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30