์๋ํ๋ธ ์ด์ฉ ์ฝ๋ ์ ์ ๋ถ์ ์๋ํ
์ฝ๋ ์ ์ ๋ถ์
์ด๋ผ ํจ์ ์ค์ ํ๋ก๊ทธ๋จ์ ์คํํ์ง ์๊ณ ์ฝ๋๋ง์ ํํ์ ๋ํ ๋ถ์์ ๋งํ๋ค. ์ด๋ฅผํ
๋ฉด ๋์๋๋ ์ฝ๋(?)๋ผ๋์ง, ์ํ์ฑ์ด ์๋ ์ฝ๋, ๋ฏธ๋ฆฌ ์ ์๋ ๊ท์น์ด๋ ์ฝ๋ฉ ํ์ค์ ์ค์ํ๋์ง์ ๋ํ ๋ถ์์ ๋งํ๋๋ฐ java ๊ธฐ์ค์ผ๋ก๋ ์๋ ๋ค์ํ (์ ์๋ ค์ง) ์ ์ ๋ถ์ ๋๊ตฌ๋ค์ด ์๋ค.
- PMD
- ๋ฏธ์ฌ์ฉ ๋ณ์, ๋น์ด์๋ ์ฝ๋ ๋ธ๋ฝ, ๋ถํ์ํ ์ค๋ธ์ ํธ ์์ฑ๊ณผ ๊ฐ์ Defect์ ์ ๋ฐํ ์ ์๋ ์ฝ๋๋ฅผ ๊ฒ์ฌ
- https://pmd.github.io
- FindBugs
- ์ ํด์ง ๊ท์น์ ์ํด ์ ์ฌ์ ์ธ ์๋ฌ ํ์ ์ ์ฐพ์์ค
- http://findbugs.sourceforge.net
- CheckStyle
- ์ ํด์ง ์ฝ๋ฉ ๋ฃฐ์ ์ ๋ฐ๋ฅด๊ณ ์๋์ง์ ๋ํ ๋ถ์
- http://checkstyle.sourceforge.net
์ด์ธ์ SonarQube
๋ผ๋ ํด์ด ์๋๋ฐ ๊ฐ์ธ์ ์ผ๋ก ์ ์๋ ค์ง ๋ค๋ฅธ ํด๋ค์ ์ข
ํฉํ(?)์ด๋ผ๊ณ ์๊ฐ์ด ๋ค์๊ณ , ๊ทธ์ค ๊ฐ์ฅ ์ธ์๊น์๋ ๊ธฐ๋ฅ์ด github๊ณผ ์ฐ๋์ด ๋๊ณ ์ ์ ํ ๊ตฌ์ฑ์ ํ๊ฒ ๋๋ฉด ์ฝ๋๋ฅผ ์์ ํ๋๊ณผ ๋์์ ์๋์ผ๋ก ๋ถ์์ ํ๊ณ ๋ฆฌํฌํ
๊น์ง ํด์ค๋ค๋ ๋ถ๋ถ์ด์๋ค. ( ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ผ๋ ๋ค๋ฅธ ๋๊ตฌ๋ค์ ์๋์ผ๋ก ๋๋ ค์ค์ผ ํ๊ณ ๋ฆฌํฌํ
๋ํ Activeํ์ง ๋ชปํ(?) ์์ฌ์ด ์ ์ด ์์๋ค. )
์ง๊ธ๋ถํฐ Jenkins + github web-hook + SonarQube ๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฝ๋๋ฅผ ์์ ํ๊ณ PullRequest๋ฅผ ์ฌ๋ฆฌ๊ฒ ๋๋ฉด ์์ ํ ํ์ผ์ ๋ํด ์๋์ผ๋ก ์ ์ ๋ถ์์ด ์ด๋ค์ง๊ณ , ๊ทธ์๋ํ ๋ฆฌํฌํ ์ด ํด๋น PullRequest์ ๋๊ธ๋ก ๋ฌ๋ฆฌ๋๋ก ์ค์ ์ ํด๋ณด๊ฒ ๋ค. (์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋ด(?)์ด ์๋์ผ๋ก ํด์ฃผ๋๊ฒ ์ผ๋ง๋ ํธํ ์ผ์ธ๊ฐ…)
๊ธฐ๋ณธ ์ปจ์
์ ์ฒด์ ์ธ ์ปจ์ ์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.

