ื- IntelliJ IDEA ืืืื ืืฉ ืืช ืื ืชื ืืงืื ืืกืืื ืฉื Java ืืกืืื ืืืชืงืื ืืืืชืจ, ืืฉืจ ืืืืืืืชืื ืืฉืืืจ ืืจืืง ืืืืืจ "ืืชืืงืื" ืืื
ืขื ืืืช, ืื ืขืื ืชืืฆืืืช ืื ืืชืื ืืืฆืืืช ืจืง ืืืืฉืง ืืืงืืื ืฉื ื-IDE ืฉื ืืืคืชื, ืื ืืืขืืืืช ืืขื ืืชืืืื ืืคืืชืื. ื ืืชืื ืกืืื
ืฉืื 1. ืืคืขื ืืช ืื ืืชืื ืืงืื ืืืื ืจ ืืงืื ืืื
ืืืชืืื, ืืจืขืืื ืฉื ืืคืขืืช IDE (ืืืฉืื ืฉืืืื ืขืืืื!) ืืชืื ืืขืจืืช CI ืฉืืื ืื ืืืฉืง ืืจืคื ืขืฉืื ืืืืจืืืช ืืคืืงืคืง ืืืืื ืืขืืืชื. ืืืจืื ืืืื, ืืคืชืื 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 ืืชืื ืงืื ืืืื ืจ ืืฆืืจื ืืืื ื ื"ืืืืจืจ" ืขื ืืคืจืืืงืืื ืืื ืืชืืื. ืืืื ื ืืืจ ืืืื ืืกืืก ืืชืืื, ืืื ืื ืืืื ื-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 ืืื ืืฆื ืืขืืืื; ืืขืช ืขืืื ืืืคืื ืืืชื ืืงืจืืื ืื ืืฉืืช. ืืื ืืฉ ืืืฉืชืืฉ ืืชืืฆืืืช ืฉืื ืืฉืขืจื ืืืืืช - ืืืืืืื ืืงืืืขื ืืื ืืฉืื ืื ืืืงืืื ืขืืืจ ืื ื ืืฉื ืืคื ืงืจืืืจืืื ื ืืืืืช.
ืื ืืขืืืจ ืื ื
ืืชืืกืฃ ืืืจืื ืืฉื ื ืืืงืื:
- ืืกืคืจ ืจื ืฉื ืืืกืคื ืืืืขืืช ืื ืชื (
ืจืฉืืื ืืืื ืืืื ืืช ืื ืื ืชืืื ืืืืืจืื ืืืืข ื- 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 ืืื ืืืืืืช ืืืืืฉ ืืงืื ืืฉืืจืืช ืื'ื ืงืื ืก (ืื ืื ืขืืืจ ืืืืืช ืืืจืื, ืืืฉื Checkstyle, ืืชืืกืฃ ืืื ืืืื ืืขืฉืืช ืืืช ืืฆืืจื ืืคื). ื ืจืื ืฉืื ืืื ืืื ืชื ืืืืืืช ืฉื IDEA ืฉืฆืจืื ืืชืงื.
ืืื ืืืืคืืื ืื ืฉื Warnings NG ืืื ืืืืืืช ืืฆืืืจ ืืืฆืืื ืืืงืืจืืช ืฉืื ืื ืืืื ืืื ืืืชืื ืช ืฉืขืจื ืืืืืช, ืืืื "ืืืืจ" ืขืืืจ ืืืืื ืืขืืจ. ืืืง ืืืชืืขืื ืืชืื ืืช Quality Gates ืืืื
ืืกืงื ื
ืืคื ื ืชืืืืช ืืื ืช ืืืืืจ ืืื, ืืืืืชื ืืืคืฉ: ืืืฉืื ืืืจ ืืชื ืขื ืื ืืฉื ืืื ื-Habrรฉ? ืจืง ืืฆืืชื
ืขื ืืื ืฉืืืืข ืื, ืืื ืืื ืืืจืฆืื ืขื Jenkins ืื ืชืืกืฃ Maven [โฆ] ืืืืคื ืขืงืจืื ื, ืื ืืืื ืืืื ืืืชืืืื ืขื IDEA Community Edition ื-Jenkins, ืจืืื ืจืง ืืจืืืืื ืืื.
ืืืื, ืฉื ืชืืื ืืืืจ ืืื ืืฉ ืื ื ืชืืกืฃ ืืืืจืืช NG, ืืกืืฃ ืกืืฃ ืืืืืืืช ืืื ืืฆืื ืืคืืขื!
ืืงืืจ: www.habr.com