ืคืœื™ืกื ื“ื™ืง IntelliJ IDEA ื™ื ืกืคึผืขืงืฉืึทื ื– ืื•ื™ืฃ Jenkins

IntelliJ IDEA ื”ืื˜ ื”ื™ื™ึทื ื˜ ื“ื™ ืžืขืจืกื˜ ืึทื•ื•ืึทื ืกื™ืจื˜ืข ืกื˜ืึทื˜ื™ืง ื–'ืื‘ื ืงืึธื“ ืึทื ืึทืœื™ื–ืขืจ, ื•ื•ืึธืก ืื™ืŸ ื–ื™ื™ืŸ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืœืึธื–ืŸ ื•ื•ื™ื™ึทื˜ ื”ื™ื ื˜ืขืจ ืึทื–ืึท "ื•ื•ืขื˜ืขืจืึทื ืก" ื•ื•ื™ ื˜ืฉืขืงืกื˜ื™ื™ืœ ะธ Spotbugs. ื“ื™ ืคื™ืœืข "ื™ื ืกืคึผืขืงืฉืึทื ื–" ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ืขื ืงืึธื“ ืื™ืŸ ืคืึทืจืฉื™ื“ืŸ ืึทืกืคึผืขืงืฅ, ืคึฟื•ืŸ ืงืึธื“ื™ืจื•ื ื’ ืกื˜ื™ืœ ืฆื• ื˜ื™ืคึผื™ืฉ ื‘ืึทื’ื–.

ืึธื‘ืขืจ, ื•ื•ื™ ืœืึทื ื’ ื•ื•ื™ ื“ื™ ืึทื ืึทืœื™ืกื™ืก ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื–ืขื ืขืŸ ื‘ืœื•ื™ื– ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ื”ื™ื’ืข ืฆื•ื‘ื™ื ื“ ืคื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืก IDE, ื–ื™ื™ ื–ืขื ืขืŸ ืคื•ืŸ ืงืœื™ื™ืŸ ื ื•ืฆืŸ ืคึฟืึทืจ ื“ื™ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคึผืจืึธืฆืขืก. ืกื˜ืึทื˜ื™ืง ืึทื ืึทืœื™ืกื™ืก ืžื•ื– ืžืงื•ื™ื ืฐืขืจืŸ ื•ื•ื™ ื“ืขืจ ืขืจืฉื˜ืขืจ ืฉืจื™ื˜ ืคื•ืŸ ื“ื™ ื‘ื•ื™ืขืŸ ืจืขืจื  - ืœื™ื ื™ืข, ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื–ืึธืœ ื“ืขืคื™ื ื™ืจืŸ ืงื•ื•ืึทืœื™ื˜ืขื˜ ื˜ื•ื™ืขืจืŸ, ืื•ืŸ ื“ื™ ื‘ื•ื™ืขืŸ ื–ืึธืœ ืคืึทืจืœืึธื–ืŸ ืื•ื™ื‘ ื“ื™ ืงื•ื•ืึทืœื™ื˜ืขื˜ ื˜ื•ื™ืขืจืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ. ืขืก ืื™ื– ื‘ืึทื•ื•ื•ืกื˜ ืึทื– TeamCity CI ืื™ื– ื™ื ืึทื’ืจื™ื™ื˜ื™ื“ ืžื™ื˜ IDEA. ืึธื‘ืขืจ ืืคื™ืœื• ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ TeamCity, ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื›ื˜ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืœื•ื™ืคืŸ IDEA ื™ื ืกืคึผืขืงืฉืึทื ื– ืื™ืŸ ืงื™ื™ืŸ ืื ื“ืขืจืข ืกื™ ืกืขืจื•ื•ืขืจ. ืื™ืš ืคึฟืึธืจืฉืœืึธื’ืŸ ืื™ืจ ื–ืขืŸ ื•ื•ื™ ื“ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ืžื™ื˜ IDEA Community Edition, Jenkins ืื•ืŸ Warnings NG ืคึผืœื•ื’ื™ืŸ.

ืฉืจื™ื˜ 1. ืœื•ื™ืคืŸ ื“ื™ ืึทื ืึทืœื™ืกื™ืก ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืึท ื‘ืึทืจื™ื›ื˜

