본문 바로가기
Gerrit/Gerrit <-> Slack 연동

4. 게릿 리뷰 웹훅 (1/3)

by 실짱 2023. 10. 18.

이제는 1번에 대해 알아볼 차례다.

 

정확히 필요한것은

  • 개발자가 게릿에 리뷰를 등록해서
  • Jenkins 빌드가 성공적으로 이루어진 직후

를 캐치해야 한다.

 

Jenkins 형님은 게릿에 리뷰가 올라오면 자동으로 트리거 돼서 소스코드를 가져가서 빌드를 시작하고 이를 게릿에 커멘트를 적어서 알려준다.

 

그리고 빌드, 테스트 에러가 없으면 성공했다고 또 커멘트를 적어서 게릿에 알려준다.

 

이렇게 성공했다는 커멘트 적을때를 캐치할 수만 있다면…?

 

찾아보자.

게릿을 셋업하면서 느낀건, 이상하게 게릿은 구글링이 많지가 않다. 나오는 정보들도 대부분 도움이 되지 않았다. 정확히 타겟팅을 하지 않고서는 시작하는게 굉장히 불리했다.

이럴땐 역시 요즘 대세인 우리 챗GPT 형님이 최고다.

챗형님한테 물어봤다.

 

오호랏 !!!!!!!

할렐루야~!

커멘트가 달릴때마다 트리거되는 훅이 있다니.. 호 ~~~

 

조금 더 삽질을 한 후에 아래와 같은 결론에 도달했다.

1. gerrit hook (gerrit 에 특정 이벤트가 발생했을때를 trigger 하는 기능) 이 있다.

2. 이 중 comment 가 달릴때마다 트리거되는 comment-added 라는 hook 을 사용하면 된다.

 

차근히 살펴보자.

 

1. Gerrit Hook

 

우선 큰 카테고리인 Gerrit hook 을 어떻게 사용하는지부터 알아내야 했다.

공식사이트에 hook 설명을 뒤져보았다.

Gerrit Code Review - Hooks

 

응? standarg git hook 을 지원하지 않는다고?

살짝 불안했지만 hooks plugin 으로 대체 가능하다는 뉘앙스니 , 링크 타고 들어가봤다.

https://gerrit-review.googlesource.com/admin/repos/plugins/hooks,general

링크가…. 무슨 설명 문서일줄 알았는데 gerrit repository 다. 망……

하지만 우린 앞에서 이미 겪었지 않은가? 게릿 플러그인은 코드 안에 문서가 있다는것을.

코드를 받아서 Document 를 살펴보았다.

 

src/main/resources/Documentation/about.md

about.md 는 실패!

 

Configuration

config.md 는 gerrit.config 파일을 설정하는 내용인데, 여기도 뭔가 시작하기는 거북하다.

역시 실패!!

 

Supported Hooks

그나마 hooks.md 가 무언가 그럴싸하게 내용이 나와있다.

그런데 모두다 설정에 관한 내용이고, 도대체 시작을 어떻게 해야 되는건지 도통 모르겠다.

 

흠……

역시… 한방에 되는게 없군.

구글링을 해봤다.

오…

How to enable gerrit hooks?

나같은 놈이 있었다 ㅎㅎ

결론적으로 게릿 설치 폴더에 hooks 라는 폴더를 만들고 거기에 원하는 hook 을 bash shell script 파일로 만들어서 넣으면 된다.

(다른 폴더를 지정하고 싶으면 gerrit.config 에 설정하면 된다고 하는데 굳이..)

 

2. comment-added hook

게릿 훅을 설정하는것은 알아냈고, 이제 이중에 우리가 원하는 comment-added hook 을 확인할 차례다.

hook plugin 코드를 보니 각 hook 마다 클래스가 있었다. 우리의 타겟인 comment-added 클래스를 보았다.

이젠 클래스만 보면 대충 알거 같다.

createAsync() 함수를 통해서 쉘스크립트 파일을 지정하는데 디폴트 이름인 comment-added.sh 파일을 만들어서 게릿설치폴더/hooks/comment-added.sh 로 위치시키면 될거 같다.

 

hook 이 실행될때 넘겨주는 인자들을 설정하는 부분이다.

 

 

이젠 comment-added.sh 파일을 작성하는 일만 남았다.

우선은 어떤 정보들이 어떤 형태로 들어오는지 파악해야 했다. (그래야 뭘 어떻게 가져다 쓸지 알수 있으니)

로그를 심어서 살펴보자.

#!/bin/bash

change=$2
change_url=$4
change_owner=$6
change_owner_username=$8
project=${10}
branch=${12}
topic=${14}
author=${16}
author_username=${18}
commit=${20}
comment=${22}
...

echo " " >> /opt/gerrit/gerrit/logs/hook-comment-added.log
echo "post to slack [[" >> /opt/gerrit/gerrit/logs/hook-comment-added.log

echo "change_url : $change_url" >> /opt/gerrit/gerrit/logs/hook-comment-added.log
echo "change_owner : $change_owner" >> /opt/gerrit/gerrit/logs/hook-comment-added.log
echo "project : $project" >> /opt/gerrit/gerrit/logs/hook-comment-added.log
echo "author_username : $author_username" >> /opt/gerrit/gerrit/logs/hook-comment-added.log
echo "commit : $commit" >> /opt/gerrit/gerrit/logs/hook-comment-added.log
...

shell script 를 잘 다룰 수 있으면 좋다. sh 문법을 몰라서 여기서도 한참 시간을 뺏겼다.

 

Verified+1 커멘트가 달릴때의 로그!

/opt/gerrit/gerrit/logs/hook-comment-added.log

post to slack [[
change : BioStream_DoQu~release%2Fsprint1~I36fc62f2ddc5b308c1dc93afc106f1127eda9be8
change_url : http://review.aribio.net/c/BioStream_DoQu/+/501
change_owner : "AriJang <eddyjang@aribio.com>"
change_owner_username : eddyjang
project : BioStream_DoQu
branch : release/sprint1
topic : 
author : "Name of user not set <arijenkins.noreply@gmail.com>"
author_username : AriJenkins
commit : 61a9b053786567cdefcacb1c951146cd936c2a6f
comment : Patch Set 1: Verified+1

Build Successful 

http://jenkins.aribio.net/job/BioStream_DoQu_AriJenkins/8/ : SUCCESS
...

 

 

오호랏!!!

Verified+1 커멘트가 남길때에 이러한 정보들을 가지고 hook 이 호출된다.

필요한 정보들은 알아냈다. 이젠 일할 수 있을거 같다. ㅋㅋ

 

나머지는 다음장에 계속 ~~!!

 


< Prev     3. 슬랙 채널에 포스팅 하기                |               Next >     5. 게릿 리뷰 웹훅 (2/3)

'Gerrit > Gerrit <-> Slack 연동' 카테고리의 다른 글

2. 생각의 흐름  (1) 2023.10.18
3. 슬랙 채널에 포스팅 하기  (4) 2023.10.18
5. 게릿 리뷰 웹훅 (2/3)  (0) 2023.10.18
6. 게릿 리뷰 웹훅 (3/3)  (0) 2023.10.18
7. Hook 할때 커밋 메시지 가져오기  (1) 2023.10.18