본문 바로가기
Gerrit/Gerrit 과 외부 Tool 연동

6. Gerrit 에서 Jira 연동 3/3 - Gerrit 커밋 메시지에 Jira 이슈 hyperlink 시키기

by 실짱 2023. 10. 17.

Gerrit 에서 Jira 를 연동시킨다는것이 어떤 의미일까?

결과적으로 Gerrit 의 어딘가에서 Jira 로 바로 갈 수 있는것을 의미한다.

더 정확히는 Gerrit 의 웹 리뷰에서 Jira 의 해당 issue 로 링크가 걸려야 한다.

 

이를 위해서는 2가지 단계를 거친다.

1. 커밋 메시지에 강제된 Jira issue id 가 Jira 에 존재하는지 유효성 체크

2. 유효하다면 , 게릿의 커밋 메시지 부분을 Jira issue 에 대한 hyperlink 로 적용

 

이것을 해주는게 its-jira 플러그인의 역할이다.

그래서 Gerrit CI 빌드에서 its-jira.jar 를 다운받아 적용했다.

(이미 빌드된 산출물을 이용한 플러그인 적용은 [Gerrit forge] 페이지 참조 : [Gerrit/Gerrit 플러그인] - Gerrit 플러그인 - Gerrit forge 산출물로 적용 )

그런데 어떤 이유에서인지 1번부터 안됐다.

분명 존재하는 id인데도 아래처럼 에러가 났다.

Non-existing issue ids 라는 에러 내뱉음

흠…..

gerrit init 단계에서 연결 설정은 잘 pass 되고 있었다.

그런데 ..... 안된다.

무슨 영문인가….

 

결국 어쩔수 없이 디버깅이 필요했고 , 디버깅을 하기 위해서 소스코드를 받아서 빌드해서 필요한 로그들을 넣어서 적용해봤다 .

(소스코드 빌드 플러그인 적용은 [소스코드 빌드 적용] 페이지 참조 : [Gerrit/Gerrit 플러그인] - Gerrit 플러그인 - 소스코드 빌드 적용 )

디버깅까지는 정말 하고 싶지 않았는데 .....

 

우선 Non-existing issue ids 를 내뱉는 곳이 어디인지를 찾아야 한다.

하… its-jira 에서 내뱉는게 아니고 its-base 에서 내뱉는 에러 메시지였다.

package com.googlesource.gerrit.plugins.its.base.validation.ItsValidateComment

 

its-base 를 바탕으로 해서 여러 issue tracking system 들이 돌아가게 되는데 its-jira 는 그 중에 하나이다.

결국 its-base 는 interface 역할을 하고 실제 동작은 its-jira 에서 이루어진다.

its-jira 에 관련된 부분을 온갖 삽질 끝에 찾아봤더니 아래 부분이 문제였다.

package com.googlesource.gerrit.plugins.its.jira.JiraItsServerInfoProvider

 

Jira 의 서버 정보(https://aribio.atlassian.net) 를 가져오는 부분인데 첫번째 if 문에서 걸리지 않는게 문제였다.

의문은….

else 에서 getDefaultServerInfo() 에서 제대로 된 서버 정보를 가지고 오는데, 정작 그 다음에 다시 재검사는 하지만 해야될 일은 하지 않는다.

// 1. 무슨 이유에서인지 이때에는 제대로된 서버 정보가 셋업되지 않음
if(jiraItsServerInfo.isValid()) { 
  jiraConfig.addCommentLinksSection(projectName, jiraItsServerInfo);
} else {
  jiraItsServerInfo = jiraConfig.getDefaultServerInfo(); 
  // 2. getDefaultServerInfo() 는 제대로된 서버 정보를 리턴하고 여기에서 서버 주소가 바르게 셋업됨
}

if (!jiraItsServerInfo.isValid()) { // 3. 위에서 valid 한 서버 정보가 셋팅되었으므로 여기에 안걸림
  ... 
}  
// 4. 그럼 여기서 else 로 묶어서 위에서 못한 
// jiraConfig.addCommentLinksSection(projectName, jiraItsServerInfo); 이거를 해줘야지!!!!!!!

 

왜..............???

 

구글 형님들이 어떤 이유로 이런 논리 흐름을 만들었는지는 모르겠지만,

문제 상황에서 서버 정보는 다시 셋팅해주는데, 관련된 일을 다시 안하고 있어서 문제가 되었다.

그리고 운이 좋게도, 이 [관련된 일] 이 바로 위의 2번 (게릿의 커밋 메시지 부분을 Jira issue 에 대한 hyperlink 로 적용) 에 해당하는 함수였다.

이거 한방으로 1번,2번이 모두 수정되었다.

 

수정은 여러 방법이 있겠으나 무식하게 아래로 적용했다.

default 정보는 이미 잘 들어가 있으니, 가져온 정보가 유효하지 않으면 default 사용하도록 수정

 

 

이렇게 하고나니, 서버에 리뷰를 올리면 유효성 체크도 잘하고 링크도 잘 달아주었다.

[ABMMR-156] 이 hyperlink 로 잘 연결된 모습

 

 


< Prev     5. Gerrit 에서 Jira 연동 2/3 - Jira configuration 셋업