Jalanake IntelliJ IDEA Inspections ing Jenkins

IntelliJ IDEA saiki duwe penganalisa kode statis Jawa paling canggih, sing, saka segi kemampuane, wis ninggalake "veteran" kaya Gaya mriksa ΠΈ Spotbugs. Akeh "pemeriksaan" mriksa kode ing macem-macem aspek, saka gaya coding nganti bug karakteristik.

Nanging, anggere asil analisis ditampilake mung ing IDE lokal pangembang, iku ora ana gunane kanggo proses pembangunan. Analisis statis kudu ditindakake minangka langkah pisanan saka pipa mbangun, asile kudu nemtokake gerbang kualitas, lan mbangun kudu gagal yen gerbang kualitas gagal. TeamCity CI dikenal minangka terintegrasi karo IDEA. Nanging sanajan sampeyan ora nggunakake TeamCity, sampeyan isih bisa nyoba nglakokake inspeksi IDEA ing server CI liyane. Aku propose kanggo ndeleng carane iki bisa rampung nggunakake IDEA Community Edition, Jenkins lan Warnings NG plugin.

Langkah 1. Jalanake analisis ing wadhah lan entuk laporan

Kaping pisanan, ide kanggo mbukak IDE (aplikasi desktop!) ing sistem CI sing ora duwe antarmuka grafis bisa uga katon ragu lan ngganggu. Untunge, pangembang IDEA wis nyedhiyakake kemampuan kanggo mbukak format kode ΠΈ pamriksan saka baris printah. Kajaba iku, kanggo mbukak IDEA ing mode iki, subsistem grafis ora dibutuhake, lan tugas kasebut bisa ditindakake ing server kanthi cangkang teks.

Pemriksaan diluncurake kanthi nggunakake skrip bin/inspect.sh saka direktori instalasi IDEA. Parameter sing dibutuhake yaiku:

  • path lengkap menyang proyek (sing relatif ora didhukung),
  • path menyang file .xml karo setelan inspeksi (biasane dumunung nang project ing .ide/inspectionProfiles/Project_Default.xml),
  • path lengkap kanggo folder ngendi file .xml karo laporan asil analisis bakal disimpen.

Kajaba iku, samesthine sing

  • path menyang SDK Jawa bakal diatur ing IDE, digunakake analisis ora bisa. Setelan kasebut ana ing file konfigurasi. jdk.table.xml ing folder konfigurasi global IDEA. Konfigurasi IDEA global standar dhewe ana ing direktori ngarep pangguna, nanging lokasi iki bisa diatur kanthi jelas ing file idea.properties.
  • proyek sing dianalisis kudu dadi proyek IDEA sing sah, sing sawetara file sing biasane diabaikan kudu setya kontrol versi, yaiku:
    • .idea/inspectionProfiles/Project_Default.xml - setelan analisa, mesthi bakal digunakake nalika ngluncurake inspeksi ing wadhah,
    • .idea/modules.xml - Yen ora, kita entuk kesalahan 'Proyek iki ora ana modul',
    • .idea/misc.xml - Yen ora, kita entuk kesalahan 'JDK ora dikonfigurasi kanthi bener kanggo proyek iki',
    • *.iml-Ρ„Π°ΠΉΠ»Ρ‹ - yen ora, kita bakal entuk kesalahan babagan JDK sing ora dikonfigurasi ing modul kasebut.

Senajan file iki biasane kalebu ing .gitignore, padha ora ngemot informasi tartamtu kanggo lingkungan pangembang tartamtu - ora kaya, contone, file workspace.xml, ngendi informasi kuwi, mung, ana, lan mulane iku ora perlu kanggo laku.

Dhewe, cara metu menehi saran kanggo ngemas JDK bebarengan karo Edisi Komunitas IDEA dadi wadhah kanthi bentuk siap "diset" ing proyek sing dianalisis. Ayo milih wadhah dhasar sing cocog, lan iki Dockerfile sing dipikolehi:

file docker

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

Nggunakake pilihan idea.config.path kita nggawe IDEA nggoleki konfigurasi global ing folder kasebut /etc/idea, wiwit folder ngarep pangguna ing kahanan apa ing CI minangka bab indefinite lan asring rampung absen.