ืื™ืŸ ืขืจืฉื˜ืขืจ, ื“ืขืจ ื’ืขื“ืึทื ืง ืคื•ืŸ ืคืœื™ืกื ื“ื™ืง ืึท IDE (ื“ืขืกืงื˜ืึทืคึผ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ!) ืื™ืŸ ืึท ืกื™ ืกื™ืกื˜ืขื ื•ื•ืึธืก ื”ืื˜ ื ื™ืฉื˜ ืึท ื’ืจืึทืคื™ืงืึทืœ ืฆื•ื‘ื™ื ื“ ืงืขืŸ ื•ื™ืกืงื•ืžืขืŸ ืกืึธืคืขืงื“ื™ืง ืื•ืŸ ื–ื™ื™ืขืจ ื˜ืจืึทื‘ืึทืœืกืึทื. ืฆื•ืž ื’ืœื™ืง, IDEA ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื”ืึธื‘ืŸ ืฆื•ื’ืขืฉื˜ืขืœื˜ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืœื•ื™ืคืŸ ืงืึธื“ ืคืึธืจืžืึทื˜ื˜ื™ื ื’ ะธ ื™ื ืกืคึผืขืงืฉืึทื ื– ืคื•ืŸ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื”. ื“ืขืจืฆื•, ืฆื• ืœื•ื™ืคืŸ IDEA ืื™ืŸ ื“ืขื ืžืึธื“ืข, ืึท ื’ืจืึทืคื™ืงืก ืกืึทื‘ืกื™ืกื˜ืึทื ืื™ื– ื ื™ืฉื˜ ืคืืจืœืื ื’ื˜ ืื•ืŸ ื“ื™ ื˜ืึทืกืงืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ืื•ื™ืฃ ืกืขืจื•ื•ืขืจืก ืžื™ื˜ ืึท ื˜ืขืงืกื˜ ืฉืึธืœ.

ื™ื ืกืคึผืขืงืฉืึทื ื– ื–ืขื ืขืŸ ืœืึธื ื˜ืฉื˜ ืžื™ื˜ ืึท ืฉืจื™ืคื˜ bin/inspect.sh ืคื•ืŸ ื“ื™ IDEA ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ. ื“ื™ ืคืืจืœืื ื’ื˜ ืคึผืึทืจืึทืžืขื˜ืขืจืก ื–ืขื ืขืŸ:

  • ืคื•ืœ ื•ื•ืขื’ ืฆื• ื“ื™ ืคึผืจื•ื™ืขืงื˜ (ืงืึธืจืขื•ื• ืึธื ืขืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ื’ืขืฉื˜ื™ืฆื˜),
  • ื•ื•ืขื’ ืฆื• ื“ื™ .ืงืกืžืœ ื˜ืขืงืข ืžื™ื˜ ื“ื•ืจื›ืงื•ืง ืกืขื˜ื˜ื™ื ื’ืก (ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืœื™ื’ืŸ ืื™ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืื™ืŸ .idea/inspectionProfiles/Project_Default.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 ื•ื•ืขื˜ ื–ื™ื™ืŸ:

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, ื•ื•ื™ื™ึทืœ ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ 'ืก ื”ื™ื™ื ื˜ืขืงืข ื•ื•ืขืŸ ืืจื‘ืขื˜ืŸ ืื™ืŸ ืกื™ ืื™ื– ืึท ื•ืžื–ื™ื›ืขืจ ื–ืึทืš ืื•ืŸ ืึธืคื˜ ื’ืึธืจ ื ื™ื˜ืึธ.

ื“ืึธืก ืื™ื– ื•ื•ื™ ื“ื™ ื˜ืขืงืข ืงืึทืคึผื™ื“ ืฆื• ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืงื•ืงื˜ ื•ื•ื™: 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

ื“ื™ ืึทื ืึทืœื™ืกื™ืก ื–ืึธืœ ืœื•ื™ืคืŸ ื”ืฆืœื—ื”, ืื•ืŸ ืคื™ืœืข .ืงืกืžืœ ื˜ืขืงืขืก ืžื™ื˜ ืึทื ืึทืœื™ื–ืขืจ ืจื™ืคึผืึธืจืฅ ื–ืึธืœ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ื˜ืึทืจื’ืขื˜/ื™ื“ืข_ื™ื ืกืคึผืขืงืฉืึทื ื– ืกื•ื‘ืคืึธืœื“ืขืจ.

ืื™ืฆื˜ ืขืก ืื™ื– ื ื™ื˜ ืžืขืจ ืงื™ื™ืŸ ืฆื•ื•ื™ื™ืคืœ ืึทื– ื“ื™ IDEA ืึทื ืึทืœื™ื–ืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื•ื™ืคืŸ ืกื˜ืึทื ื“ืึทืœืึธื ืข ืื™ืŸ ืงื™ื™ืŸ ืกื™ ืกื•ื•ื™ื•ื•ืข, ืื•ืŸ ืžื™ืจ ืžืึทืš ืื•ื™ืฃ ืฆื• ื“ื™ ืจื’ืข ืฉืจื™ื˜.

ืฉืจื™ื˜ 2. ื•ื•ื™ื™ึทื– ืื•ืŸ ืคื•ื ืึทื ื“ืขืจืงืœื™ื™ึทื‘ืŸ ื“ืขื ื‘ืึทืจื™ื›ื˜

ื‘ืึทืงื•ืžืขืŸ ื“ืขื ื‘ืึทืจื™ื›ื˜ ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ .ืงืกืžืœ ื˜ืขืงืขืก ืื™ื– ื”ืึทืœื‘ ื“ื™ ืฉืœืึทื›ื˜; ืื™ืฆื˜ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึทื›ืŸ ืขืก ืœื™ื™ื ืขื•ื•ื“ื™ืง ืคึฟืึทืจ ืžืขื ื˜ืฉ. ืื•ืŸ ืื•ื™ืš ื–ื™ื™ึทืŸ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื–ืึธืœ ื–ื™ื™ืŸ ื’ืขื ื™ืฆื˜ ืื™ืŸ ืงื•ื•ืึทืœื™ื˜ืขื˜ ื˜ื•ื™ืขืจืŸ - ื“ื™ ืœืึธื’ื™ืง ืคึฟืึทืจ ื“ื™ื˜ืขืจืžืึทื ื™ื ื’ ืฆื™ ื“ื™ ืื ื’ืขื ื•ืžืขืŸ ืขื ื“ืขืจื•ื ื’ ืคึผืึทืกื™ื– ืึธื“ืขืจ ืคื™ื™ืœื– ืœื•ื™ื˜ ืงื•ื•ืึทืœื™ื˜ืขื˜ ืงืจื™ื™ื˜ื™ืจื™ืึท.

ื“ืืก ื•ื•ืขื˜ ืื•ื ื“ื– ื”ืขืœืคืŸ Jenkins Warnings NG ืคึผืœื•ื’ื™ืŸ, ื•ื•ืึธืก ืื™ื– ื‘ืืคืจื™ื™ื˜ ืื™ืŸ ื™ืื ื•ืืจ 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')]
    )
}

