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인데도 아래처럼 에러가 났다.
흠…..
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번이 모두 수정되었다.
수정은 여러 방법이 있겠으나 무식하게 아래로 적용했다.
이렇게 하고나니, 서버에 리뷰를 올리면 유효성 체크도 잘하고 링크도 잘 달아주었다.
'Gerrit > Gerrit 과 외부 Tool 연동' 카테고리의 다른 글
1. Gerrit <-> Jenkins 연동 (1) | 2023.10.17 |
---|---|
2. Gerrit <-> Jira 연동 (0) | 2023.10.17 |
3. Jira 에서 Gerrit 연동 (0) | 2023.10.17 |
4. Gerrit 에서 Jira 연동 1/3 - Jira API 토큰 발급 (0) | 2023.10.17 |
5. Gerrit 에서 Jira 연동 2/3 - Jira configuration 셋업 (1) | 2023.10.17 |