Pagpadagan sa IntelliJ IDEA inspeksyon sa Jenkins

Ang IntelliJ IDEA karon adunay labing abante nga static nga Java code analyzer, nga sa mga kapabilidad niini nagbiya sa mga "beterano" sama sa Checkstyle и Spotbugs. Ang daghang mga "inspeksyon" nagsusi sa code sa lainlaing mga aspeto, gikan sa istilo sa coding hangtod sa kasagaran nga mga bug.

Bisan pa, basta ang mga resulta sa pag-analisar gipakita lamang sa lokal nga interface sa IDE sa developer, kini gamay nga gamit sa proseso sa pag-uswag. Static nga pagtuki kinahanglan buhaton Ingon ang unang lakang sa pagtukod sa pipeline, ang mga resulta niini kinahanglan nga maghubit sa kalidad nga mga ganghaan, ug ang pagtukod kinahanglan nga mapakyas kung ang kalidad nga mga ganghaan dili mapasa. Nahibal-an nga ang TeamCity CI gihiusa sa IDEA. Apan bisan kung dili ka mogamit sa TeamCity, dali nimong sulayan ang pagpadagan sa mga pag-inspeksyon sa IDEA sa bisan unsang ubang CI server. Gisugyot ko nga imong tan-awon kung giunsa kini mahimo gamit ang IDEA Community Edition, Jenkins ug Mga Pasidaan NG plugin.

Lakang 1. Pagdalagan ang pagtuki sa sudlanan ug pagkuha og report

Sa sinugdan, ang ideya sa pagpadagan sa usa ka IDE (desktop application!) sa sulod sa usa ka sistema sa CI nga walay graphical interface mahimong daw kadudahan ug makahasol kaayo. Maayo na lang, ang mga developer sa IDEA naghatag sa abilidad sa pagdagan pag-format sa code и mga inspeksyon gikan sa command line. Dugang pa, aron makadagan ang IDEA sa kini nga mode, wala kinahanglana ang usa ka subsystem sa graphic ug kini nga mga buluhaton mahimo’g himuon sa mga server nga adunay usa ka kabhang sa teksto.

Ang mga inspeksyon gilunsad gamit ang script bin/inspect.sh gikan sa direktoryo sa pag-install sa IDEA. Ang mga parameter nga gikinahanglan mao ang:

  • bug-os nga dalan sa proyekto (mga paryente dili suportado),
  • dalan paingon sa .xml file nga adunay mga setting sa inspeksyon (kasagaran anaa sa sulod sa proyekto sa .idea/inspectionProfiles/Project_Default.xml),
  • bug-os nga agianan ngadto sa folder diin ang .xml nga mga file nga adunay mga taho sa mga resulta sa pagtuki itago.

Dugang pa, gilauman nga

  • ang agianan sa Java SDK ma-configure sa IDE, kung dili ang pag-analisar dili molihok. Kini nga mga setting anaa sa configuration file jdk.table.xml sa IDEA global configuration folder. Ang IDEA global configuration mismo nahimutang sa home directory sa user sa default, apan kini nga lokasyon mahimong tin-aw nga espesipiko sa file idea.properties.
  • Ang gi-analisa nga proyekto kinahanglan nga usa ka balido nga proyekto sa IDEA, diin kinahanglan nimo nga buhaton ang pipila ka mga file nga kasagarang gibalewala sa pagkontrol sa bersyon, nga mao:
    • .idea/inspectionProfiles/Project_Default.xml - Mga setting sa analisador, klaro nga magamit kini kung mag-inspeksyon sa sulud,
    • .idea/modules.xml - kung dili makuha namon ang sayup nga 'Kini nga proyekto wala’y mga module',
    • .idea/misc.xml - kung dili makuha namon ang sayup nga 'Ang JDK wala ma-configure sa husto alang niini nga proyekto',
    • *.iml-файлы - kung dili makakuha kami usa ka sayup bahin sa usa ka wala ma-configure nga JDK sa module.

Bisan kung kini nga mga file sagad gilakip sa .gitignore, wala silay sulod nga impormasyon nga espesipiko sa palibot sa usa ka partikular nga developer - dili sama, pananglitan, usa ka file workspace.xml, diin ang maong impormasyon anaa, ug busa dili kinahanglan nga itugyan kini.

Ang dayag nga solusyon mao ang pagputos sa JDK uban sa IDEA Community Edition ngadto sa usa ka sudlanan sa porma nga andam na nga "i-pitted" sa naanalisa nga mga proyekto. Magpili kita og usa ka angay nga base nga sudlanan, ug mao kini ang atong 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

Gamit ang opsyon idea.config.path gipugos namo ang IDEA sa pagpangita sa iyang global configuration sa folder /etc/idea, tungod kay ang folder sa balay sa user kung nagtrabaho sa CI usa ka butang nga dili sigurado ug kanunay nga wala.

Kini ang hitsura sa file nga gikopya sa sudlanan: jdk.table.xml, nga naglangkob sa mga agianan sa OpenJDK nga gi-install sa sulod sa sudlanan (usa ka susama nga file gikan sa imong kaugalingon nga direktoryo nga adunay mga setting sa IDEA mahimong makuha ingon usa ka sukaranan):

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>

