반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- seldon core
- 오퍼레이터
- argocd
- CI/CD
- CANARY
- tekton
- blue/green
- eBPF
- Argo
- MLflow
- serving
- kubernetes operator
- Litmus
- mlops
- Kopf
- operator
- keda
- opensearch
- Model Serving
- knative
- xdp
- 카오스 엔지니어링
- Continuous Deployment
- opentelemetry
- Kubernetes 인증
- gitops
- Pulumi
- Kubernetes
- Kubeflow
- nginx ingress
Archives
- Today
- Total
Kubernetes 이야기
(docker) PMD 사용하기 본문
반응형
PMD
PMD 는 애플리케이션 코드 내에서 발견된 문제에 대해 보고 하는 오픈 소스 정적 소스 코드 분석기이다. 최근에는 SonarQube를 활용한 코드 분석이 많이 사용되고 있으나, 아직까지 PMD도 많이 사용되고 있다.
Argo 에서 Sonarqube를 연동하는 방법을 아래를 참고한다.
https://kmaster.tistory.com/22
공공 분야에서는 전자정부 프레임워크에서 기본적으로 제공하는 PMD ruleset으로 검증을 거친 후 배포하는 과정을 진행하고 있다.
PMD Ruleset
전자정부 표준프레임워크 표준 Inspection 룰셋을 다운로드 받는다.
PMD Docker
전자정부 표준프레임워크 표준 Inspection 룰셋은 PMD 5.x 를 사용하는 있는것으로 보인다.
PMD Container를 5.x 최신버전으로 제작해 보자.
FROM openjdk:8-jre-alpine3.9
ARG PMD_VERSION=${PMD_VERSION:-5.8.1}
RUN mkdir -p /opt
RUN cd /opt \
&& apk add --no-cache --virtual .build-deps wget unzip \
&& wget -nc -O pmd.zip https://github.com/pmd/pmd/releases/download/pmd_releases/${PMD_VERSION}/pmd-bin-${PMD_VERSION}.zip \
&& unzip pmd.zip \
&& rm -f pmd.zip \
&& mv pmd-bin-${PMD_VERSION} pmd \
&& apk del .build-deps
RUN apk add --update --no-cache dumb-init
ENTRYPOINT [ "/usr/bin/dumb-init", "/usr/bin/java", "-classpath", "/opt/pmd/lib/*", "net.sourceforge.pmd.PMD" ]
빌드 후 실행해 보자.
# docker run -v $PWD:/src ghcr.io/kmaster8/pmd:1.0 -language java -dir /src/jpetstore-6 -rulesets /src/EgovInspectionRules_kor-3.5.xml
Applying rule set filter: The rule "EmptyCatchBlock" has been moved from ruleset "basic" to "empty". Please change your ruleset!
Mar 15, 2022 7:47:55 AM net.sourceforge.pmd.RuleSetFactoryCompatibility$RuleSetFilter apply
WARNING: Applying rule set filter: The rule "EmptyCatchBlock" has been moved from ruleset "basic" to "empty". Please change your ruleset!
Applying rule set filter: The rule "EmptyCatchBlock" has been moved from ruleset "basic" to "empty". Please change your ruleset!
Mar 15, 2022 7:47:55 AM net.sourceforge.pmd.RuleSetFactoryCompatibility$RuleSetFilter apply
WARNING: Applying rule set filter: The rule "EmptyCatchBlock" has been moved from ruleset "basic" to "empty". Please change your ruleset!
Applying rule set filter: The rule "EmptyCatchBlock" has been moved from ruleset "basic" to "empty". Please change your ruleset!
Mar 15, 2022 7:47:55 AM net.sourceforge.pmd.RuleSetFactoryCompatibility$RuleSetFilter apply
WARNING: Applying rule set filter: The rule "EmptyCatchBlock" has been moved from ruleset "basic" to "empty". Please change your ruleset!
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/OrderService.java:119: 가공되지 않은 Exception을 throw하는 것은 비추천
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:7: 사용되지 않는 Private field 'index' 가 선언되었음
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:17: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:20: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:22: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:30: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:33: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:35: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/web/actions/CartActionBean.java:118: 내용이 없는 Catch Block이 존재
/src/jpetstore-6/src/test/java/org/mybatis/jpetstore/service/OrderServiceTest.java:55: 빈 Method에 주석을 추가할것
위에서 WARNING을 없애려면
<rule ref="rulesets/java/basic.xml/EmptyCatchBlock" language="java" message="내용이 없는 Catch Block이 존재">
--->
<rule ref="rulesets/java/empty.xml/EmptyCatchBlock" language="java" message="내용이 없는 Catch Block이 존재">
변경 후 다시 다시 실행해 보자.
# docker run -v $PWD:/src ghcr.io/kmaster8/pmd:1.0 -language java -dir /src/jpetstore-6 -rulesets /src/EgovInspectionRules_kor-3.5.xml
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/OrderService.java:119: 가공되지 않은 Exception을 throw하는 것은 비추천
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:7: 사용되지 않는 Private field 'index' 가 선언되었음
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:17: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:20: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:22: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:30: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:33: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/service/SimpleDeadLock.java:35: System.out.print 가 사용됨.
/src/jpetstore-6/src/main/java/org/mybatis/jpetstore/web/actions/CartActionBean.java:118: 내용이 없는 Catch Block이 존재
/src/jpetstore-6/src/test/java/org/mybatis/jpetstore/service/OrderServiceTest.java:55: 빈 Method에 주석을 추가할것
반응형
'Kubernetes > devops' 카테고리의 다른 글
code-server로 개발하기 (0) | 2022.03.30 |
---|---|
Kubernetes에서 Gitea 사용하기 (0) | 2022.03.23 |
Argo workflow 를 활용하여 CI/CD 구축하기 (기본설치) (0) | 2022.03.06 |
Argo Workflow를 사용한 CI/CD 구성 (Kaniko / Trivy) (2) | 2022.03.03 |
Argo workflow 를 활용하여 CI/CD 구축하기 (SonarQube) (2) | 2022.03.03 |
Comments