- IDE์์ ์ฝ๋์์ ์ ํ๊ณ remote ์ ์ฅ์์ commit & push๋ฅผ ํ๋ค. ๊ทธ ๋ค์ github์์ master(ํน์ stableํ branch)์ ๋ํด ์์ branch๋ฅผ PullRequest ์ฌ๋ฆฐ๋ค.
- ๋ฏธ๋ฆฌ ๋ฑ๋กํ github์ web-hook์ ์ํด PullRequest ์ ๋ณด๋ค์ jenkins์ ์ ์กํ๋ค.
- ์ ๋ฌ๋ฐ์ ์ ๋ณด๋ฅผ ์ฌ ๊ฐ๊ณตํ์ฌ SonarQube๋ก ์ ์ ๋ถ์์ ์์ฒญํ๋ค.
- SonarQube์์ ๋ถ์ํ ์ ๋ณด๋ฅผ ๋ค์ jenkins๋ก return ํด์ค๋ค.
- SonarQube์ผ๋ก๋ถํฐ return ๋ฐ์ ์ ๋ณด๋ฅผ ํด๋น PullRequest์ ๋๊ธ์ ๋ฆฌํฌํ ์ ํด์ค๋ค.
๊ฐ๋จํ ๋ณด๋ฉด (๋ญ ๊ฐ๋จํ๋ ์ฝ๋ค~) ๋ผ๊ณ ๋ณผ์๋ ์๊ฒ ์ง๋ง ๋๋ ์ด๋ฐ ์ ์ฒด ํ๋ฆ์ ์ค์ ํ๋๋ฐ ์์ด ์ด๋ ค์ ๋ค.
์ฌ์ค ์ ํ ํ๋ ๊ณผ์ ์์ ์ ์ง์์ ์ฝ์ง์ ํ์๊ธฐ์, ์ด ํฌ์คํ ์ ์ ๋ ์ด์ ์ผ์๋ ์๊ฒ ๋ค. ๋๋ถ์ด ๊ฒ์์ ํด๋ด๋ ์ด๋ ๊ฒ ์ ์ฒดํ๋ฆ์ด ์ ๋ฆฌ๋ ๊ธ์ด ์ ์๋ณด์ฌ์ + ๋ด๊ฐ ํ ์ฝ์ง์ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๋ ํ ๊ฒ๊ฐ์์(?)
Maven ์ค์น
๊ธฐ๋ณธ์ ์ผ๋ก Maven์ H2DB๋ฅผ ์ฌ์ฉํ๋ฏ๋ก SonarQube๋ฅผ ์ค์นํ๊ธฐ์ ์ Maven๋ถํฐ ์ค์นํด์ค์ผ ํ๋ค.
$ wget http://apache.mirror.cdnetworks.com/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
$ tar -zxvf apache-maven-3.5.2-bin.tar.gz
(ํ๊ฒฝ๋ณ์ ์
ํ
ํ )
$ mvn -version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T16:58:13+09:00)
...
SonarQube ์ค์น
์ ์ ๋ถ์์ ๋์์ฃผ๋ SonarQube๋ฅผ ์ค์นํด๋ณด์.
$ wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.1.zip
$ unzip sonarqube-6.7.1.zip
$ cd sonarqube-6.7.1/bin/linux-x86-64
$ ./sonar.sh start
Starting SonarQube...
Started SonarQube.
๊ธฐ๋ณธ์ ์ผ๋ก 9000ํฌํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ ๋ค๋ฅธํฌํธ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด /sonarqube-6.7.1/conf/sonar.properties ๋ด sonar.web.port=9000
์ ์์ ํด์ฃผ๋ฉด ๋๋ค. (SonarQube๋ Elasticsearch๋ฅผ ์ฌ์ฉํ๊ตฌ๋…)
์ค์นํ ์คํ์ ํ๋ค ์๋ฒIP:9000
์ ์ ์ํด๋ณด๋ฉด ์๋ ํ๋ฉด์ฒ๋ผ ๋์จ๋ค. (ํน์ ์ ์์ด ์๋๋ค๊ฑฐ๋ ์๋ฒ๊ฐ ์คํ์ด ์๋๋ค๋ฉด ./sonar.sh console
๋ก ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ๋ฌธ์ ํด๊ฒฐ์ ๋์์ด ๋ ์๋ ์๋ค. )

