IntelliJ IDEA αααααααααααααΆαα§ααααααα·ααΆαααΌα Java αα·αα·ααααααααα·αααααααααα»αααααα αααα»ααααααααΆαααααααΆαα»αααααΆαααΈ "α’ααΈααα»ααααα" ααΌα ααΆ ΠΈ . "ααΆααααα½ααα·αα·ααα" ααΆα αααΎαααααααΆαα·αα·αααααΌααααα»ααα·αααααΆααααααα α αΆααααΈαα ααΆααααααααααααΌααα αΌααααααα α»αααααααΆα
ααααααΆαααΆααααα αααΆαααΆααααααααααΆααα·ααΆαααααΌαααΆααααα αΆααααα αααα»αα ααα»α αααααΆααααΌαααααΆααα IDE ααααα’αααα’αα·αααααα αααααΆααΆααααααααααα·α αα½α αααααΆααααααΎαααΆαα’αα·ααααααα ααΆααα·ααΆααα·αα·αααα ααΆααα αΆαααααΌαααααΆαααΆααααααααα ααααααααααααΆαα½ααααααα ααααα»αααΆα α αΎαααΆαααΆαααααα½ααααααΆααα ααααα·αααΎα αααααααΆααα»αααΆααα·αααααΌαααΆαααααααΆααα ααΆααααΌαααΆαααααΉαααΆ TeamCity CI ααααΌαααΆααα½ααααα αΌαααΆαα½α IDEA α ααα»αααααααααΈααΆα’ααααα·αααααΎ TeamCity ααααα α’αααα’αΆα ααΆαααααααααΎαααΆαααΆααααα½ααα·αα·ααα IDEA αααΆαααΆααααα½ααα αααα»ααααΆαααΈααα CI ααααααααα αααα»αααααΎα±ααα’αααααΎαααΈαααααααααΆα’αΆα ααααΎααΆααααααααΎαααααα·ααΈαααα½α IDEA Community Edition, Jenkins αα·α Warnings NG α
ααα αΆαααΈ 1. ααααΎαααΆαααΆααα·ααΆααα αααα»ααα»αααΊααα αα·αααα½αααΆααααΆαααΆααααα½αα
ααααΌα αααα·αααααΆαααααΎαααΆα IDE (αααααα·ααΈαα»αααααΌααα!) αα ααΆααααα»ααααααααα CI ααααα·αααΆαα ααα»α αααααΆααααααΆα ααα·αα’αΆα ααΎααα αα½αα±αααααααα αα·αααΆααααα αΆααααΆααααΆααα ααΆααααΆαααα’ α’αααα’αα·αααααα IDEA ααΆααααααααΌααααααααΆααααα»αααΆαααααΎαααΆα ΠΈ ααΈαααααΆααααΆααααααααΆα ααΎαααΈααααα ααα ααΎααααΈααααΎαααΆα IDEA αααα»αααααααα ααααααααααααααΆα ααα·ααα·αααααΌαααΆαααΆαααΆααα α αΎααα·α αα ααΆαααΆαααααα’αΆα ααααΌαααΆαα’αα»αααααα ααΎαααΆαααΈααααααααΆααααα’αααααα
ααΆααααα½ααα·αα·αααααααΌαααΆαα
αΆααααααΎααααααααΎααααααΈα bin/inspect.sh ααΈααααα‘αΎα IDEA α αααΆαααΆαααααααααααααΌαααΆαααΊα
- ααααΌααααααααα ααΆαααααααα (ααΆα αααΆαα·αα·αααααΌαααΆαααΆαααα)
- ααααΌααα ααΆααα―αααΆα .xml ααΆαα½αααΉαααΆααααααα’αα·ααΆααα·α αα (ααΆααααααΆααΆαααΈααΆαααα ααΆααααα»ααααααααααα»α .idea/inspectionProfiles/Project_Default.xml),
- ααααΌαααααα ααΆαααααααα―αααΆα .xml αααααΆααααΆαααΆαααααααΈααΈαααααααα·ααΆαααΉαααααΌαααΆααααααΆαα»αα
ααΎαβααΈβαααβαααβααβααααΉαβααΆβααΉαβααΆαβ
- ααααΌααα
ααΆαα Java SDK ααΉαααααΌαααΆαααααααα
ααΆαααααααααα
αααα»α IDE ααΎαα·αααΌα
ααααααααΆααα·ααΆαααΉααα·αααααΎαααΆαααα ααΆααααααααΆαααααααΆααα
αααα»αα―αααΆαααααααα
ααΆαααααααα
jdk.table.xmlαα αααα»αααααααααα ααΆααααααααααα IDEA α ααΆαααααααα ααΆααααααααααα IDEA αααα½αααΆααΆαααΈααΆαααα αααα»αααααααααααα’αααααααΎααΆαααααΆαααΎα ααα»ααααααΈααΆαααααα αα αααα»αα―αααΆαidea.properties. - αααααααααααΆααα·ααΆαααααΌαααααΆαααααα IDEA αααααΆααα»ααααΆα αααα’αααααΉαααααΌαα’αα»ααααα―αααΆααα½αα
ααα½ααααααΆααααααΆαα·αααααΌαααΆαα’αΎααΎα
ααααααΆαααααααααααααα αααααΊα
.idea/inspectionProfiles/Project_Default.xml- ααΆααααααα§ααααααα·ααΆα αα½αααΆα αααΆααααΆααΉαααααΌαααΆαααααΎαα αααααααΎαααΆαααΆααααα½ααα·αα·ααααα αααα»ααα»αααΊαααα.idea/modules.xml- ααΎαα·αααΌα αααααα ααΎαααΉαααα½αααΆαααα α»α 'ααααααααααα·αααΆααααΌαα»α',.idea/misc.xml- ααΎαα·αααΌα αααααα ααΎαααΉαααα½αααΆαααα α»α 'JDK αα·αααααΌαααΆαααααααα ααΆααααααααααααΉαααααΌααααααΆααααααααααα',*.iml-ΡΠ°ΠΉΠ»Ρ- ααΎαα·αααΌα αααααα ααΎαααΉαααα½αααΆαααα α»αα’αααΈ JDK ααααα·αααΆαααααααα ααΆαααααααααα αααα»ααααΌαα»αα
αααααΈααΆα―αααΆαααΆαααααααΆααααααΆααααΌαααΆααααα
αΌααααα»α .gitignoreαα½αααΆαα·αααΆαααααααΆαααΆααααΆααααΆαα½αα
ααααααα·ααααΆαααααα’αααα’αα·ααααααααΆααααΆαααα - αα·αααΌα
α§ααΆα ααα α―αααΆα workspace.xmlαααααΆαααααααααααααααΆαααααααααααΌαααΆααααα»α ααΌα
ααααα αΎααα·αα
αΆαααΆα
αααααΎααΆααα
αααααααααΆαααΆαααααααααΊααααΌαααα ααα αα JDK αα½αααΆαα½αααΉα IDEA Community Edition αα αααα»ααα»αααΊααααα½ααααα»ααααααααααααααααα½α ααΆααααα ααΎααααΈ "ααΆαα" ααΎαααααααααααΆααα·ααΆαα αααααααΎαααΎααα»αααΌαααααΆαααααααααα α αΎααααααΆα’αααΈααα Dockerfile ααααααΎαααΉαααΆαα
Dockerfile
FROM openkbs/ubuntu-bionic-jdk-mvn-py3
ARG INTELLIJ_VERSION="ideaIC-2019.1.1"
ARG INTELLIJ_IDE_TAR=${INTELLIJ_VERSION}.tar.gz
ENV IDEA_PROJECT_DIR="/var/project"
WORKDIR /opt
COPY jdk.table.xml /etc/idea/config/options/
RUN wget https://download-cf.jetbrains.com/idea/${INTELLIJ_IDE_TAR} &&
tar xzf ${INTELLIJ_IDE_TAR} &&
tar tzf ${INTELLIJ_IDE_TAR} | head -1 | sed -e 's//.*//' | xargs -I{} ln -s {} idea &&
rm ${INTELLIJ_IDE_TAR} &&
echo idea.config.path=/etc/idea/config >> idea/bin/idea.properties &&
chmod -R 777 /etc/idea
CMD idea/bin/inspect.sh ${IDEA_PROJECT_DIR} ${IDEA_PROJECT_DIR}/.idea/inspectionProfiles/Project_Default.xml ${IDEA_PROJECT_DIR}/target/idea_inspections -v2αααααααΎαααααΎα idea.config.path ααΎαααΆααααααα±αα IDEA ααααΎαααΆαααααααααααααααΆαα
αααα»αααα―αααΆα /etc/ideaαααααΆαααααααααααααα’αααααααΎαα
αααααααΎααΆααα
αααα»α CI ααΊααΆααΏααα·αα
αααΆααααΆαα α αΎαααΆααΏααα’ααααααΆαααΆαααααα»αα
αααααΆα’αααΈαααα―αααΆααααααΆαα
αααααα
αα»ααααααΎααα
ααΌα
α jdk.table.xmlαααααΆαααααΌααα
ααΆαα OpenJDK αααααΆαααα‘αΎααα
ααΆααααα»ααα»αααΊααα (α―αααΆαααααααααααΆααΈααααααΆαααααα½αααααα’αααααΆαα½αααΉαααΆαααααα IDEA α’αΆα
ααααΌαααΆαααααΆααΌαααααΆα):
jdk.table.xml
<application>
<component name="ProjectJdkTable">
<jdk version="2">
<name value="1.8" />
<type value="JavaSDK" />
<version value="1.8" />
<homePath value="/usr/java" />
<roots>
<annotationsPath>
<root type="composite">
<root url="jar://$APPLICATION_HOME_DIR$/lib/jdkAnnotations.jar!/" type="simple" />
</root>
</annotationsPath>
<classPath>
<root type="composite">
<root url="jar:///usr/java/jre/lib/charsets.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/deploy.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/access-bridge-64.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/cldrdata.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/dnsns.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/jaccess.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/jfxrt.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/localedata.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/nashorn.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/sunec.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/sunjce_provider.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/sunmscapi.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/sunpkcs11.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/zipfs.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/javaws.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/jce.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/jfr.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/jfxswt.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/jsse.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/management-agent.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/plugin.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/resources.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/rt.jar!/" type="simple" />
</root>
</classPath>
</roots>
<additional />
</jdk>
</component>
</application>ααΌαααΆααααααΆααααα αα .
αα»αααααααα ααΎααα·αα·αααααΎαααΆα§ααααααα·ααΆα IDEA αααα»αααααΎαααΆααα αααα»ααα»αααΊαααα
docker run --rm -v <ΠΏΡΡΡ/ΠΊ/Π²Π°ΡΠ΅ΠΌΡ/ΠΏΡΠΎΠ΅ΠΊΡΡ>:/var/project inponomarev/intellij-idea-analyzerααΆααα·ααΆααα½αααααααΎαααΆαααααααααα α αΎαα―αααΆα .xml ααΆα αααΎααααααΆααααΆαααΆααααα·ααΆααα½ααααααα αΆααα αααα»ααααα target/idea_inspectionsα
α₯α‘αΌαααααααααΆαααΆαααΏαααααααααα§ααααααα·ααΆα IDEA α’αΆα ααααΎαααΆαααααααΆααα―ααα αααα»αααα·ααΆααΆα CI ααΆαα½α α αΎαααΎααααααα ααα αΆαααΈααΈαα
ααα αΆα 2. αααα αΆα αα·ααα·ααΆααααΆαααΆααα
ααΆαααα½αααΆααααΆαααΆαααααΆααααααα―αααΆα .xml ααΊααΆαααααααΆααααααααΌαα·α₯α‘αΌαααα α’αααααααΌαααααΎα±ααααΆα’αΆα α’αΆαααΆααααααα»αααα α αΎαααααααααααααΆαα½αααααααΌαααΆαααααΎαα αααα»αα ααααα»αααΆαααααα - αααααα·ααααΆαααααΆαααααααααΆααΎααΆαααααΆααααααΌααααααΆαααα½αααααααααΆααα¬αααΆαααααααα ααΆααααααααα·αα·α αααααα»αααΆαα
αααααΉααα½αααΎα αααααααΌαααΆαα ααααααΆααα αααα»αααααααΆ 2019 α ααΆαα½αααΉαααααααΆαααααααΆ αααααα·ααΈαααα½ααα»ααααααΆα αααΎααααααΆααααααΎααΆαααΆαα½αααααααααΆααα·ααΆααα·αα·αααααα αααα»α Jenkins (CheckStyle, FindBugs, PMD ααα) α₯α‘αΌααααααααΌαααΆααααααΆααααΆαααααααΎα αΎαα
αααααα·ααΈαααα½αααΆαααΈααααααα
- α’ααααααααΌαααΆαα’ααααα·ααΆαααΆα αααΎα ( αα½ααααα αΌαααΆααα’ααααα·ααΆαααΆααα’αααααααααΆααααΈαα·ααααΆααΆαααααααΈ AcuCobol αα ZPT Lint)
- αααααα·ααΈααΎααααΆαααΆααααααα½ααααααΆαααα½αααα
αααααΈααα’αααΈααα Warnings NG α’αΆα αα·ααΆααα½αααΆαααΆααααααΆαααΈαααααα·ααΈα ααααα Java αα·αααΆααααααΆαααΈαααααα ααα»ααααα·ααααα· Mavenα αααααΈααΆαα½αααΆα’αΆα ααΎαααΎαα₯ααααααααααα αα½αααΆααααααααΌαααΆααα·ααΆαααΆαα·αααααΆααα αααΆαααΆααααααα IntelliJ IDEA ααααααΌαααΆααααα αΌααααα»ααααααΈαααααααααααα½αααααΆαααααααα
αααααΆααααααα·ααΈαααα½αααΊααααΈ ααΈααααΌαααΆααΆαα’ααααααααααα’ααΆαα½α Jenkins Pipelineα ααα αΆαβαααααΎαβαααβααΆαβααΆαβα αΌαβαα½αβααααβααΆβααΉαβααΎαβαα βααΌα βααα (ααΎαβααααΆααβααβααααΆααβαααααα·ααΈβαααα½αβααΆβααΎβααααααβαααΆαααΆαααβααΆβαααβααΎαβααα½αβααααΆαα αα·αβα―αααΆαβααΆβααααβαα½αβααααΌαβααΆαβααααα)α
stage ('Static analysis'){
sh 'rm -rf target/idea_inspections'
docker.image('inponomarev/intellij-idea-analyzer').inside {
sh '/opt/idea/bin/inspect.sh $WORKSPACE $WORKSPACE/.idea/inspectionProfiles/Project_Default.xml $WORKSPACE/target/idea_inspections -v2'
}
recordIssues(
tools: [ideaInspection(pattern: 'target/idea_inspections/*.xml')]
)
}α ααα»α αααααΆαααααΆαααΆαααααΎααα ααΌα αααα

