Running IntelliJ Idea inspectiones in Jenkins

IntelliJ NOTITIA hodie habet analysrem Javae codicem static antecedens, qui in suis facultatibus longe post tales "veteranos" relinquit ut Checkstyle ΠΈ Spotbugs. Eius numerosae "inspectiones" in variis aspectibus codicem reprimunt, a stilo coding ad cimices typicos.

Attamen, dum eventus analysin tantum in loci instrumento IDE elit ostendit, parum utilia sunt ad processum evolutionis. Static analysis implendum est Cum primus gradus pipeline aedificandi, eius eventus qualitates portae definiant, et aedificium deficiat si qualitates portae non transmittantur. Notum est TeamCity CI integrari cum idea. Sed etiam si TeamCity non uteris, facile experiri potes inspectiones ideae currentis in aliquo alio ministro CI. Moneo te videre quomodo id fieri possit utens idea communitatis Editionis, Jenkins et Monitiones NG plugin.

Gradus 1. Curre ad analysis in vase atque fama

In primis, idea currentis IDE (in applicatione desktop!) intra systema CI, quod interface graphicum non habet, dubius et valde molestus videri potest. Fortunate, idea tincidunt ad currendum facultatem providit codice forma ΠΈ inspectiones ex mandato versus. Praeterea, ut idea hoc modo currat, subsystem graphics subsystem non requiritur et haec officia in testam textu ministrantium perfici possunt.

Inspectiones launched per scripturam bin/inspect.sh ex idea institutionem presul. Parametri sunt:

  • plenum iter ad project (relativi non valet);
  • iter ad .xml fasciculum cum occasus inspectionis (solet intra project in .idea/inspectionProfiles/Project_Default.xml).
  • plenum iter ad folder in quo .xml tabulae cum relationibus in analysi proventuum reponenda sunt.

Donec sit amet malesuada quam

  • iter ad Java SDK in IDE figurabitur, alioquin analysis non laborabit. Hae occasus in lima configuratione continentur jdk.table.xml in idea global configuratione folder. Idea configurationis globalis ipsa sita est in directorio domus utentis per defaltam, sed hoc loco potest expresse certa in file idea.properties.
  • Proiectum enucleatum validum esse debet ideae propositi, pro quo debebis aliquas tabellas committere quae versioni temperare solent, nempe:
    • .idea/inspectionProfiles/Project_Default.xml β€” настройки Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΎΠ½ΠΈ явно Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ запускС инспСкций Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅,
    • .idea/modules.xml - alioquin errorem dabimus "Hoc consilium nullum modulorum habet";
    • .idea/misc.xml - Aliter habebimus errorem 'JDK non configuratum proprie ad hoc propositum';
    • *.iml-Ρ„Π°ΠΉΠ»Ρ‹ β€” aliter errorem de non figurata JDK in modulo feremus.

Etsi haec files plerumque inclusa sunt .gitignore, nulla indicia specifica ad ambitum cuiusdam elit - dissimilem continent, exempli gratia fasciculi workspace.xmlubi talis notitia continetur, et ideo non est necesse committere.

Patens solutio est JDK involucrum una cum idea Editionis Vulgatae in vas in forma parata ut "conparari" in analysi inceptis. Vasa basi aptum eligamus, et hoc est quod noster Dockerfile erit:

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

Per optionem idea.config.path Ideam coacti sumus quaerere eius globalem configurationem in folder /etc/idea, quia res incerta est et saepe omnino absunt utentis domicilii in CI laborante.

Haec tabella exscripta est vasi similis: jdk.table.xml, quod continet vias ad OpenJDK in receptaculo inaugurato (similis fasciculi e proprio presul cum idea uncinis sumi potest pro fundamento);

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>

Perfecti imaginem praesto in Docker Hub.

Priusquam progrediamur, scriptor reprehendo ideae analystoris currere in continente;

docker run --rm -v <ΠΏΡƒΡ‚ΡŒ/ΠΊ/Π²Π°ΡˆΠ΅ΠΌΡƒ/ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ>:/var/project inponomarev/intellij-idea-analyzer

Analysis feliciter currere debet, et multae .xml tabulae cum relationibus analysentium in scopo/ideae_inspectiones subfolder apparere debent.

Nunc iam non est dubium quin idea analystoris analystoris solum in aliquo CI ambitu currere possit, et ad secundum gradum progredimur.

Gradus 2. Propono et famam resolvere

Renuntiatio in forma .xml imaginum media pugna est, nunc opus est ut homines lectitari possint. Et etiam eius eventus adhibeantur in portis qualitatibus - logica ad determinandum utrum acceptae mutationis transeat vel deficiat secundum criteria qualitatem.

Hoc nos adiuvabit Jenkins Admonitiones NG Pluginquae mense Ianuario MMXIX dimissa est. Sub adventum eius multa singula plugina ad operandum analysi statice proventuum apud Jenkins (CheckStyle, FindBugs, PMD, etc.) nunc obsoletae notantur.

Plugin duabus partibus constat:

  • multa analyser nuntius aerarii (plenus album omnes analysers scientiarum notas ab AcuCobol ad ZPT Lint) comprehendit.
  • una fama inspectoris omnibus.

Elenchus rerum, quae Monitiones NG resolvere possunt, monita e Javae compilator et monita e Maven tigna exsecutionis includunt: quamvis constanter conspicua sint, raro specie enucleata sunt. IntelliJ Idea relationum comprehenduntur etiam in indice formarum recognitarum.

Cum plugin novum sit, initio bene cum Jenkins Pipeline intercedit. Gradum constructum cum sua participatione hoc videbimus (solum plugin indicamus quod forma fama cognoscitur et quid lima lustrari debet);

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')]
    )
}

Renuntiatio interface talis est:

Running IntelliJ Idea inspectiones in Jenkins

Commode haec compositio universalis est omnibus analystoribus recognitis. Continet diagramma interactivum distributionis, quae invenit categoriam et graphum dynamicorum motuum in numero repertorum. In extrema paginae emittere potes. Sola res quae recte ad ideae inspectiones non operabatur, facultas erat in Jenkins codice directe browse (quamvis pro aliis relationibus, exempli gratia Checkstyle, hoc plugin pulchre hoc facere potest). Hoc simile est cimex in idea fama parser quae figi debet.

Inter lineamenta Monitionum NG facultas est inventiones aggregati ex diversis fontibus in una relatione et programmate Quality Portae, incluso "ratchet" pro conventu relationi. Some Quality Gates programming documentation is available hic β€” Attamen, non integrum est, et fontem codicis spectare habes. E contra, ad plenam potestatem eorum quae aguntur, Β« scalare Β» independenter impleri potest (vide meum. prior post de hoc argumento).

conclusio,

Priusquam hanc materiam parare incipiam, quaerere decrevi: quis iam de hoc argumento scripsit Habre? Tantum inveni colloquium 2017 с Lanyubi dicit:

Quantum scio, nulla est integratio cum Jenkins vel maven plugin […] Principio, quilibet fanaticus amicos facere potuit cum idea vulgatae editionis et Jenkins, multi hoc solum prodessent.

Bene, post biennium Monitiones NG Plugin habemus, et tandem haec amicitia ad fruitionem pervenit!

Source: www.habr.com