ื”ืคืขืœ IntelliJ IDEA Inspections ืขืœ Jenkins

ืœ- 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 ืœืชื•ืš ืงื•ื ื˜ื™ื™ื ืจ ื‘ืฆื•ืจื” ืžื•ื›ื ื” ืœ"ืžื—ื•ืจืจ" ืขืœ ื”ืคืจื•ื™ืงื˜ื™ื ื”ืžื ื•ืชื—ื™ื. ื‘ื•ืื• ื ื‘ื—ืจ ืžื™ื›ืœ ื‘ืกื™ืก ืžืชืื™ื, ื•ื–ื” ืžื” ื™ื”ื™ื” ื”-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>

ื”ืชืžื•ื ื” ื”ืžื•ื’ืžืจืช ื–ืžื™ืŸ ื‘- Docker Hub.

ืœืคื ื™ ืฉื ืžืฉื™ืš, ื‘ื•ืื• ื ื‘ื“ื•ืง ืฉื”ื ืชื— ืฉืœ IDEA ืคื•ืขืœ ื‘ืžื™ื›ืœ:

docker run --rm -v <ะฟัƒั‚ัŒ/ะบ/ะฒะฐัˆะตะผัƒ/ะฟั€ะพะตะบั‚ัƒ>:/var/project inponomarev/intellij-idea-analyzer

ื”ื ื™ืชื•ื— ืืžื•ืจ ืœืคืขื•ืœ ื‘ื”ืฆืœื—ื”, ื•ืงื•ื‘ืฆื™ XML ืจื‘ื™ื ืขื ื“ื•ื—ื•ืช ืžื ืชื— ืฆืจื™ื›ื™ื ืœื”ื•ืคื™ืข ื‘ืชื™ืงื™ื™ืช ื”ืžืฉื ื” target/idea_inspections.

ื›ืขืช ืื™ืŸ ื™ื•ืชืจ ืกืคืง ืฉื ื™ืชืŸ ืœื”ืคืขื™ืœ ืืช ืžื ืชื— ื”-IDEA ื‘ืื•ืคืŸ ืขืฆืžืื™ ื‘ื›ืœ ืกื‘ื™ื‘ืช CI, ื•ืื ื—ื ื• ืขื•ื‘ืจื™ื ืœืฉืœื‘ ื”ืฉื ื™.

ืฉืœื‘ 2. ื”ืฆื’ ื•ื ืชื— ืืช ื”ื“ื•ื—

ืงื‘ืœืช ื”ื“ื•ื— ื‘ืฆื•ืจื” ืฉืœ ืงื•ื‘ืฆื™ โ€Ž.xml ื”ื™ื ื—ืฆื™ ื”ืขื‘ื•ื“ื”; ื›ืขืช ืขืœื™ืš ืœื”ืคื•ืš ืื•ืชื• ืœืงืจื™ืื” ืื ื•ืฉื™ืช. ื•ื’ื ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ืชื•ืฆืื•ืช ืฉืœื• ื‘ืฉืขืจื™ ืื™ื›ื•ืช - ื”ื”ื™ื’ื™ื•ืŸ ืœืงื‘ื™ืขื” ื”ืื ื”ืฉื™ื ื•ื™ ื”ืžืงื•ื‘ืœ ืขื•ื‘ืจ ืื• ื ื›ืฉืœ ืœืคื™ ืงืจื™ื˜ืจื™ื•ื ื™ ืื™ื›ื•ืช.

ื–ื” ื™ืขื–ื•ืจ ืœื ื• ืชื•ืกืฃ Jenkins Warnings NG, ืืฉืจ ืฉื•ื—ืจืจ ื‘ื™ื ื•ืืจ 2019. ืขื ื”ื•ืคืขืชื•, ืชื•ืกืคื™ื ื‘ื•ื“ื“ื™ื ืจื‘ื™ื ืœืขื‘ื•ื“ื” ืขื ืชื•ืฆืื•ืช ื ื™ืชื•ื— ืกื˜ื˜ื™ ื‘ื’'ื ืงื™ื ืก (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')]
    )
}

ืžืžืฉืง ื”ื“ื•ื—ื•ืช ื ืจืื” ื›ืš:

ื”ืคืขืœ IntelliJ IDEA Inspections ืขืœ Jenkins

