OS : Window
SonarQube Ver : sonarqube-8.9.10.6
플로우를 간단하게 설명하면 다음과 같다.
1.BE 서버에서 소나스캐너를 실행함
2. 소나스캐너 호출이 완료되면 소나스캐너가 소나큐브 서버로 데이터를 보냄
3. 소나큐브는 Webhook에서 설정한 BE 서버를 비동기 호출한다.
4. 호출받은 BE 서버는 소나큐브 Payload를 가지고 이후 로직 처리 진행
내가 하고 싶었던 것
- 4번 절차에서 소나큐브의 응답받은 데이터를 DB 적재하고 싶음
- 응답 데이터마다 각기 다른 컬럼에 적재되어야 하기 때문에 서비스단에서 분기 처리가 필요함
그래서 어떻게 했는가
결론 : 소나스캐너 파라미터를 이고지고 BE서버까지 가지고 오면 된다.
즉, 1번 절차에서 소나스캐너를 실행하는 시점에 파라미터를 추가하여 4번 절차에서 꺼내서 쓰면 된다.
소나스캐너 실행 명령어에 아래 예시와 같이 옵션을 추가하면 된다. (다건 가능)
- Dsonar.analysis.Hello=world
- Dsonar.analysis.todayIs=20231202
이때, 소나큐브 Webhook Payload를 확인하면 다음과 같은 형식으로 나온다.
{
생략..
"properties": {
"sonar.analysis.Hello": "world",
"sonar.analysis.todayIs": "20231202"
},
"qualityGate": {
생략..
}
}
이후 Endpoint에서 String 데이터를 JSON 형식으로 파싱 해서 서비스 로직에서 사용하면 된다.
EndPoint 예시
@RestController
public class WebhookController {
@PostMapping("/webhook")
public void webhook(@RequestBody String resultFromSonarQube) {
try {
JSONParser jparser = new JSONParser();
JSONObject jobj = (JSONObject) jparser.parse(resultFromSonarQube);
JSONObject propertiesObj = (JSONObject) jobj.get("properties");
String properties = propertiesObj.toString();
// 파싱
HashMap<String, Object> propInfo = new ObjectMapper().readValue(properties, HashMap.class);
// 파라미터 추출
String helloValue = (String) propInfo.get("sonar.analysis.Hello");
String todayIsValue = (String) propInfo.get("sonar.analysis.todayIs");
// 비즈니스 로직 시작 ...
} catch (Exception e) {
// 예외처리
e.printStackTrace();
}
}
}
출처 :
Additional parameters
A basic authentication mechanism is supported by providing user/password in the URL of the Webhook such as https://myLogin:myPassword@my_server/foo.
If you provide additional properties to your SonarScanner using the pattern sonar.analysis.*, these properties will be automatically added to the section "properties" of the payload.
For example these additional parameters:
sonar-scanner -Dsonar.analysis.buildNumber=12345
Would add this to the payload:
"properties": {
"sonar.analysis.buildNumber": "12345"
}
'🏰 Back-end' 카테고리의 다른 글
[SonarQube] SonarQube 업그레이드에 따른 SonarScanner 버전을 확인해보자 (SonarQube 10.5.1) (0) | 2024.10.27 |
---|---|
[Github] OAuth 앱 권한 부여 방법 (0) | 2024.04.03 |
[Mybatis] foreach insert duplicate update 처리(Upsert) (0) | 2023.10.08 |
[SonarQube] SonarQube 내장 DB (H2) 접속방법 (0) | 2023.08.14 |
[SonarQube] Window cmd에서 소나큐브 프로젝트 바인딩 명령어 입력 (0) | 2023.08.07 |
댓글