ื“ืขืจ ื‘ืึทืจื™ื›ื˜ ืฆื•ื‘ื™ื ื“ ืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก:

ืคืœื™ืกื ื“ื™ืง IntelliJ IDEA ื™ื ืกืคึผืขืงืฉืึทื ื– ืื•ื™ืฃ Jenkins

ืงืึทื ื•ื•ื™ื ื™ืึทื ื˜ืœื™, ื“ืขื ืฆื•ื‘ื™ื ื“ ืื™ื– ื•ื ื™ื•ื•ืขืจืกืึทืœ ืคึฟืึทืจ ืึทืœืข ื“ืขืจืงืขื ื˜ ืึทื ืึทืœื™ื–ืขืจื–. ืขืก ื›ึผื•ืœืœ ืึทืŸ ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื• ื“ื™ืึทื’ืจืึทืžืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืคื•ืŸ ืคื™ื ื“ืก ื“ื•ืจืš ืงืึทื˜ืขื’ืึธืจื™ืข ืื•ืŸ ืึท ื’ืจืึทืคื™ืง ืคื•ืŸ ื“ื™ ื“ื™ื ืึทืžื™ืง ืคื•ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืคื™ื ื“ืก. ืื™ืจ ืงืขื ืขืŸ ื“ื•ืจื›ืคื™ืจืŸ ืึท ืฉื ืขืœ ื–ื•ื›ืŸ ืื™ืŸ ื“ื™ ื’ืจื™ื“ ืื™ืŸ ื“ื™ ื“ื ืึธ ืคื•ืŸ ื“ื™ ื‘ืœืึทื˜. ื“ืขืจ ื‘ืœื•ื™ื– ื–ืึทืš ื•ื•ืึธืก ื”ืื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ืจื™ื›ื˜ื™ืง ืคึฟืึทืจ IDEA ื™ื ืกืคึผืขืงืฉืึทื ื– ืื™ื– ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื‘ืœืขื˜ืขืจ ืงืึธื“ ื’ืœื™ื™ืš ืื™ืŸ Jenkins (ื›ืึธื˜ืฉ ืคึฟืึทืจ ืื ื“ืขืจืข ืจื™ืคึผืึธืจืฅ, ืœืžืฉืœ Checkstyle, ื“ืขื ืคึผืœื•ื’ื™ืŸ ืงืขื ืขืŸ ื˜ืึธืŸ ื“ืึธืก ื‘ื™ื•ื˜ืึทืคืœื™). ืขืก ืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก ืื™ื– ืึท ื–ืฉื•ืง ืื™ืŸ ื“ื™ IDEA ื‘ืึทืจื™ื›ื˜ ืคึผืึทืจืกืขืจ ื•ื•ืึธืก ื“ืึทืจืฃ ื–ื™ื™ืŸ ืคืึทืจืคืขืกื˜ื™ืงื˜.