SonarQube Scanner ์ค์น
์์ค๋ฅผ ์ฐ๋์์ผ ์ ์ ๋ถ์์ ํ๊ธฐ ์ํด์๋ SonarQube Scanner ๋ผ๋๊ฒ ํ์ํ๋ค๊ณ ํ๋ค. ์๋ url์์ ๋ค์ด๋ฐ์ ์ ์ ํ ๊ณณ์ ์์ถ์ ํ์ด๋์. https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
$ wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
$ unzip sonar-scanner-cli-3.0.3.778-linux.zip
# jenkins ์ค์น ๋ฐ SonarQube ์ฐ๋
jenkins ์ค์น๋ ๊ฐ๋จํ๋ ๋ณ๋ ์ธ๊ธ์ ์ํ๊ณ ๋์ด๊ฐ…๋ ค๊ณ ํ์ผ๋, ํ๋๋ถํฐ ์ด๊น์ง ์ ๋ฆฌํ๋ค๋ ๋ง์์ผ๋ก~ https://jenkins.io/download/ ์์ ์ต์ ๋ฒ์ ์ tomcat/webapps/ ์๋์ ๋ค์ด๋ฐ๊ณ server.xml ์ ์ ์ ํ๊ฒ ์์ ํด์ค๋ค.
$ wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
$ vi tomcat/conf/server.xml
<Connector port="19001" protocol="HTTP/1.1" # ํฌํธ ๋ณ๊ฒฝ
<Context path="/jenkins" debug="0" privileged="true" docBase="jenkins.war" /> #์ถ๊ฐ
# tomcat/bin/startup.sh
jenkins ์ค์น๋ฅผ ์๋ฃ ํ ํ ํ์ํ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐ๋ก ์ค์นํด์ค๋ค.
- Python Plugin
- GitHub Pull Request Builder
- GitHub plugin
์ ์ : ์๋ฒIP:19001
(์ฐธ๊ณ ๋ก ํ ์๋ฒ์์ ๋ค ์ค์นํ๋ค๋ณด๋ port ์ถฉ๋์ ์ ๊ฒฝ์ฐ๊ฒ๋์๋ค. )
์ฒ์ jenkins๋ฅผ ์คํํ๋ฉด ์ด๋ฐ์ ๋ฐ ์ค์ ์ ํ๋๋ฐ ํน๋ณํ ์ค์ ๋ณ๊ฒฝ์์ด next๋ฒํผ์ ์ฐ์ ๋๋ฌ๋ฉด ์ค์น๊ฐ ์๋ฃ ๋๊ณ , SonarQube๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด SonarQube Scanner for Jenkins
๋ผ๋ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ฃผ์. (์ด๊ฑด ๊ฐ ๋ฒ์ ๋ง๋ค ๊ถํฉ(?)์ด ์๋ง์์๋ ์์ผ๋ ํ์ธ์ด ํ์ํ ์๋ ์๋ค. ๋ด๊ฐ ์ค์นํ ๋ฒ์ ์ jenkins 2.89, SonarQube Plugin 2.6.1์ด๋ค.)
์ค์น๋ฅผ ํ๋ฉด jenkins > configure ์์ SonarQube servers
์ ๋ณด๋ฅผ ๋ฑ๋กํด์ค๋ค.