ααΆααααα½α α ααα»α αααααΆαααααααΊααΆαααααααααΆααααααααΆααα’ααααα·ααΆααααααα½αααααΆααααΆααα’ααα ααΆααΆαααααΆααααΆαα’ααααααααααααΆαα ααα αΆαααΆααααααααααΆααααααα αα·αααααΆα αααααααααΆαα»ααααααΆαααααΆααααααΌαα ααα½αααααΆαααααΎαα α’αααα’αΆα ααααΎααΆαααααααααα αααα αααα»ααααα‘αΆα αααααααα αααααααΆαααααααααααααα ααΏααααα½ααααααααα·αααααΎαααΆαααααΉαααααΌααααααΆααααΆααααα½ααα·αα·ααα IDEA ααΊαααααααΆααααα»αααΆαααααΎαααΌααααααααΆαααα αααα»α Jenkins (αααααΈααΆαααααΆαααααΆαααΆαααααααααααα§ααΆα ααα Checkstyle αααααα·ααΈαααα½ααααα’αΆα ααααΎααΆααΆααααΆααααααααα’αΆα)α ααΆααΎααα ααΌα ααΆαααααΊααΆααα α»ααα αααα»ααααααα·ααΈααααααΆαααΆααα IDEA αααααααΌαααΆααα½ααα»αα
αααα»αα αααααααααααα·ααααααα Warnings NG ααΊαααααααΆααααα»αααΆααααααΌααααα»αααΆαααααΎαααΈαααααααααααααααΆαα αααα»ααααΆαααΆααααα½α αα·ααααααα·ααΈ Quality Gates αα½αααΆαα "ratchet" αααααΆααααΆααα½αααααα»αααααΆααΆα―αααΆααααα ααΆαα―αααΆαααααααααααα·ααΈ Quality Gates αα½αα ααα½α - ααααααΆαααΆαααααααΆαα·ααααααααα α αΎαα’αααααααΌαααΎαααΌααααααα αααααΆααα·αααα αααααΆααααΆααααααααααααΆαααααα»αααΎα’αααΈααααααα»αααΎαα‘αΎα βαααααααβ α’αΆα ααααΌαααΆαα’αα»αααααααα―αααΆααα (ααΌαααΎααααααααα»α α’αααΈαααααΆαααααα) α
ααα ααααΈααααα·ααααΆα
αα»αααΉαα αΆααααααΎααααα ααααααΆααααα αααα»αααΆααααααα α α·ααααααααααα ααΎααΆαααααΆααααΆααααΆααααααααΎαααααΆααααααααΎHabre αα½α α αΎαα¬αα ? αααα»αααΆαααααΎαααααα»ααααα Ρ αααααΆαααααααααααΆαααα·ααΆαααΆ:
ααΆαααααααα»αααΉα αα·αααΆαααΆααα½ααααα αΌαααΆαα½α Jenkins α¬αααααα·ααΈαααα½α maven [β¦] ααΆαααααΆααα α’αααα αΌαα α·αααααΆαα½αα’αΆα αααααΎααα·αααααΆαα½α IDEA Community Edition αα·α Jenkins ααα»αααααΆα αααΎαααΉαααα½αααΆαα’αααααααααααααΈααΏααααααα»αααααα
ααΆααΆααααααΎαααΆαα ααΈαααααΆαααααααα ααΎαααΆααααααα·ααΈ Warnings NG Plugin α αΎαααΈαααα»ααα·αααααΆααααααΆααααααα ααα αΎα!
ααααα: www.habr.com
