IntelliJ IDEA Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠΌ ΠΊΠΎΠ΄Π° Java, ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ ΠΎΡΡΠ°Π²ΠΈΠ²ΡΠΈΠΌ Π΄Π°Π»Π΅ΠΊΠΎ ΠΏΠΎΠ·Π°Π΄ΠΈ ΡΠ°ΠΊΠΈΡ
Β«Π²Π΅ΡΠ΅ΡΠ°Π½ΠΎΠ²Β», ΠΊΠ°ΠΊ
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π»ΠΈΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ IDE ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΎΡ Π½ΠΈΡ
ΠΌΠ°Π»ΠΎ ΠΏΠΎΠ»ΡΠ·Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·
Π¨Π°Π³ 1. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ· Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΡΡΡ
ΠΠΎΠ½Π°ΡΠ°Π»Ρ Π·Π°ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ IDE (Π΄Π΅ΡΠΊΡΠΎΠΏΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅!) Π²Π½ΡΡΡΠΈ CI-ΡΠΈΡΡΠ΅ΠΌΡ, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠΎΠΌΠ½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈ ΠΎΡΠ΅Π½Ρ Ρ
Π»ΠΎΠΏΠΎΡΠ½ΠΎΠΉ. Π ΡΡΠ°ΡΡΡΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ IDEA ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ
ΠΠ°ΠΏΡΡΠΊ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΊΡΠΈΠΏΡΠ° bin/inspect.sh
ΠΈΠ· ΡΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ IDEA. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ΅Π±ΡΡΡΡΡ:
- ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ),
- ΠΏΡΡΡ ΠΊ .xml-ΡΠ°ΠΉΠ»Ρ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΉ (ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² .idea/inspectionProfiles/Project_Default.xml),
- ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄ΡΡ ΡΠ»ΠΎΠΆΠ΅Π½Ρ .xml-ΡΠ°ΠΉΠ»Ρ Ρ ΠΎΡΡΡΡΠ°ΠΌΠΈ ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°Ρ Π°Π½Π°Π»ΠΈΠ·Π°.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ
- Π² IDE Π±ΡΠ΄Π΅Ρ Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΏΡΡΡ ΠΊ Java SDK, ΠΈΠ½Π°ΡΠ΅ Π°Π½Π°Π»ΠΈΠ· ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅
jdk.table.xml
Π² ΠΏΠ°ΠΏΠΊΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ IDEA. Π‘Π°ΠΌΠ° Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ IDEA ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π»Π΅ΠΆΠΈΡ Π² Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π½ΠΎ ΡΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°Π½ΠΎ Π² ΡΠ°ΠΉΠ»Π΅idea.properties
. - Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²Π°Π»ΠΈΠ΄Π½ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ IDEA, Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ ΠΏΡΠΈΠ΄ΡΡΡΡ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:
.idea/inspectionProfiles/Project_Default.xml
β Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°, ΠΎΠ½ΠΈ ΡΠ²Π½ΠΎ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΉ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅,.idea/modules.xml
β ΠΈΠ½Π°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ ‘This project contains no modules’,.idea/misc.xml
β ΠΈΠ½Π°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ ‘The JDK is not configured properly for this project’,*.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
ΠΠ½Π°Π»ΠΈΠ· Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΡΡΠ°Π±ΠΎΡΠ°ΡΡ, Π° Π² ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ΅ target/idea_inspections Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ .xml-ΡΠ°ΠΉΠ»Ρ Ρ ΠΎΡΡΡΡΠ°ΠΌΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΎΠΌΠ½Π΅Π½ΠΈΠΉ Π² ΡΠΎΠΌ, ΡΡΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ IDEA ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π² Π»ΡΠ±ΠΎΠΌ CI-ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ, ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊΠΎ Π²ΡΠΎΡΠΎΠΌΡ ΡΠ°Π³Ρ.
Π¨Π°Π³ 2. ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΎΡΡΡΡ
ΠΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ .xml-ΡΠ°ΠΉΠ»ΠΎΠ² β ΠΏΠΎΠ»Π΄Π΅Π»Π°, ΡΠ΅ΠΏΠ΅ΡΡ Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΡΠΈΡΠ°Π΅ΠΌΡΠΌ. Π ΡΠ°ΠΊΠΆΠ΅ Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² quality gates β Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°.
Π ΡΡΠΎΠΌ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ
ΠΠ»Π°Π³ΠΈΠ½ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠ°ΡΡΠ΅ΠΉ:
- ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² (
ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ Π½Π°ΡΠΊΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ ΠΎΡ 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, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ β Β«Ρ
ΡΠ°ΠΏΠΎΠ²ΠΈΠΊΒ» ΠΏΠΎ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅. ΠΠ΅ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Quality Gates Π΄ΠΎΡΡΡΠΏΠ½Π°
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ Π³ΠΎΡΠΎΠ²ΠΈΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», Ρ ΡΠ΅ΡΠΈΠ» ΠΏΠΎΠΈΡΠΊΠ°ΡΡ: Π° Π½Π΅ ΠΏΠΈΡΠ°Π» Π»ΠΈ ΡΠΆΠ΅ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π° ΡΡΡ ΡΠ΅ΠΌΡ Π½Π° Π₯Π°Π±ΡΠ΅? Π― Π½Π°ΡΡΠ» Π»ΠΈΡΡ
ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Jenkins ΠΈΠ»ΠΈ maven-ΠΏΠ»Π°Π³ΠΈΠ½Π° Π½Π΅ΡΡ […] Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, Π»ΡΠ±ΠΎΠΉ ΡΠ½ΡΡΠ·ΠΈΠ°ΡΡ ΠΌΠΎΠ³ Π±Ρ ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡ IDEA Community Edition ΠΈ Jenkins, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π±Ρ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠΈΠ³ΡΠ°Π»ΠΈ.
Π§ΡΠΎ ΠΆΠ΅: ΡΠΏΡΡΡΡ Π΄Π²Π° Π³ΠΎΠ΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ Warnings NG Plugin, ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ ΡΡΠ° Π΄ΡΡΠΆΠ±Π° ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΠ»Π°ΡΡ!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com