ИзпълнСниС Π½Π° IntelliJ IDEA инспСкции Π½Π° 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 Community Edition Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ във Ρ„ΠΎΡ€ΠΌΠ°, Π³ΠΎΡ‚ΠΎΠ²Π° Π·Π° β€žΠΈΠ·Ρ‡ΠΈΡΡ‚Π²Π°Π½Π΅β€œ Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. НСка ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ подходящ основСн ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Π½Π°ΡˆΠΈΡΡ‚ 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 Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°Ρ‚Π° ΠΎΡ‚ Π±ΠΈΡ‚ΠΊΠ°Ρ‚Π°; сСга трябва Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‡Π΅Ρ‚ΠΈΠΌ ΠΎΡ‚ Ρ…ΠΎΡ€Π°. И ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² ΠΏΠΎΡ€Ρ‚ΠΈΡ‚Π΅ Π·Π° качСство - Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π·Π° опрСдСлянС Π΄Π°Π»ΠΈ ΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ‚Π° промяна ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΈΠ»ΠΈ Π½Π΅ отговаря Π½Π° ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈΡ‚Π΅ Π·Π° качСство.

Π’ΠΎΠ²Π° Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ДТСнкинс прСдупрСТдСния 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 Π΅ способността Π΄Π° сС ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°Ρ‚ открития ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΈ Π΄Π° сС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Ρ‚ Quality Gates, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ β€žΡ‚Ρ€Π΅ΡΡ‡ΠΎΡ‚ΠΊΠ°β€œ Π·Π° рСфСрСнтния ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚. Налична Π΅ част ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½Π°Ρ‚Π° докумСнтация Π½Π° Quality Gates Ρ‚ΡƒΠΊ - ΠΎΠ±Π°Ρ‡Π΅ Π½Π΅ Π΅ пълСн ΠΈ трябва Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ изходния ΠΊΠΎΠ΄. ΠžΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, Π·Π° пълСн ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π²ΡŠΡ€Ρ…Ρƒ случващото сС, β€žΡ‚Ρ€Π΅ΡΡ‡ΠΎΡ‚ΠΊΠ°Ρ‚Π°β€œ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²Π½Π΅Π΄Ρ€ΠΈ нСзависимо (Π²ΠΈΠΆΡ‚Π΅ моя ΠΏΡ€Π΅Π΄ΠΈΡˆΠ΅Π½ пост относно Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ°).

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° подготвям Ρ‚ΠΎΠ·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Ρ€Π΅ΡˆΠΈΡ… Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΡ: някой Π²Π΅Ρ‡Π΅ писал Π»ΠΈ Π΅ ΠΏΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° Π² Π₯Π°Π±Ρ€Π΅? НамСрих само ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŽ 2017 Π³ с Π»Π°Π½ΠΈΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΊΠ°Π·Π²Π°:

Π”ΠΎΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π·Π½Π°ΠΌ, няма интСграция с Jenkins ΠΈΠ»ΠΈ maven плъгин […] По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ всСки Снтусиаст Π±ΠΈ могъл Π΄Π° сС сприятСли с IDEA Community Edition ΠΈ Jenkins, ΠΌΠ½ΠΎΠ·ΠΈΠ½Π° само Π±ΠΈΡ…Π° спСчСлили ΠΎΡ‚ Ρ‚ΠΎΠ²Π°.

Π•, Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΠΎ-късно ΠΈΠΌΠ°ΠΌΠ΅ Warnings NG Plugin ΠΈ Π½Π°ΠΉ-накрая Ρ‚ΠΎΠ²Π° приятСлство сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΈ!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€