Kumhanya IntelliJ IDEA kuongorora paJenkins

IntelliJ IDEA nhasi ine yakanyanya static Java code analyzer, iyo mukugona kwayo inosiya kure kumashure se "veterans" vakadai. Checkstyle ΠΈ Spotbugs. Yayo yakawanda "yekuongorora" tarisa iyo kodhi mune akasiyana mativi, kubva kukodhi maitiro kusvika kune akajairwa tsikidzi.

Nekudaro, chero mhedzisiro yekuongorora ichingoratidzwa mune yemuno interface yeIDE yevagadziri, ivo havana basa mudiki maitiro ekusimudzira. Static analysis zvinofanira kuzadzikiswa Senhanho yekutanga yepombi yekuvaka, mibairo yayo inofanirwa kutsanangura magedhi emhando, uye kuvaka kunofanirwa kukundikana kana magedhi emhando asina kupfuudzwa. Zvinozivikanwa kuti TeamCity CI yakabatanidzwa neIDEA. Asi kunyangwe ukasashandisa TeamCity, unogona kuyedza kuita IDEA ongororo mune chero imwe CI server. Ini ndinokurudzira kuti uone kuti izvi zvinogona kuitwa sei uchishandisa IDEA Community Edition, Jenkins uye Yambiro NG plugin.

Danho 1. Mhanyai kuongorora mumudziyo uye uwane mushumo

Pakutanga, iyo pfungwa yekumhanyisa IDE (desktop application!) mukati meCI sisitimu isina graphical interface inogona kuratidzika kunge isina chokwadi uye inonetsa zvikuru. Neraki, vagadziri veIDEA vakapa kugona kumhanya kukodha formatting ΠΈ kuongorora kubva pamutsetse wemirairo. Uyezve, kumhanyisa IDEA mune iyi modhi, giraidhi subsystem haidiwe uye mabasa aya anogona kuitwa pamaseva ane chinyorwa chinyorwa.

Kuongorora kunotangwa pachishandiswa script bin/inspect.sh kubva kuIDEA yekuisa dhairekitori. Maparameter anodiwa ndeaya:

  • nzira yakazara yepurojekiti (hama hadzitsigirwe),
  • nzira yekuenda ku.xml faira rine zvigadziriso zvekuongorora (kazhinji inowanikwa mukati mechirongwa mu.idea/inspectionProfiles/Project_Default.xml),
  • nzira yakazara yekuenda kufolda umo .xml mafaera ane mishumo pamusoro peongororo zvabuda achachengetwa.

Mukuwedzera, zvinotarisirwa kuti

  • nzira inoenda kuJava SDK ichagadziriswa muIDE, kana zvisina kudaro kuongorora hakuzoshanda. Aya marongero ari mufaira rekugadzirisa jdk.table.xml muIDEA yepasi rose gadziriso folda. Iyo IDEA yepasirese kumisikidzwa pachayo inowanikwa mudhairekitori remushandisi nekusarudzika, asi iyi nzvimbo inogona kutsanangurwa zvakajeka mufaira idea.properties.
  • Iyo yakaongororwa purojekiti inofanirwa kuve inoshanda IDEA purojekiti, iyo yauchazofanira kuita mamwe mafaera anowanzo furatirwa kushandurudzo control, anoti:
    • .idea/inspectionProfiles/Project_Default.xml - analyzer marongero, anozo shandiswa pakuita ongororo mumudziyo,
    • .idea/modules.xml - kana zvikasadaro tichawana kukanganisa 'Iyi purojekiti haina ma module',
    • .idea/misc.xml - kana zvikasadaro tichawana kukanganisa 'Iyo JDK haina kugadzirwa zvakanaka purojekiti iyi',
    • *.iml-Ρ„Π°ΠΉΠ»Ρ‹ - kana zvikasadaro isu tichawana kukanganisa nezve isina kurongeka JDK mune module.

Kunyangwe aya mafaera anowanzo kuverengerwa mukati .gitignore, ivo havana ruzivo rwakanangana nemhoteredzo yemumwe mugadziri - kusiyana, semuenzaniso, faira workspace.xml, apo ruzivo rwakadaro rwuri, uye naizvozvo hapana chikonzero chekuzviita.

Mhinduro iri pachena ndeyekuisa iyo JDK pamwe neIDEA Community Edition mumudziyo mune fomu yakagadzirira "kupinzwa" pamapurojekiti akaongororwa. Ngatisarudzei yakakodzera base mudziyo, uye izvi ndizvo zvichave yedu 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

Kushandisa sarudzo idea.config.path isu takamanikidza IDEA kutsvaga kurongeka kwayo kwepasirese muforodha /etc/idea, nekuti folda yekumba yemushandisi kana uchishanda muCI chinhu chisina chokwadi uye kazhinji chisipo zvachose.

