CI/CD 구축하기 (3)

LaStella·2023년 4월 12일
0

CI/CD 구축하기

목록 보기
3/3

Static Manager Service 프로젝트 생성

application.yml

  • 포트번호는 젠킨스와 소나큐브와 겹치지 않는 번호를 임의로 지정합니다.
  • 사용하는 DB는 H2로 관련 설정을 작성합니다.
  • 소나큐브 web api를 사용하기 위해 유저 토큰을 저장합니다.
  • 요청을 보낼 apiurl과 필요한 metric key를 저장합니다.

SonarQube Webhook 설정

ngrok을 사용하여 Static Manager Service의 외부 url 생성

젠킨스 ngrok 설정
ngrok은 한 계정에 외부url을 하나만 생성이 가능하므로 계정을 하나 더 만들어 다음 명령어로 url을 생성합니다.
ngrok http 9005 --authtoken={AuthToken}
위에서 설정한 Static Manager Service의 포트번호에 해당하는 외부 url을 생성합니다.

SonarQube Webhook

SonarQube Project 선택 -> 우측 상단 Project Settings -> Webhooks를 클릭합니다.
원하는 이름과 위에서 ngrok을 통해 생성한 Static Manager Service의 url을 입력합니다.

Controller

소나큐브에서 분석이 완료되면 웹훅을 보내게됩니다.
Static Manager Service에서 POST방식으로 들어오는 웹훅을 받아 프로젝트 정보와 분석 결과를 DB에 저장하도록 서비스에 요청을 위임합니다.
요청에 대한 결과로 responseDto에 생성된 프로젝트 정보와 분석 결과를 담아 반환합니다.

WebhookPayloadDto

SonarProject

SonarProjectDto, SonarProjectEntity

  • 하나의 프로젝트에는 여러 분석 결과가 존재할 수 있습니다.
  • addAnalysis()
    • 분석 결과에 프로젝트를 등록하는 연관관계 편의 메소드를 추가합니다.

Repository, Service

웹훅에 담겨있는 프로젝트의 key, name, url로 SonarProjectEntity를 생성하고 저장합니다.

Analysis

AnalysisEntity

Repository

Service

  • 소나큐브에서 보낸 웹훅에서 소나큐브 서버의 url을 가져와 WebClient를 이용해 정적 분석 결과를 요청합니다.
  • 인증으로 사용되는 유저토큰과 분석 결과에서 필요한 metric key들을 미리 입력한 application.yml 에서 가져옵니다.
  • 앞서 저장한 SonaryProjectEntity에 AnalysisEntity를 추가합니다.

ComponentDto

WebClient를 통해 가져온 분석 결과 JSON파일을 파싱하여 저장합니다.

결과

postman으로 소나큐브의 웹훅과 같은 JSON을 POST방식으로 Static Manager Service에 보냅니다.
정상적으로 생성된 SonarProjectEntity와 analysisEntity를 확인할 수 있습니다.

DB(H2)에도 저장된 정보를 확인할 수 있습니다.

참고글

https://recordsoflife.tistory.com/1323
https://jforj.tistory.com/319
https://wpioneer.tistory.com/221
https://www.viralpatel.net/basic-authentication-spring-webclient/
https://velog.io/@chlwogur2/%EC%A4%91%EC%B2%A9%EB%90%9C-JSON%EC%9D%84-Java-Object-%EB%A1%9C-%EB%A7%A4%ED%95%91%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-With-Jackson

profile
개발자가 되어가는 중...

0개의 댓글