ááá±á· IntelliJ IDEA ááœááºá¡ááá·áºááŒáá·áºáá¯á¶áž static Java áá¯ááºááœá²ááŒááºážá
áááºááŒá¬áá°ááŸáááŒá®ážá áááºážááœááºáááºážáá
áœááºážáá±á¬ááºááá¯ááºááŸá¯áá»á¬ážááœááºááá¯áá²á·ááá¯á·áá±á¬ "á
á
áºááŒááºáá»á¬áž" ááá±á¬ááºááœááºáá»á¬ážá
áœá¬áá»ááºááŸááá±áá«áááºá
ááá¯á·áá±á¬áºáááºážá ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯ááááºáá»á¬ážááẠdeveloper á IDE á local interface ááœááºáá¬ááŒááá±ááá»áŸáá¬ááááºáá¯á¶áž áááºážááá¯á·ááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáááºážá
ááºá¡ááœáẠá¡áá¯á¶ážáááºážáá«áááºá á¡ááŒáááºááá±
á¡ááá·áº 1. ááœááºááááºáá¬ááœáẠááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠáá¯ááºáá±á¬ááºááŒá®áž á¡á á®áááºáá¶á á¬áá áºáᯠááá°áá«á
á¡á
ááá¯ááºážááœááºá ááááºáá
áºá¡ááºáá¬áá±á·á
áºááá«áá±á¬ CI á
áá
áºá¡ááœááºáž IDE (áááºá
áºáá±á¬á·á¡ááá®áá±ážááŸááºáž) ááᯠrun áááºá
áááºáá°ážáááºáá¶ááááŒá
áºááœááºááŸáááŒá®ážá¡ááœááºáá¯áá¹ááá±ážááá¯ááºáááºá áá¶áá±á¬ááºážáá±á¬ááºáá
áœá¬á IDEA developer áá»á¬ážááẠáá¯ááºáá±á¬ááºááá¯ááºá
áœááºážááᯠáá¶á·ááá¯ážáá±ážáá¬ážáááºá
script ááá¯á¡áá¯á¶ážááŒá¯á á
á
áºáá±ážááŸá¯áá»á¬ážááᯠá
áááºáááºá bin/inspect.sh
IDEA áááºáááºááŸá¯áááºážááœáŸááºááŸá ááá¯á¡ááºáá±á¬ ááá·áºáááºáá»ááºáá»á¬ážááŸá¬-
- ááá±á¬áá»ááºááá¯á· áááºážááŒá±á¬ááºážá¡ááŒáá·áº (ááœá±áá»áá¯ážáá»á¬ážááᯠáá¶á·ááá¯ážááá±ážáá«)á
- á á áºáá±ážááŒááºážáááºáááºáá»á¬ážáá«ááŸááá±á¬ .xml ááá¯ááºááá¯á· áááºážááŒá±á¬ááºáž (áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááá±á¬áá»ááºá¡ááœááºážááœááºááŸááá±á¬ .idea/inspectionProfiles/Project_Default.xml)á
- ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááááºáá»á¬ážá¡áá±á«áº á¡á á®áááºáá¶á á¬áá»á¬ážáá«ááŸááá±á¬ .xml ááá¯ááºáá»á¬ážááᯠááááºážáááºážáá¬ážááá·áº ááá¯ááºááœá²ááá¯á· áááºážááŒá±á¬ááºážá¡ááŒáá·áºá¡á á¯á¶á
ááá¯á·á¡ááŒáẠáá»áŸá±á¬áºááá·áºáá¬ážáááºá
- Java SDK ááá¯á·áááºážááŒá±á¬ááºážááᯠIDE ááœáẠconfigure áá¯ááºáááºá ááá¯ááºáá«á ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯ á¡áá¯ááºááá¯ááºáá«á á€áááºáááºáá»á¬ážááᯠááœá²á·á
ááºážááŸá¯ááá¯ááºááœáẠáá«ááŸááááºá
jdk.table.xml
IDEA ááá¹áá¬áá¯á¶ážááá¯ááºáá¬ááœá²á·á ááºážáá¯á¶ááá¯ááºááœá²ááœááºá IDEA ááá¹áá¬áá¯á¶ážááá¯ááºáá¬áá¯á¶á á¶ááœá²á·á ááºážááŸá¯ááá¯ááºááá¯ááºá á¡áá¯á¶ážááŒá¯áá°ááááºááááºážááœáŸááºááœáẠáá°áááºážá¡ááá¯ááºážáááºááŸááá±á¬áºáááºáž á€áááºáá±áá¬ááŒá áºáááºáá¡ááá¡áááºážáááºááŸááºááá¯ááºáááºá ááá¯ááºáá²ááŸá¬idea.properties
. - ááœá²ááŒááºážá
áááºááŒá¬áá¬ážáá±á¬ ááá±á¬áá»ááºááẠááŸááºáááºáá±á¬ IDEA ááá±á¬áá»ááºááŒá
áºááááºá áááºážááŸá¬ áá¬ážááŸááºážááááºážáá»á¯ááºááŸá¯ááᯠáá»á
áºáá»á°ááŸá¯áá¬ážááá·áº ááá¯ááºá¡áá»áá¯á·ááᯠáááºáá¯ááºáá±á¬ááºááááºááŒá
áºááŒá®ážá ááá¯ááá¯áááºááŸá¬-
.idea/inspectionProfiles/Project_Default.xml
â ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áááºáááºáá»á¬ážááᯠááœááºááááºáá¬á¡ááœááºáž á á áºáá±ážááŸá¯áá»á¬áž áá¯ááºáá±á¬ááºáá±á¬á¡áá«ááœáẠáááºážááá¯á·ááᯠáááá¬áááºááŸá¬ážá áœá¬á¡áá¯á¶ážááŒá¯ááá¯ááºáááºááŒá áºáááºá.idea/modules.xml
- ááá¯ááºáá«á 'á€ááá±á¬áá»ááºááœáẠáá±á¬áºáá»á°ážáá»á¬áž ááá«ááŸá' áá°áá±á¬ á¡ááŸá¬ážááᯠáá»áœááºá¯ááºááá¯á· áááŸááááá·áºáááºá.idea/misc.xml
- ááá¯ááºáá«á 'JDK ááᯠá€ááá±á¬áá»ááºá¡ááœáẠááŸááºáááºá áœá¬ ááááºááŸááºáá¬ážáá«' áá°áá±á¬ á¡ááŸá¬ážááᯠáá»áœááºá¯ááºááá¯á· áááŸááááá·áºáááºá*.iml-ÑайлÑ
â ááá¯ááºáá«á module ááœáẠconfigured unconfigured 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
option ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá idea.config.path
áá»áœááºá¯ááºááá¯á·ááẠIDEA ááá¯áá«ááœáẠáááºážá ááá¹áá¬áá¯á¶ážááá¯ááºáá¬ááœá²á·á
ááºážáá¯á¶ááᯠááŸá¬ááœá±ááẠá¡áááºážá¡ááŒáẠááá¡á¬ážáá±ážáá²á·áááºá /etc/idea
CI ááœááºá¡áá¯ááºáá¯ááºáá±á¬á¡áá«á¡áá¯á¶ážááŒá¯áá°á home folder áááºááá±áá»á¬áá±á¬á¡áá¬ááŒá
áºááŒá®ážáááŒá¬áááá¯á¶ážááá»ááºááœááºáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá
á€á¡áá¬ááẠááœááºááááºáá¬ááá¯á· áá°ážáá°áá¬ážáá±á¬ ááá¯ááºááŸáá·áº áá¯á¶ááá¹áá¬ááºáá°áááº- 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 ááá¯ááºá¡áá»á¬ážá¡ááŒá¬ážááẠáá áºááŸááº/idea_inspections ááá¯ááºááœá²ááœá²ááœáẠáá±á«áºáá¬ááá·áºáááºá
ááá¯á¡áá«ááœáẠIDEA ááœá²ááŒááºážá áááºááŒá¬áá°ááẠáááºááá·áº CI áááºáááºážáá»ááºááœááºáááᯠáá®ážááŒá¬ážáá¯ááºáá±á¬ááºááá¯ááºáááºááᯠáá¶áááááŸááá±á¬á·áá²á áá»áœááºá¯ááºááá¯á·ááẠáá¯áááá¡ááá·áºááá¯á· áááºááœá¬ážáá«áááºá
á¡ááá·áº 2. á¡á á®áááºáá¶á á¬ááá¯ááŒáááŒá®áž ááœá²ááŒááºážá áááºááŒá¬áá«á
.xml ááá¯ááºáá»á¬ážáá¯á¶á á¶ááŒáá·áº á¡á á®áááºáá¶á á¬ááᯠááá°ááŒááºážááẠááá¯ááºááœá²á áááºáááºááŒá áºáááºá ááᯠáááºááẠáááºážááᯠáá°áá¬ážáá»á¬áž áááºááá¯ááºá á±ááẠááá¯á¡ááºáááºá áááºážá¡ááŒáẠáááºážáááááºáá»á¬ážááᯠá¡áááºá¡ááœá±áž ááááºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááá·áºááẠ- áááºáá¶áá¬ážáá±á¬ ááŒá±á¬ááºážáá²ááŸá¯ááẠá¡áááºá¡ááœá±ážáááºááŸááºáá»ááºáá»á¬ážá¡ááá¯ááºáž ááŒááºáááºážááŒááºáž ááá¯á·ááá¯áẠáá»ááŸá¯á¶ážááŒááºážááŸááááŸá áá¯á¶ážááŒááºááŒááºážá¡ááœáẠáá¯áá¹áááá±áááŒá áºáááºá
áá«á áá«ááá¯á·ááᯠáá°áá®áááá·áºáááºá
ááááºá¡ááºááœáẠá¡ááá¯ááºážááŸá áºááá¯ááºáž áá«áááºáááº-
- áá»á¬ážááŒá¬ážááŸáá±á¬ ááœá²ááŒááºážá
áááºááŒá¬áá° áááºáá±á·áá»áºá
á¯áá±á¬ááºážáá°áá»á¬áž (
á¡ááŒááºá·á¡áá á¬áááºáž AcuCobol á០ZPT Lint á០áááá¹áá¶ááá¬á¡á ááááŸááá¬ážáá±á¬ ááœá²ááŒááºážá áááºááŒá¬áá°á¡á¬ážáá¯á¶áž áá«áááºáááºá - áááºážááá¯á·á¡á¬ážáá¯á¶ážá¡ááœáẠá¡á á®áááºáá¶á á¬ááŒáá·áºááŸá¯áá°áá áºáá¯áááºážá
Warnings NG ááœááºááœá²ááŒááºážá áááºááŒá¬ááá¯ááºááá·áºá¡áá¬áá»á¬ážá á¬áááºážááœáẠJava compiler ááŸááááá±ážáá»ááºáá»á¬ážááŸáá·áº 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')]
)
}
á¡á á®áááºáá¶á ᬠá¡ááºáá¬áá±á·á áºááẠá€áá²á·ááá¯á· ááŒá áºáááº-
á¡áááºááŒá±á áœá¬á á€á¡ááºáá¬áá±á·á áºááẠá¡ááá¡ááŸááºááŒá¯áá¬ážáá±á¬ááœá²ááŒááºážá áááºááŒá¬áá°á¡á¬ážáá¯á¶ážá¡ááœáẠuniversal ááŒá áºáááºá áááºážááœáẠá¡áá»áá¯ážá¡á á¬ážá¡ááá¯áẠááŸá¬ááœá±ááŸá¯ááŒáá·áºáá±ááŒááºážá á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯áá¯á¶á á¶áá áºáá¯ááŸáá·áº ááœá±á·ááŸáááŸá¯á¡áá±á¡ááœááºááœáẠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá ááá¯ááºááá áºááááºáá áºáá¯áá«ááŸááááºá á á¬áá»ááºááŸá¬áá¡á±á¬ááºááŒá±ááŸá ááá¬ážááœááºááœáẠá¡ááŒááºááŸá¬ááœá±ááá¯ááºáááºá IDEA á á áºáá±ážááŒááºážá¡ááœáẠááŸááºáááºá áœá¬á¡áá¯ááºááá¯ááºáá±á¬ áá áºáá¯áááºážáá±á¬á¡áá¬ááŸá¬ Jenkins ááœáẠáá¯ááºááᯠááá¯ááºááá¯ááºááŒáá·áºááŸá¯ááá¯ááºááẠ(á¡ááŒá¬ážá¡á á®áááºáá¶á á¬áá»á¬ážá¡ááœáẠá¥ááᬠCheckstyle ááŒá áºáá±á¬áºáááºážá á€ááááºá¡ááºááẠáááºážááᯠááŸáá áœá¬áá¯ááºáá±á¬ááºááá¯ááºáááº)á áááºážááẠááŒá¯ááŒááºáááºááá¯á¡ááºááá·áº IDEA á¡á á®áááºáá¶á á¬áá«áá¬áá¬ááŸá áá»áœááºááœááºážáá»ááºáá áºáá¯ááŒá áºáááºá
Warnings NG áá¡ááºá¹áá«áááºáá»á¬ážáá²ááœáẠááá°áá®áá±á¬áááºážááŒá
áºáá»á¬ážá០ááœá±á·ááŸááá»ááºáá»á¬ážááᯠá¡á
á®áááºáá¶á
á¬áá
áºáá¯ááŸáá·áº áááá¯ááááºá¡áááºá¡ááœá±ážááááºáá
áºáá¯ááœáẠá
á¯á
ááºážááá¯ááºáááºá áááºááœáŸááºážá
á¯áá±ážááŸá¯á¡ááœáẠ"ratchet" áá
áºáá¯á¡áá«á¡áááºááŒá
áºáááºá Quality Gates áááá¯ááááºáá±ážáá¬ážááŒááºážááá¯ááºáᬠá
á¬ááœááºá
á¬áááºážá¡áá»áá¯á·ááᯠáááŸáááá¯ááºáá«áááºá
áá±á¬ááºáá»ááº
á€á¡ááŒá±á¬ááºážá¡áá¬ááᯠáááŒááºáááºáá®ááœáẠáá»áœááºá¯ááºááŸá¬ááœá±ááẠáá¯á¶ážááŒááºáá²á·áááº- Habré ááœáẠá€á¡ááŒá±á¬ááºážá¡áá¬ááᯠáá
áºá
á¯á¶áá
áºáá±á¬ááºá០áá±ážááŒá®ážááŒá®áá¬ážá áá«áá¬ááœá±á·áááºá
áá»áœááºá¯ááºááááá±á¬ááºá Jenkins ááá¯á·ááá¯áẠmaven plugin ááŸáá·áº áá±á«ááºážá ááºážáá¬ážááŒááºáž áááŸááá« [âŠ] áá°á¡á¬ážááŒáá·áºá á áááºá¡á¬ážáááºáááºáá° áááºáá°áááᯠIDEA Community Edition ááŸáá·áº Jenkins ááŸáá·áº ááááºááœá±ááœá²á·ááá¯ááºáááºá áá»á¬ážá áœá¬áá±á¬áá°ááá¯á·ááẠá€á¡áá¬ááŸáá¬áá»áŸáẠá¡áá»áá¯ážááŸááááºááŒá áºáááºá
áá±á¬ááºážááŒá®á ááŸá áºááŸá áºá¡ááŒá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááœáẠWarnings NG Plugin ááŸááááºá áá±á¬ááºáá¯á¶ážááœáẠá€áá»á áºááŒááºáááºážááŸá®ážááŸá¯ááẠááŒá áºááœááºážáá¬áá«áááºá
source: www.habr.com