ื‘ืื•ืคืŸ ื ื•ื—, ืžืžืฉืง ื–ื” ื”ื•ื ืื•ื ื™ื‘ืจืกืœื™ ืขื‘ื•ืจ ื›ืœ ื”ื ืชื—ื™ื ื”ืžื•ื›ืจื™ื. ื”ื•ื ืžื›ื™ืœ ืชืจืฉื™ื ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ ืฉืœ ื”ืชืคืœื’ื•ืช ื”ืžืžืฆืื™ื ืœืคื™ ืงื˜ื’ื•ืจื™ื•ืช ื•ื’ืจืฃ ืฉืœ ื”ื“ื™ื ืžื™ืงื” ืฉืœ ืฉื™ื ื•ื™ื™ื ื‘ืžืกืคืจ ื”ืžืžืฆืื™ื. ื ื™ืชืŸ ืœื‘ืฆืข ื—ื™ืคื•ืฉ ืžื”ื™ืจ ื‘ืจืฉืช ื‘ืชื—ืชื™ืช ื”ืขืžื•ื“. ื”ื“ื‘ืจ ื”ื™ื—ื™ื“ ืฉืœื ืขื‘ื“ ื ื›ื•ืŸ ืขื‘ื•ืจ ื‘ื“ื™ืงื•ืช IDEA ื”ื™ื” ื”ื™ื›ื•ืœืช ืœื’ืœื•ืฉ ื‘ืงื•ื“ ื™ืฉื™ืจื•ืช ื‘ื’'ื ืงื™ื ืก (ืื ื›ื™ ืขื‘ื•ืจ ื“ื•ื—ื•ืช ืื—ืจื™ื, ืœืžืฉืœ Checkstyle, ื”ืชื•ืกืฃ ื”ื–ื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื–ืืช ื‘ืฆื•ืจื” ื™ืคื”). ื ืจืื” ืฉื–ื” ื‘ืื’ ื‘ืžื ืชื— ื”ื“ื•ื—ื•ืช ืฉืœ IDEA ืฉืฆืจื™ืš ืœืชืงืŸ.

ื‘ื™ืŸ ื”ืžืืคื™ื™ื ื™ื ืฉืœ Warnings NG ื”ื™ื ื”ื™ื›ื•ืœืช ืœืฆื‘ื•ืจ ืžืžืฆืื™ื ืžืžืงื•ืจื•ืช ืฉื•ื ื™ื ื‘ื“ื•ื— ืื—ื“ ื•ืœืชื›ื ืช ืฉืขืจื™ ืื™ื›ื•ืช, ื›ื•ืœืœ "ืžื—ื’ืจ" ืขื‘ื•ืจ ืžื›ืœื•ืœ ื”ืขื–ืจ. ื—ืœืง ืžื”ืชื™ืขื•ื“ ืœืชื›ื ื•ืช Quality Gates ื–ืžื™ืŸ ื›ืืŸ - ืขื ื–ืืช, ื–ื” ืœื ืฉืœื, ื•ืืชื” ืฆืจื™ืš ืœื”ืกืชื›ืœ ืขืœ ืงื•ื“ ื”ืžืงื•ืจ. ืžืฆื“ ืฉื ื™, ืœืฉืœื™ื˜ื” ืžืœืื” ืขืœ ื”ืžืชืจื—ืฉ, ื ื™ืชืŸ ืœื™ื™ืฉื ืืช ื”"ืžื—ื’ืจ" ื‘ืื•ืคืŸ ืขืฆืžืื™ (ืจืื” ืฉืœื™ ืคื•ืกื˜ ืงื•ื“ื ืขืœ ื ื•ืฉื ื–ื”).

ืžืกืงื ื”

ืœืคื ื™ ืชื—ื™ืœืช ื”ื›ื ืช ื”ื—ื•ืžืจ ื”ื–ื”, ื”ื—ืœื˜ืชื™ ืœื—ืคืฉ: ืžื™ืฉื”ื• ื›ื‘ืจ ื›ืชื‘ ืขืœ ื”ื ื•ืฉื ื”ื–ื” ื‘-Habrรฉ? ืจืง ืžืฆืืชื™ ืจืื™ื•ืŸ 2017 ั ืœืื ื™ืฉื‘ื• ื”ื•ื ืื•ืžืจ:

ืขื“ ื›ืžื” ืฉื™ื“ื•ืข ืœื™, ืื™ืŸ ืื™ื ื˜ื’ืจืฆื™ื” ืขื Jenkins ืื• ืชื•ืกืฃ Maven [โ€ฆ] ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ื›ืœ ื—ื•ื‘ื‘ ื™ื›ื•ืœ ืœื”ืชื™ื™ื“ื“ ืขื IDEA Community Edition ื•-Jenkins, ืจื‘ื™ื ืจืง ื™ืจื•ื•ื™ื—ื• ืžื›ืš.

ื•ื‘ื›ืŸ, ืฉื ืชื™ื™ื ืœืื—ืจ ืžื›ืŸ ื™ืฉ ืœื ื• ืชื•ืกืฃ ืื–ื”ืจื•ืช NG, ื•ืกื•ืฃ ืกื•ืฃ ื”ื™ื“ื™ื“ื•ืช ื”ื–ื• ื™ืฆืื” ืœืคื•ืขืœ!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”