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

1. Gerrit <-> Jenkins 연동

by 실짱 2023. 10. 17.

** Jenkins 가 무엇이고 , 왜 필요하고, 왜 게릿과 연동해야 되는지는 젠킨스 페이지([젠킨스 (Jenkins)] - Jenkins 란?)에서 자세히 다뤄보겠다.

    여기서는 게릿,젠킨스를 다 안다고 가정한다. **

 

게릿 코드리뷰에 Jenkins 가 더해진 workflow 는 아래와 같다.

 

 

코드 리뷰 과정에서 CI/CD 를 통한 코드의 안정성 확보는 필수다.

(사실 이 부분때문에 AriServer 를 구축하게 되었다)

이 장에서는 Jenkins 에서 Gerrit review 에 올라온 수정사항을 빌드해서 해당 리뷰에 Verified+1/-1 점을 주는 과정에 대해서 자세히 알아보자.

 

이 페이지의 처음부터 끝까지 가슴에 새겨야할 한 문장이 있다.

***Jenkins 는 Gerrit 입장에서는 또다른 개발자 *** 라는것을 계속 가슴에 새겨야 한다.

Jenkins 라는 개발자는 Gerrit 에 다른 개발자가 수정사항을 올리면, 이에 대한 알림을 받게되고, 수정사항이 포함된 전체 소스코드를 Gerrit 으로부터 다운로드 해서 빌드 및 테스트를 수행하고 Gerrit 에 결과를 comment 하는게 주업이다.

 

여기서는 아래처럼 게릿 리뷰 페이지에 젠킨스가 자동으로 Verified 커멘트를 남기는것이 목표다.

게릿 리뷰가 등록되면 젠킨스에서 자동으로 트리거해서 빌드 성공, 실패 여부를 커멘트 단 최종 모습


Jenkins 쪽 작업

1. 플러그인 설치

설치한 젠킨스 접속(http://jenkins.xxxxx.net) → Jenkins 관리 → Plugins

 

Available plugins → gerrit 검색

  • Gerrit Trigger : 필수 - 게릿에 변경이 발생할 때 패치셋을 가져와서 빌드하고 결과에 따라 게릿에 점수를 남긴다.
  • Gerrit Code Review plugin : Optional - Gerrit trigger 보다 조금 더 확장 기능을 제공하는데 딱히 필요하진 않다.

2. Gerrit trigger 설정

설치한 젠킨스 접속(http://jenkins.xxxxx.net)→ Jenkins 관리 → 페이지 제일 아래쪽에 Gerrit Trigger 클릭

 

좌측의 + Add New Server

 

알맞은 이름으로 CREATE (처음 셋업하는것이니까 그냥 default configuration 으로 진행)

 

설정 페이지에서 나머지 채우자.

 

① Host name : gerrit server의 호스트 name - review.xxxxx.net
② Frontend URL : gerrit web 주소 - http://review.xxxxx.net
SSH Port : gerrit server 의 ssh port - 디폴트는 29418 (gerrit.config 파일에 있다)
④ Username : Jenkins 가 접근할 계정 id - AriJenkins (우리는 AriJenkins 로 접근)
⑤ E-mail : 위 user 에 해당하는 메일 주소 (달라도 상관없다)
⑥ SSH Keyfile : jenkins 의 ssh private key - gerrit 에는 public key 를 등록하고 private key 를 통해서 인증 진행

 

정보를 다 채운후 우하단의 [Test Connection] 버튼으로 정상 접속 여부 확인

 

문제가 없으면 Success 라고 뜬다.

문제가 생길 경우 Failed 라고 뜬다. 이 경우 원인을 찾아서 올바른 정보를 넣어주어야 한다.

user name 을 잘못 입력했을 경우

 

이제 Gerrit Trigger 메인 화면으로 나오면 위에서 설정한 서버가 등록되어있고 , 문제가 없을경우 Status 에 파란불이 들어온다.

 

문제가 있을경우 Status 는 빨간 신호등으로 바뀐다.

 

빨간 신호등 옆에 설정(톱니바퀴) 아이콘을 클릭하면 위에 설정 페이지로 진입하게되고 거기서 디버깅을 하면 된다.

설정 페이지에는 상태에 따라 점수를 어떻게 줄지를 설정할 수 있다.

대부분 건드릴 필요가 없다. 그냥 놔둬라.


Gerrit 쪽 작업

 

1. Gerrit 에 Jenkins SSH key 등록

위에서 Jenkins는 Gerrit 입장에선 또다른 개발자라고 했다. 개발자가 Gerrit 에 접근하려면?

제일 먼저 할일은 자기 SSH key 를 gerrit 에 등록하는 일이다. 그래야 코드를 댕길수 있으니까.

  • Jenkins home directory 로 이동 (우리는 /var/lib/jenkins)
  • ssh key 생성
  • id_rsa.pub 키를 게릿에 등록

 

2. 권한 설정

서두에서도 설명했지만 Gerrit 입장에서 Jenkins 는 또다른 개발자다.

이 개발자는 Service Users 라는 특별한 그룹에 속해있다. 이 Service Users 그룹이 일을 할 수 있도록 권한을 부여 해야 한다.

Gerrit 버전 3.2 까지는 Non-Interative User 라는 그룹이었다. 이게 3.3 부터 Service users 라는 그룹으로 바뀌었다.

 

1) Stream events 권한 허용

젠킨스 형님이 게릿 서버와 통신하기 위해서 (정확히는 게릿에 반영되는 수정사항에 대해 trigger event 를 받기 위해서) 필요한 권한

게릿 접속 (http://review.xxxxx.net) → AriGerrit 으로 로그인 (관리자) → BROWSE → Repositories → All-Projects

 

Access → EDIT (페이지 맨 밑에 있다)

 

Global Capabilities 에 Stream Events 항목에 Service Users 그룹을 ALLOW 로 추가해준다.

젠킨스 형님이 게릿에서 활동하는 유저 그룹은 Service Users 다.

 

2) refs/* 에 READ 권한 추가

젠킨스 형님이 소스코드를 fetch 하기 위해 필요한 권한.

소스코드를 가져가서 빌드하려면 refs/* 에 READ 권한이 있어야 한다.

refs/* 레퍼런스를 Jenkins 가 read 할 수 있도록 Service Users 를 ALLOW 로 추가

 

3) Verified 에 점수를 줄수 있도록 권한 추가

젠킨스 형님이 커멘트를 남기기 위해 필요한 권한.

커멘트를 남기는 reference 는 refs/head 다.

여기에 Lavel Verified 항목에 Service users 를 추가해준다. 


이제 Gerrit 과 Jenkins 연동 작업이 모두 끝났다 !!!


글 도입부에 소개한 게릿에 젠킨스가 커멘트를 남기려면 아직 한 단계를 더 해야 한다.

내용이 너무 길어지고 젠킨스 프로젝트 생성에 관한 이야기이니 

젠킨스쪽 페이지 만들때 (여기는 게릿 관련 페이지다) 다시 정리하고 업데이트 하겠다.

([젠킨스 (Jenkins)] - Jenkins 에서 Gerrit 프로젝트 빌드하기)

이번장에서는 Gerrit 과 Jenkins 를 연동하는 방법에 대해 자세히 다뤘다.
잊지말자!!!
Gerrit 입장에서 Jenkins 는 개발자라는 것을!!

 


Next >     2. Gerrit <-> Jira 연동