ืฆื•ื•ื™ืฉืŸ ื“ื™ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ Warnings NG ืื™ื– ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืฆื•ื ื•ื™ืคื’ื™ืกืŸ ืคื™ื™ื ื“ื™ื ื’ื– ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืงื•ื•ืืœืŸ ืื™ืŸ ืื™ื™ืŸ ื‘ืึทืจื™ื›ื˜ ืื•ืŸ ืคึผืจืึธื’ืจืึทื ืงื•ื•ืึทืœื™ื˜ื™ ื’ืึทื˜ืขืก, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืึท "ืงืจืึทื˜ืฉืขื˜" ืคึฟืึทืจ ื“ื™ ืจืขืคึฟืขืจืขื ืฅ ืคึฟืึทืจื–ืึทืžืœื•ื ื’. ืขื˜ืœืขื›ืข ืงื•ื•ืึทืœื™ื˜ื™ ื’ืึทื˜ืขืก ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื™ื– ื‘ื ื™ืžืฆื ื“ืึธ - ืึธื‘ืขืจ, ืขืก ืื™ื– ื ื™ืฉื˜ ื’ืึทื ืฅ, ืื•ืŸ ืื™ืจ ื”ืึธื‘ืŸ ืฆื• ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืžืงื•ืจ ืงืึธื“. ืื•ื™ืฃ ื“ื™ ืื ื“ืขืจืข ื”ืึทื ื˜, ืคึฟืึทืจ ื’ืึทื ืฅ ืงืึธื ื˜ืจืึธืœ ืื™ื‘ืขืจ ื•ื•ืึธืก ืื™ื– ื’ืขืฉืขืขื ื™ืฉ, ื“ื™ "ืจืึทื˜ื˜ืฉืขื˜" ืงืขื ืขืŸ ื–ื™ื™ืŸ ื™ืžืคึผืœืึทืžืขื ืึทื“ ื™ื ื“ื™ืคึผืขื ื“ืึทื ื˜ืœื™ (ื–ืขืŸ ืžื™ื™ืŸ ืคืจื™ื™ึทืขืจื“ื™ืง ืคึผืึธืกื˜ืŸ ื•ื•ืขื’ืŸ ื“ืขื ื˜ืขืžืข).

ืกืึธืฃ

ืื™ื™ื“ืขืจ ืื™ืš ืึธื ื”ื™ื™ื‘ืŸ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ื“ืขื ืžืึทื˜ืขืจื™ืึทืœ, ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื–ื•ื›ืŸ: ื”ืื˜ ื•ื•ืขืจ ืขืก ื™ื– ืฉื•ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืื•ื™ืฃ ื“ืขื ื˜ืขืžืข ืื•ื™ืฃ Habrรฉ? ืื™ืš ื”ืื‘ ื ืืจ ื’ืขืคื•ื ืขืŸ ืื™ื ื˜ืขืจื•ื•ื™ื• 2017 ั lanyืฐืื• ืขืจ ื–ืื’ื˜:

ื•ื•ื™ ื•ื•ื™ื™ึทื˜ ื•ื•ื™ ืื™ืš ื•ื•ื™ืกืŸ, ืขืก ืื™ื– ืงื™ื™ืŸ ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Jenkins ืึธื“ืขืจ ืึท ืžืึทื•ื•ืขืŸ ืคึผืœื•ื’ื™ืŸ [โ€ฆ] ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ, ืงื™ื™ืŸ ืขื ื˜ื•ื–ื™ืึทืกื˜ ืงืขืŸ ืžืึทื›ืŸ ืคืจืขื ื“ื– ืžื™ื˜ IDEA Community Edition ืื•ืŸ Jenkins, ืคื™ืœืข ื•ื•ืึธืœื˜ ื ืึธืจ ื ื•ืฅ ืคื•ืŸ ื“ืขื.

ื ื•, ืฆื•ื•ื™ื™ ื™ืึธืจ ืฉืคึผืขื˜ืขืจ ืžื™ืจ ื”ืึธื‘ืŸ ื•ื•ืึธืจื ื™ื ื’ื– NG ืคึผืœื•ื’ื™ืŸ, ืื•ืŸ ืœืขืกืึธืฃ ื“ื™ ืคึฟืจื™ื™ึทื ื“ืฉืึทืคึฟื˜ ืื™ื– ื’ืขืงื•ืžืขืŸ ืฆื• ืคืจื•ื›ื˜!

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’