Ang nahuman nga imahe anaa sa Docker Hub.

Sa dili pa mopadayon, atong susihon nga ang IDEA analyzer nagdagan sa sudlanan:

docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzer

Kinahanglang malampuson nga modagan ang pagtuki, ug daghang mga .xml nga mga file nga adunay mga taho sa analista kinahanglan nga makita sa target/idea_inspections subfolder.

Karon wala nay pagduha-duha nga ang IDEA analisador mahimong modagan nga standalone sa bisan unsang CI nga palibot, ug kita mopadayon sa ikaduhang lakang.

Lakang 2. Ipakita ug analisa ang report

Ang pagkuha sa report sa porma sa .xml nga mga file mao ang katunga sa gubat karon kinahanglan nimo nga himoon kini nga mabasa sa tawo. Ug usab ang mga resulta niini kinahanglan gamiton sa kalidad nga mga ganghaan - ang lohika alang sa pagtino kung ang gidawat nga pagbag-o moagi o mapakyas sumala sa kalidad nga pamatasan.

Makatabang kini kanato Jenkins Warnings NG Plugin, nga gipagawas kaniadtong Enero 2019. Uban sa pag-abut niini, daghang mga indibidwal nga mga plugins alang sa pagtrabaho uban ang static nga mga resulta sa pag-analisa sa Jenkins (CheckStyle, FindBugs, PMD, ug uban pa) gimarkahan na karon nga dili na magamit.

Ang plugin naglangkob sa duha ka bahin:

  • daghang tigkolekta sa mensahe sa analisador (bug-os nga listahan naglakip sa tanang analisador nga nailhan sa siyensiya gikan sa AcuCobol ngadto sa ZPT Lint),
  • usa ka tigtan-aw sa taho alang kanilang tanan.

Ang listahan sa mga butang nga mahimong analisahon sa Warnings NG naglakip sa mga pasidaan gikan sa Java compiler ug mga pasidaan gikan sa Maven execution logs: bisan tuod kini kanunay nga makita, kini panagsa ra nga espesipikong gisusi. Ang mga report sa IntelliJ IDEA gilakip usab sa lista sa mga giila nga format.

Tungod kay ang plugin bag-o, kini sa sinugdanan nakig-uban sa Jenkins Pipeline. Ang lakang sa pagtukod uban ang pag-apil niini ingon niini (gisulti lang namon sa plugin kung unsa nga format sa taho ang among nahibal-an ug kung unsang mga file ang kinahanglan i-scan):

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

Ang interface sa report ingon niini:

Pagpadagan sa IntelliJ IDEA inspeksyon sa Jenkins

Sayon, kini nga interface kay unibersal para sa tanan nga giila nga analisador. Naglangkob kini usa ka interactive nga diagram sa pag-apod-apod sa mga nakit-an pinaagi sa kategorya ug usa ka graph sa dinamika sa mga pagbag-o sa gidaghanon sa mga nakit-an. Mahimo nimong buhaton ang dali nga pagpangita sa grid sa ilawom sa panid. Ang bugtong butang nga wala molihok sa husto alang sa mga pag-inspeksyon sa IDEA mao ang abilidad sa pag-browse sa code direkta sa Jenkins (bisan pa alang sa ubang mga taho, pananglitan Checkstyle, kini nga plugin makahimo niini nga matahum). Morag kini usa ka bug sa IDEA report parser nga kinahanglan ayohon.

Lakip sa mga bahin sa Warnings NG mao ang abilidad sa pagtipon sa mga kaplag gikan sa lain-laing mga tinubdan sa usa ka report ug programa Quality Gates, lakip ang usa ka "ratchet" alang sa reference assembly. Ang pipila ka dokumentasyon sa programming sa Quality Gates anaa dinhi - bisan pa, kini dili kompleto, ug kinahanglan nimo nga tan-awon ang gigikanan nga code. Sa laing bahin, para sa hingpit nga pagkontrolar sa nanghitabo, ang “ratchet” mahimong ipatuman nga independente (tan-awa ang my miaging post mahitungod niini nga tema).

konklusyon

Sa wala pa magsugod sa pag-andam niini nga materyal, nakahukom ko sa pagpangita: aduna na bay nagsulat niini nga hilisgutan sa Habré? nakit-an ra nako interbyu 2017 с lanydiin siya nag-ingon:

Sa akong nahibal-an, wala'y panagsama sa Jenkins o usa ka maven plugin [...] Sa prinsipyo, bisan kinsa nga mahiligon mahimong makighigala sa IDEA Community Edition ug Jenkins, daghan ang makabenepisyo niini.

Aw, duha ka tuig ang milabay kami adunay Mga Pasidaan NG Plugin, ug sa katapusan kini nga panaghigalaay natuman!

Source: www.habr.com

Pagpalit kasaligan nga pag-host alang sa mga site nga adunay proteksyon sa DDoS, mga server sa VPS VDS 🔥 Pagpalit og kasaligang website hosting nga adunay proteksyon sa DDoS, VPS VDS servers | ProHoster