Iki carane file disalin menyang wadhah katon kaya jdk.table.xml, sing ngemot dalan menyang OpenJDK sing diinstal ing wadhah kasebut (bisa didhasarake file sing padha saka direktori setelan IDEA sampeyan dhewe):

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>

Gambar rampung kasedhiya ing Docker Hub.

Sadurunge nerusake, ayo nyoba nglakokake parser IDEA ing wadhah kasebut:

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

Analisis kasebut kudu sukses, lan akeh file .xml kanthi laporan analisa kudu katon ing subfolder target/idea_inspections.

Saiki ora ana keraguan maneh yen analisa IDEA bisa ditindakake kanthi offline ing lingkungan CI, lan kita pindhah menyang langkah kapindho.

Langkah 2. Tampilake lan analisa laporan

Njupuk laporan ing wangun file .xml setengah perang, saiki kudu digawe manungsa-diwaca. Lan uga asile kudu digunakake ing gerbang kualitas - logika kanggo nemtokake manawa owah-owahan sing ditampa liwat utawa ora lulus miturut kritΓ©ria kualitas.

Iki bakal mbantu kita Jenkins Warnings NG Pluginsing dirilis ing Januari 2019. Kanthi introduksi, akeh plug-in sing kapisah kanggo nggarap asil analisis statis ing Jenkins (CheckStyle, FindBugs, PMD, lan sapiturute) saiki ditandhani minangka lungse.

Plugin kasusun saka rong bagean:

  • akeh kolektor pesen analyzer (daftar lengkap kalebu kabeh analisa sing dikenal kanggo ilmu saka AcuCobol nganti ZPT Lint),
  • panampil laporan siji kanggo kabeh mau.

Dhaptar bab sing Warnings NG bisa parse kalebu bebaya compiler Jawa lan bebaya saka log eksekusi Maven: senajan padha terus-terusan katon, padha arang purposefully analisa. Laporan IntelliJ IDEA uga kalebu ing dhaptar format sing diakoni.

Wiwit plugin kasebut anyar, mula sesambungan karo Pipeline Jenkins. Langkah mbangun karo partisipasi bakal katon kaya iki (kita mung ngandhani plugin format laporan sing kita kenal lan file sing kudu dipindai):

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

Antarmuka laporan katon kaya iki:

Jalanake IntelliJ IDEA Inspections ing Jenkins

Iku trep yen antarmuka iki universal kanggo kabeh parser dikenali. Isine grafik interaktif distribusi temuan miturut kategori lan grafik dinamika owah-owahan ing jumlah temuan. Ing kothak ing sisih ngisor kaca, sampeyan bisa nindakake telusuran cepet. Siji-sijine sing ora bisa ditindakake kanthi bener kanggo pamriksan IDEA yaiku kemampuan kanggo nelusur kode kasebut langsung ing Jenkins (sanajan kanggo laporan liyane, kayata Checkstyle, plugin iki bisa nindakake kanthi apik). Katon minangka bug ing parser laporan IDEA sing kudu didandani.

Ing antarane fitur Warnings NG yaiku kemampuan kanggo nggabungake temuan saka macem-macem sumber ing siji laporan lan program Quality Gates, kalebu "ratchet" kanggo perakitan referensi. Sawetara dokumentasi pemrograman Quality Gates kasedhiya kene - Nanging, iku ora lengkap, lan sampeyan kudu katon ing sumber. Ing sisih liya, kanggo ngontrol lengkap apa sing kedadeyan, "ratchet" bisa ditindakake kanthi mandiri (pirsani my kirim sadurunge babagan tema iki).

kesimpulan

Sadurunge miwiti nyiapake materi iki, aku mutusake kanggo nggoleki: apa ana sing wis nulis babagan topik iki ing Habré? Aku mung ketemu wawancara 2017 с laningendi iku ngandika:

Sa adoh aku ngerti, ora ana integrasi karo Jenkins utawa plugin maven [...] Ing asas, sembarang penggemar bisa nggawe IDEA Community Edition lan kanca Jenkins, akeh mung bakal entuk manfaat saka iki.

Inggih, sawise rong taun kita duwe Warnings NG Plugin, lan pungkasane kekancan iki dadi nyata!

Source: www.habr.com

Add a comment