Izvi ndizvo zvinoita faira rakakopwa mugaba rinotaridzika se: jdk.table.xml, iyo ine nzira dzeOpenJDK yakaiswa mukati memudziyo (faira rakafanana kubva kune yako dhairekitori ine IDEA marongero anogona kutorwa sehwaro):

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>

Mufananidzo wapera inowanikwa paDocker Hub.

Tisati taenderera mberi, ngatitarisei kuti IDEA analyzer iri kushanda mumudziyo:

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

Ongororo yacho inofanira kushanda zvinobudirira, uye akawanda .xml mafaira ane analyzer mishumo anofanira kuoneka mu target/idea_inspections subfolder.

Ikozvino hapasisina kupokana kuti IDEA analyzer inogona kumhanyisa yakamira mune chero CI nharaunda, uye isu tinoenda kune yechipiri nhanho.

Danho 2. Ratidza uye ongorora mushumo

Kuwana rondedzero iri muchimiro che .xml mafaera ihafu yehondo; ikozvino unofanirwa kuita kuti iverengeke nevanhu. Uye zvakare mhedzisiro yayo inofanirwa kushandiswa mumasuwo emhando yepamusoro - iyo logic yekuona kana shanduko inogamuchirwa inopfuura kana kukundikana zvinoenderana nemhando yemhando.

Izvi zvichatibatsira Jenkins Yambiro NG Plugin, iyo yakaburitswa muna Ndira 2019. Nekuuya kwayo, akawanda ega ega maplugins ekushanda ane static ongororo inobuda muJenkins (CheckStyle, FindBugs, PMD, nezvimwewo) zvino akamakwa seisingachashandi.

Iyo plugin ine zvikamu zviviri:

  • akawanda analyzer meseji vaunganidzi (Complete list inosanganisira ese anolyzer anozivikanwa nesainzi kubva kuAcuCobol kuenda kuZPT Lint),
  • mucherechedzo mumwe chete wevaridzi vese.

Rondedzero yezvinhu izvo Nyevero NG inogona kuongorora inosanganisira yambiro kubva kuJava compiler uye yambiro kubva kuMaven execution logs: kunyangwe ivo vachigara vachionekwa, ivo havawanzo kuongororwa. IntelliJ IDEA mishumo inosanganisirwa mune rondedzero yeanozivikanwa mafomati.

Sezvo plugin iri nyowani, inotanga kudyidzana zvakanaka neJenkins Pipeline. Nhanho yekuvaka nekutora chikamu kwayo ichaita seizvi (isu tinongoudza plugin kuti ndeapi mafomati yatinoziva uye kuti mafaira api anofanirwa kuongororwa):

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

Iyo report interface inoita seizvi:

Kumhanya IntelliJ IDEA kuongorora paJenkins

Zviri nyore, iyi interface ndeyese kune vese vanozivikanwa analyzer. Iine dhiyabhorosi inopindirana yekugoverwa kwezviwanikwa nechikamu uye girafu yesimba rekuchinja muhuwandu hwezviwanikwa. Iwe unogona kutsvaga nekukurumidza mugridi pazasi pepeji. Chinhu chega chisina kushanda nemazvo chekuongorora kweIDEA kwaive kugona kuongorora kodhi zvakananga muJenkins (kunyangwe kune mamwe mishumo, semuenzaniso Checkstyle, iyi plugin inogona kuita izvi zvakanaka). Zvinotaridza kunge iyi ibug muIDEA report parser inoda kugadziriswa.

Pakati pezvinhu zveYambiro NG kugona kuunganidza zvakawanikwa kubva kwakasiyana zvinyorwa mushumo uye chirongwa Quality Gates, kusanganisira "ratchet" yegungano rereferenzi. Mamwe eQuality Gates programming zvinyorwa zviripo pano - zvisinei, haina kukwana, uye iwe unofanirwa kutarisa iyo kodhi kodhi. Kune rimwe divi, kune kutonga kwakazara pane zviri kuitika, iyo "ratchet" inogona kuitwa yakazvimirira (ona yangu yapfuura post nezve dingindira iri).

mhedziso

Ndisati ndatanga kugadzirira chinyorwa ichi, ndakasarudza kutsvaga: pane atonyora pane iyi nyaya paHabré? Ndakawana chete kubvunzurudza 2017 с lanyapo anoti:

Sekuziva kwangu, hapana kubatanidzwa neJenkins kana maven plugin […] Muchidimbu, chero munhu anofarira anogona kuita hushamwari neIDEA Community Edition naJenkins, vazhinji vanongobatsirika kubva pane izvi.

Zvakanaka, makore maviri gare gare tine Yambiro NG Plugin uye hushamwari ihwohwo hwakazopedzisira hwasvika pakubudirira!

Source: www.habr.com

Voeg