본문 바로가기
Gerrit/Gerrit 플러그인

2. Gerrit 플러그인 - 소스코드 빌드 적용

by 실짱 2023. 10. 19.

앞장에서 살펴봤던것처럼 이미 구글 형님들이 잘 빌드해준 산출물을 가져다가 쓰면 베스트지만,

경우에 따라서는 코드를 수정하거나 디버깅을 해야 할때가 있다.

필자의 경우 Gerrit 과 Jira 를 연동시켜야 하는 미션이 있었는데, 여기저기 구글링하고 가이드하고 있는 문서대로 잘 진행했음에도 불구하고 예상한 동작이 안되어서 애를 먹었었다.

결국 셋팅만으로는 한계에 다다르게 되어 디버깅이 필요하게 되었고, 이게 플러그인을 찾아서 빌드하게 된 메인 이유였다.

플러그인 빌드에 대해서 자세히 알아보자.


[직접 소스코드로 플러그인 빌드]

 

1. 소스코드 준비

빌드를 하기 위해서는 당연히 소스코드를 준비해야 한다.

처음에는 플러그인 빌드만 준비하면 되는줄 알았다. 하지만, 여러 시행착오끝에 게릿 풀소스가 필요함을 알게 되었고 하나씩 준비해보자.

 

1) 게릿 풀소스 다운

전체적인 가이드는 게릿 개발자 셋업 페이지 참조 : Gerrit Code Review: Developer Setup

# 아래 git 명령어를 통해 게릿 풀소스 다운
git clone --recurse-submodules https://gerrit.googlesource.com/gerrit

개발자 가이드에 나와있듯이 --recurse-submodules 옵션이 필요하다.

gerrit 은 각 core plugin (init 시에 디폴트로 설치해주는 플러그인들) 들을 각각 gerrit 의 submodule 로 git 에서 관리하고 있다.

저렇게 하면 전체 풀소스를 다운 받을 수 있다.

 

2) 게릿 빌드 (optional)

우리는 게릿 소스를 굳이 빌드할 필요는 없다.

그러나 개발자의 호기심으로 굳이 빌드를 해보고 싶다면 위에서 받은 gerrit 소스코드 root 폴더에서 아래 명령어를 실행하면 된다. (향후 자체적인 기능 변경 등을 위해서라도 빌드해두면 좋다)

# 게릿 공식 문서 설명
$ bazel build gerrit

# 필자의 환경
$ bazelisk build gerrit

bazel 에 대해서는 생략하겠다. 최근에는 bazel 대신에 bazelisk 로 빌드한다. (bazelisk 는 항상 최신 bazel 을 다운받아 bazel build 를 해주는 도구라고 이해하면 된다)

그러면 아래처럼 막 빌드한다.

 

최종 산출물은 bazel-bin 폴더 밑에 gerrit.war 로 생성이 된다.

(이 gerrit.war 파일로 게릿 설치하면 된다. → [Gerrit/Gerrit 설치 및 자체 작업] - Gerrit 설치 )

 

3) 플러그인 소스 코드 다운

플러그인 소스 gerrit : plugins/ - Git at Google => 여기에 가서 필요한 플러그인을 찾는다. (여기서는 its-base 를 예시로 설명)

 

클릭해서 git clone 명령어 확인

 

1)에서 받은 gerrit 풀소스 root 에서 plugins 폴더에서 위 clone 명령어 실행해서 플러그인 소스를 받으면 된다.

 

2. Documentation 확인

게릿의 모든 소스는 Documentation 폴더를 가지고 있고 그 폴더에 필요한 내용들의 문서를 모아놓는다.

게릿 풀소스도 Documentation 안에 온갖 문서들이 다 있다.

 

각 플러그인들도 역시 플러그인 소스 안에 Documentation 폴더가 있고 여기에 가이드 문서가 있다. (위치는 src/main/resources/Documentation/)

 

빌드 가이드 문서도 대부분 있는데, 하필 its-base 는 없다. 골라도 참…. 

유사한 its-jira 에는 build.md 가 있다. 확인해보자.

빌드는 어떻게 하라고 되어있고, 산출물은 어디에 나오는지 잘 설명되어 있다.

이렇게 모든 게릿 플러그인 들은 동일한 소스 구조와 서비스를 제공하고 있다.

 

3. 플러그인 빌드

빌드 가이드 문서가 없어도 상관은 없다. 위에서 설명했듯이 게릿 플러그인 빌드는 모두 동일한 명령어다.

cd 게릿소스코드root폴더

# 공식 가이드 - @PLUGIN@ 은 그 플러그인의 이름이다. (its-base, its-jira 등)
$ bazel build plugins/@PLUGIN@

# 필자의 환경 - 나는 모든 bazel 을 bazelisk 로만 바꿔주면 된다.
$ bazelisk build plugins/@PLUGIN@

폴더를 찾아갈때 보통 앞에 한두글자만 타이핑하고 tab 키를 이용해서 자동완성으로 찾아가게 되는데, 이럴경우 폴더 맨 뒤에 슬래쉬(/) 가 붙게 된다. (ex> plugins/its-base/)

이럴경우 bazel 빌드에서는 아래처럼 에러가 난다. 경로 맨뒤에 슬래쉬(/)가 붙지 않도록 주의하자.

 

4. 산출물 확인

2번에서 언급된대로 산출물은 gerrit소스코드root폴더/bazel-bin/plugins/[플러그인명]/플러그인명.jar 로 generate 된다.

 


< Prev    1. Gerrit 플러그인 - Gerrit forge 산출물로 적용                |                Next >     3. Gerrit 플러그인 - 게릿에 적용